b5194762f2
In uplink we have command uplink share and we need to port it to uplinkng to have command with same functionality. Command could be executed with parameter or without. without any flags we share as readonly. Change-Id: I973b11d00da237358834acf5a863ebab37e684cc
209 lines
6.9 KiB
Go
209 lines
6.9 KiB
Go
// Copyright (C) 2021 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"storj.io/storj/cmd/uplinkng/ultest"
|
|
"storj.io/uplink"
|
|
)
|
|
|
|
func TestShare(t *testing.T) {
|
|
access := "12edqrJX1V243n5fWtUrwpMQXL8gKdY2wbyqRPSG3rsA1tzmZiQjtCyF896egifN2C2qdY6g5S1t6e8iDhMUon9Pb7HdecBFheAcvmN8652mqu8hRx5zcTUaRTWfFCKS2S6DHmTeqPUHJLEp6cJGXNHcdqegcKfeahVZGP4rTagHvFGEraXjYRJ3knAcWDGW6BxACqogEWez6r274JiUBfs4yRSbRNRqUEURd28CwDXMSHLRKKA7TEDKEdQ"
|
|
|
|
t.Run("share default access", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--access", access)
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with --readonly", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--access", access, "--readonly")
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with --disallow-lists", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--access", access, "--disallow-lists")
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Disallowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with --disallow-reads", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--access", access, "--disallow-reads")
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Disallowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with --writeonly", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
result := state.Fail(t, "share", "--access", access, "--writeonly")
|
|
assert.Equal(t, "permission is empty", result.Err.Error())
|
|
})
|
|
|
|
t.Run("share access with --public", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--public", "--not-after=none")
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with --not-after time restriction parameter", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
notAfterDate := "2022-01-01T15:01:01-01:00"
|
|
result := state.Succeed(t, "share", "--access", access, "--not-after", notAfterDate)
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : 2022-01-01 16:01:01
|
|
Paths : WARNING! The entire project is shared!
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
|
|
t.Run("share access with prefix", func(t *testing.T) {
|
|
state := ultest.Setup(commands)
|
|
|
|
acc, err := uplink.ParseAccess(access)
|
|
assert.NoError(t, err)
|
|
|
|
result := state.Succeed(t, "share", "--access", access, "sj://bucket/object-to-share")
|
|
|
|
// TODO we need to find nicer way to compare results
|
|
accessIndex := strings.Index(result.Stdout, "Access :")
|
|
result.Stdout = result.Stdout[:accessIndex]
|
|
|
|
result.RequireStdout(t, `
|
|
Sharing access to satellite `+acc.SatelliteAddress()+`
|
|
=========== ACCESS RESTRICTIONS ==========================================================
|
|
Download : Allowed
|
|
Upload : Disallowed
|
|
Lists : Allowed
|
|
Deletes : Disallowed
|
|
NotBefore : No restriction
|
|
NotAfter : No restriction
|
|
Paths : sj://bucket/object-to-share
|
|
=========== SERIALIZED ACCESS WITH THE ABOVE RESTRICTIONS TO SHARE WITH OTHERS ===========
|
|
`)
|
|
})
|
|
}
|