| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package s3api
- import (
- "strings"
- "testing"
- "time"
- "github.com/seaweedfs/seaweedfs/weed/iam/integration"
- "github.com/seaweedfs/seaweedfs/weed/iam/sts"
- "github.com/stretchr/testify/assert"
- )
- func TestS3IAMIntegration_isSTSIssuer(t *testing.T) {
- // Create test STS service with configuration
- stsService := sts.NewSTSService()
- // Set up STS configuration with a specific issuer
- testIssuer := "https://seaweedfs-prod.company.com/sts"
- stsConfig := &sts.STSConfig{
- Issuer: testIssuer,
- SigningKey: []byte("test-signing-key-32-characters-long"),
- TokenDuration: sts.FlexibleDuration{time.Hour},
- MaxSessionLength: sts.FlexibleDuration{12 * time.Hour}, // Required field
- }
- // Initialize STS service with config (this sets the Config field)
- err := stsService.Initialize(stsConfig)
- assert.NoError(t, err)
- // Create S3IAM integration with configured STS service
- s3iam := &S3IAMIntegration{
- iamManager: &integration.IAMManager{}, // Mock
- stsService: stsService,
- filerAddress: "test-filer:8888",
- enabled: true,
- }
- tests := []struct {
- name string
- issuer string
- expected bool
- }{
- // Only exact match should return true
- {
- name: "exact match with configured issuer",
- issuer: testIssuer,
- expected: true,
- },
- // All other issuers should return false (exact matching)
- {
- name: "similar but not exact issuer",
- issuer: "https://seaweedfs-prod.company.com/sts2",
- expected: false,
- },
- {
- name: "substring of configured issuer",
- issuer: "seaweedfs-prod.company.com",
- expected: false,
- },
- {
- name: "contains configured issuer as substring",
- issuer: "prefix-" + testIssuer + "-suffix",
- expected: false,
- },
- {
- name: "case sensitive - different case",
- issuer: strings.ToUpper(testIssuer),
- expected: false,
- },
- {
- name: "Google OIDC",
- issuer: "https://accounts.google.com",
- expected: false,
- },
- {
- name: "Azure AD",
- issuer: "https://login.microsoftonline.com/tenant-id/v2.0",
- expected: false,
- },
- {
- name: "Auth0",
- issuer: "https://mycompany.auth0.com",
- expected: false,
- },
- {
- name: "Keycloak",
- issuer: "https://keycloak.mycompany.com/auth/realms/master",
- expected: false,
- },
- {
- name: "Empty string",
- issuer: "",
- expected: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- result := s3iam.isSTSIssuer(tt.issuer)
- assert.Equal(t, tt.expected, result, "isSTSIssuer should use exact matching against configured issuer")
- })
- }
- }
- func TestS3IAMIntegration_isSTSIssuer_NoSTSService(t *testing.T) {
- // Create S3IAM integration without STS service
- s3iam := &S3IAMIntegration{
- iamManager: &integration.IAMManager{},
- stsService: nil, // No STS service
- filerAddress: "test-filer:8888",
- enabled: true,
- }
- // Should return false when STS service is not available
- result := s3iam.isSTSIssuer("seaweedfs-sts")
- assert.False(t, result, "isSTSIssuer should return false when STS service is nil")
- }
|