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.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							121 lines
						
					
					
						
							3.1 KiB
						
					
					
				
								package test
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"context"
							 | 
						|
									"testing"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/credential"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/util"
							 | 
						|
								
							 | 
						|
									// Import all store implementations to register them
							 | 
						|
									_ "github.com/seaweedfs/seaweedfs/weed/credential/filer_etc"
							 | 
						|
									_ "github.com/seaweedfs/seaweedfs/weed/credential/memory"
							 | 
						|
									_ "github.com/seaweedfs/seaweedfs/weed/credential/postgres"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func TestStoreRegistration(t *testing.T) {
							 | 
						|
									// Test that stores are registered
							 | 
						|
									storeNames := credential.GetAvailableStores()
							 | 
						|
									if len(storeNames) == 0 {
							 | 
						|
										t.Fatal("No credential stores registered")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									expectedStores := []string{string(credential.StoreTypeFilerEtc), string(credential.StoreTypeMemory), string(credential.StoreTypePostgres)}
							 | 
						|
								
							 | 
						|
									// Verify all expected stores are present
							 | 
						|
									for _, expected := range expectedStores {
							 | 
						|
										found := false
							 | 
						|
										for _, storeName := range storeNames {
							 | 
						|
											if string(storeName) == expected {
							 | 
						|
												found = true
							 | 
						|
												break
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										if !found {
							 | 
						|
											t.Errorf("Expected store not found: %s", expected)
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									t.Logf("Available stores: %v", storeNames)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func TestMemoryStoreIntegration(t *testing.T) {
							 | 
						|
									// Test creating credential manager with memory store
							 | 
						|
									config := util.GetViper()
							 | 
						|
									cm, err := credential.NewCredentialManager(credential.StoreTypeMemory, config, "test.")
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("Failed to create memory credential manager: %v", err)
							 | 
						|
									}
							 | 
						|
									defer cm.Shutdown()
							 | 
						|
								
							 | 
						|
									// Test that the store is of the correct type
							 | 
						|
									if cm.GetStore().GetName() != credential.StoreTypeMemory {
							 | 
						|
										t.Errorf("Expected memory store, got %s", cm.GetStore().GetName())
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test basic operations
							 | 
						|
									ctx := context.Background()
							 | 
						|
								
							 | 
						|
									// Create test user
							 | 
						|
									testUser := &iam_pb.Identity{
							 | 
						|
										Name:    "testuser",
							 | 
						|
										Actions: []string{"Read", "Write"},
							 | 
						|
										Account: &iam_pb.Account{
							 | 
						|
											Id:           "123456789012",
							 | 
						|
											DisplayName:  "Test User",
							 | 
						|
											EmailAddress: "test@example.com",
							 | 
						|
										},
							 | 
						|
										Credentials: []*iam_pb.Credential{
							 | 
						|
											{
							 | 
						|
												AccessKey: "AKIAIOSFODNN7EXAMPLE",
							 | 
						|
												SecretKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
							 | 
						|
											},
							 | 
						|
										},
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test CreateUser
							 | 
						|
									err = cm.CreateUser(ctx, testUser)
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("CreateUser failed: %v", err)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test GetUser
							 | 
						|
									user, err := cm.GetUser(ctx, "testuser")
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("GetUser failed: %v", err)
							 | 
						|
									}
							 | 
						|
									if user.Name != "testuser" {
							 | 
						|
										t.Errorf("Expected user name 'testuser', got %s", user.Name)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test ListUsers
							 | 
						|
									users, err := cm.ListUsers(ctx)
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("ListUsers failed: %v", err)
							 | 
						|
									}
							 | 
						|
									if len(users) != 1 || users[0] != "testuser" {
							 | 
						|
										t.Errorf("Expected ['testuser'], got %v", users)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test GetUserByAccessKey
							 | 
						|
									userByKey, err := cm.GetUserByAccessKey(ctx, "AKIAIOSFODNN7EXAMPLE")
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("GetUserByAccessKey failed: %v", err)
							 | 
						|
									}
							 | 
						|
									if userByKey.Name != "testuser" {
							 | 
						|
										t.Errorf("Expected user name 'testuser', got %s", userByKey.Name)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Test DeleteUser
							 | 
						|
									err = cm.DeleteUser(ctx, "testuser")
							 | 
						|
									if err != nil {
							 | 
						|
										t.Fatalf("DeleteUser failed: %v", err)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Verify user was deleted
							 | 
						|
									_, err = cm.GetUser(ctx, "testuser")
							 | 
						|
									if err != credential.ErrUserNotFound {
							 | 
						|
										t.Errorf("Expected ErrUserNotFound, got %v", err)
							 | 
						|
									}
							 | 
						|
								}
							 |