mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-24 06:50:40 +02:00
* fix: clone protobuf snapshots without copying internal locks * fix: reuse cloned snapshot fields when filtering
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package credential
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
type snapshotConfigurationStore struct {
|
|
CredentialStore
|
|
saved *iam_pb.S3ApiConfiguration
|
|
}
|
|
|
|
func (s *snapshotConfigurationStore) SaveConfiguration(_ context.Context, config *iam_pb.S3ApiConfiguration) error {
|
|
s.saved = config
|
|
return nil
|
|
}
|
|
|
|
func TestSaveConfigurationFiltersStaticIdentitySnapshot(t *testing.T) {
|
|
t.Parallel()
|
|
store := &snapshotConfigurationStore{}
|
|
manager := &CredentialManager{Store: store}
|
|
manager.SetStaticIdentities([]*iam_pb.Identity{{Name: "static"}})
|
|
source := &iam_pb.S3ApiConfiguration{Identities: []*iam_pb.Identity{
|
|
{Name: "alice", Actions: []string{"Read"}},
|
|
{Name: "static"},
|
|
{Name: "bob", Actions: []string{"Write"}},
|
|
}}
|
|
before := proto.Clone(source)
|
|
if err := manager.SaveConfiguration(context.Background(), source); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if store.saved == nil || len(store.saved.Identities) != 2 || store.saved.Identities[0].Name != "alice" || store.saved.Identities[1].Name != "bob" {
|
|
t.Fatalf("unexpected saved configuration: %v", store.saved)
|
|
}
|
|
if !proto.Equal(source, before) {
|
|
t.Fatal("filtering mutated the caller's configuration")
|
|
}
|
|
store.saved.Identities[0].Actions[0] = "Admin"
|
|
store.saved.Identities[1].Name = "changed"
|
|
if !proto.Equal(source, before) {
|
|
t.Fatal("saved identities alias the caller's configuration")
|
|
}
|
|
}
|