2021-11-03 13:51:47 +00:00
|
|
|
// Copyright (C) 2021 Storj Labs, Inc.
|
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2021-11-03 13:51:47 +00:00
|
|
|
|
2022-01-06 19:55:46 +00:00
|
|
|
"storj.io/storj/cmd/uplink/ultest"
|
2021-11-03 13:51:47 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestShare(t *testing.T) {
|
2022-01-25 23:39:26 +00:00
|
|
|
t.Run("share requires prefix", func(t *testing.T) {
|
|
|
|
ultest.Setup(commands).Fail(t, "share")
|
|
|
|
})
|
2021-11-03 13:51:47 +00:00
|
|
|
|
|
|
|
t.Run("share default access", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Allowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Allowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : No restriction
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --readonly", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "--readonly", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Allowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Allowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : No restriction
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --disallow-lists", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "--disallow-lists", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Allowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Disallowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : No restriction
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --disallow-reads", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "--disallow-reads", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Disallowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Allowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : No restriction
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --writeonly", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
result := state.Fail(t, "share", "--writeonly", "sj://some/prefix")
|
|
|
|
|
|
|
|
require.Equal(t, "permission is empty", result.Err.Error())
|
2021-11-03 13:51:47 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --public", func(t *testing.T) {
|
2022-01-27 19:50:12 +00:00
|
|
|
// Can't run this scenario because AuthService is not running in testplanet.
|
|
|
|
// If necessary we can mock AuthService like in https://github.com/storj/uplink/blob/main/testsuite/edge_test.go
|
|
|
|
t.Skip("No AuthService available in testplanet")
|
2021-11-03 13:51:47 +00:00
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "--public", "--not-after=none", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Allowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Allowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : No restriction
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("share access with --not-after time restriction parameter", func(t *testing.T) {
|
|
|
|
state := ultest.Setup(commands)
|
|
|
|
|
2022-01-25 23:39:26 +00:00
|
|
|
state.Succeed(t, "share", "--not-after", "2022-01-01T15:01:01-01:00", "sj://some/prefix").RequireStdoutGlob(t, `
|
|
|
|
Sharing access to satellite *
|
|
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
|
|
Download : Allowed
|
|
|
|
Upload : Disallowed
|
|
|
|
Lists : Allowed
|
|
|
|
Deletes : Disallowed
|
|
|
|
NotBefore : No restriction
|
|
|
|
NotAfter : 2022-01-01 16:01:01
|
|
|
|
Paths : sj://some/prefix
|
|
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
|
|
Access : *
|
2021-11-03 13:51:47 +00:00
|
|
|
`)
|
|
|
|
})
|
|
|
|
}
|