mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-06-05 22:44:17 +00:00
6efb78b7a8
* Smarter approach to the cookies - Single maxCookieSize = 1400 constant with clear documentation - Combined cookie storage for ~40-45% size reduction - Backward compatible migration from legacy cookies * Tuneup the code.
196 lines
4.6 KiB
Go
196 lines
4.6 KiB
Go
package providers
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// TestGetProviderWarnings tests that warnings are provided for providers with limitations
|
|
func TestGetProviderWarnings(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
checkContent string
|
|
providerType ProviderType
|
|
expectCount int
|
|
}{
|
|
{
|
|
name: "GitHub has OAuth 2.0 warning",
|
|
providerType: ProviderTypeGitHub,
|
|
expectCount: 2,
|
|
checkContent: "OAuth 2.0",
|
|
},
|
|
{
|
|
name: "Auth0 has offline_access info",
|
|
providerType: ProviderTypeAuth0,
|
|
expectCount: 1,
|
|
checkContent: "offline_access",
|
|
},
|
|
{
|
|
name: "Okta has configuration info",
|
|
providerType: ProviderTypeOkta,
|
|
expectCount: 1,
|
|
checkContent: "admin console",
|
|
},
|
|
{
|
|
name: "AWS Cognito has regional endpoint info",
|
|
providerType: ProviderTypeAWSCognito,
|
|
expectCount: 1,
|
|
checkContent: "regional endpoints",
|
|
},
|
|
{
|
|
name: "Generic provider has no warnings",
|
|
providerType: ProviderTypeGeneric,
|
|
expectCount: 0,
|
|
checkContent: "",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
warnings := GetProviderWarnings(tt.providerType)
|
|
|
|
if len(warnings) != tt.expectCount {
|
|
t.Errorf("Expected %d warnings, got %d", tt.expectCount, len(warnings))
|
|
}
|
|
|
|
if tt.checkContent != "" {
|
|
found := false
|
|
for _, warning := range warnings {
|
|
if strings.Contains(strings.ToLower(warning.Message), strings.ToLower(tt.checkContent)) {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
t.Errorf("Expected warning content '%s' not found", tt.checkContent)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestValidateProviderCompatibility tests OIDC compatibility validation
|
|
func TestValidateProviderCompatibility(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
providerType ProviderType
|
|
requiresOIDC bool
|
|
expectError bool
|
|
}{
|
|
{
|
|
name: "GitHub with OIDC requirement should error",
|
|
providerType: ProviderTypeGitHub,
|
|
requiresOIDC: true,
|
|
expectError: true,
|
|
},
|
|
{
|
|
name: "GitHub without OIDC requirement should pass",
|
|
providerType: ProviderTypeGitHub,
|
|
requiresOIDC: false,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "Auth0 with OIDC requirement should pass",
|
|
providerType: ProviderTypeAuth0,
|
|
requiresOIDC: true,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "Google with OIDC requirement should pass",
|
|
providerType: ProviderTypeGoogle,
|
|
requiresOIDC: true,
|
|
expectError: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := ValidateProviderCompatibility(tt.providerType, tt.requiresOIDC)
|
|
|
|
if tt.expectError && err == nil {
|
|
t.Error("Expected error but got none")
|
|
}
|
|
|
|
if !tt.expectError && err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestGetProviderRecommendations tests that recommendations are provided
|
|
func TestGetProviderRecommendations(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
providerType ProviderType
|
|
expectMin int
|
|
}{
|
|
{
|
|
name: "GitHub recommendations",
|
|
providerType: ProviderTypeGitHub,
|
|
expectMin: 3,
|
|
},
|
|
{
|
|
name: "Auth0 recommendations",
|
|
providerType: ProviderTypeAuth0,
|
|
expectMin: 3,
|
|
},
|
|
{
|
|
name: "AWS Cognito recommendations",
|
|
providerType: ProviderTypeAWSCognito,
|
|
expectMin: 3,
|
|
},
|
|
{
|
|
name: "Generic provider no recommendations",
|
|
providerType: ProviderTypeGeneric,
|
|
expectMin: 0,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
recommendations := GetProviderRecommendations(tt.providerType)
|
|
|
|
if len(recommendations) < tt.expectMin {
|
|
t.Errorf("Expected at least %d recommendations, got %d", tt.expectMin, len(recommendations))
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestFormatProviderWarnings tests warning formatting
|
|
func TestFormatProviderWarnings(t *testing.T) {
|
|
warnings := []ProviderWarning{
|
|
{
|
|
ProviderType: ProviderTypeGitHub,
|
|
Level: "warning",
|
|
Message: "Test warning message",
|
|
},
|
|
{
|
|
ProviderType: ProviderTypeGitHub,
|
|
Level: "info",
|
|
Message: "Test info message",
|
|
},
|
|
}
|
|
|
|
formatted := FormatProviderWarnings(warnings)
|
|
|
|
if !strings.Contains(formatted, "[WARNING]") {
|
|
t.Error("Expected formatted output to contain [WARNING]")
|
|
}
|
|
|
|
if !strings.Contains(formatted, "[INFO]") {
|
|
t.Error("Expected formatted output to contain [INFO]")
|
|
}
|
|
|
|
if !strings.Contains(formatted, "Test warning message") {
|
|
t.Error("Expected formatted output to contain warning message")
|
|
}
|
|
|
|
// Test empty warnings
|
|
emptyFormatted := FormatProviderWarnings([]ProviderWarning{})
|
|
if emptyFormatted != "" {
|
|
t.Error("Expected empty string for no warnings")
|
|
}
|
|
}
|