You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.9 KiB
119 lines
2.9 KiB
package shell
|
|
|
|
import (
|
|
"bytes"
|
|
"slices"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
|
|
)
|
|
|
|
func TestUpdateBucketActions_SetActions(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "anonymous",
|
|
Actions: []string{},
|
|
}
|
|
|
|
updateBucketActions(identity, "my-bucket", "Read,List")
|
|
|
|
expected := []string{"Read:my-bucket", "List:my-bucket"}
|
|
sort.Strings(identity.Actions)
|
|
sort.Strings(expected)
|
|
if !slices.Equal(identity.Actions, expected) {
|
|
t.Errorf("got %v, want %v", identity.Actions, expected)
|
|
}
|
|
}
|
|
|
|
func TestUpdateBucketActions_ReplaceActions(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "anonymous",
|
|
Actions: []string{"Read:my-bucket", "List:my-bucket"},
|
|
}
|
|
|
|
updateBucketActions(identity, "my-bucket", "Write")
|
|
|
|
expected := []string{"Write:my-bucket"}
|
|
if !slices.Equal(identity.Actions, expected) {
|
|
t.Errorf("got %v, want %v", identity.Actions, expected)
|
|
}
|
|
}
|
|
|
|
func TestUpdateBucketActions_None(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "anonymous",
|
|
Actions: []string{"Read:my-bucket", "List:my-bucket"},
|
|
}
|
|
|
|
updateBucketActions(identity, "my-bucket", "none")
|
|
|
|
if len(identity.Actions) != 0 {
|
|
t.Errorf("expected empty actions, got %v", identity.Actions)
|
|
}
|
|
}
|
|
|
|
func TestUpdateBucketActions_PreservesOtherBuckets(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "testuser",
|
|
Actions: []string{"Read:bucket-a", "Write:bucket-b", "List:bucket-a"},
|
|
}
|
|
|
|
updateBucketActions(identity, "bucket-a", "Write")
|
|
|
|
expected := []string{"Write:bucket-b", "Write:bucket-a"}
|
|
sort.Strings(identity.Actions)
|
|
sort.Strings(expected)
|
|
if !slices.Equal(identity.Actions, expected) {
|
|
t.Errorf("got %v, want %v", identity.Actions, expected)
|
|
}
|
|
}
|
|
|
|
func TestUpdateBucketActions_PreservesGlobalActions(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "testuser",
|
|
Actions: []string{"Admin", "Read:my-bucket"},
|
|
}
|
|
|
|
updateBucketActions(identity, "my-bucket", "none")
|
|
|
|
expected := []string{"Admin"}
|
|
if !slices.Equal(identity.Actions, expected) {
|
|
t.Errorf("got %v, want %v", identity.Actions, expected)
|
|
}
|
|
}
|
|
|
|
func TestDisplayBucketAccess(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "anonymous",
|
|
Actions: []string{"Read:my-bucket", "List:my-bucket", "Write:other-bucket"},
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
err := displayBucketAccess(&buf, "my-bucket", "anonymous", identity)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
output := buf.String()
|
|
if !bytes.Contains([]byte(output), []byte("List,Read")) {
|
|
t.Errorf("expected 'List,Read' in output, got: %s", output)
|
|
}
|
|
}
|
|
|
|
func TestDisplayBucketAccess_None(t *testing.T) {
|
|
identity := &iam_pb.Identity{
|
|
Name: "anonymous",
|
|
Actions: []string{"Write:other-bucket"},
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
err := displayBucketAccess(&buf, "my-bucket", "anonymous", identity)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
output := buf.String()
|
|
if !bytes.Contains([]byte(output), []byte("Access: none")) {
|
|
t.Errorf("expected 'Access: none' in output, got: %s", output)
|
|
}
|
|
}
|