mirror of https://github.com/dexidp/dex.git
2 changed files with 228 additions and 0 deletions
@ -0,0 +1,196 @@ |
|||||||
|
package server |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/json" |
||||||
|
"os" |
||||||
|
"testing" |
||||||
|
) |
||||||
|
|
||||||
|
func TestVaultSignerConfigUnmarshalJSON_WithEnvVars(t *testing.T) { |
||||||
|
// Save original environment variables
|
||||||
|
originalAddr := os.Getenv("VAULT_ADDR") |
||||||
|
originalToken := os.Getenv("VAULT_TOKEN") |
||||||
|
defer func() { |
||||||
|
os.Setenv("VAULT_ADDR", originalAddr) |
||||||
|
os.Setenv("VAULT_TOKEN", originalToken) |
||||||
|
}() |
||||||
|
|
||||||
|
// Set environment variables
|
||||||
|
os.Setenv("VAULT_ADDR", "http://vault.example.com:8200") |
||||||
|
os.Setenv("VAULT_TOKEN", "s.xxxxxxxxxxxxxxxx") |
||||||
|
|
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
json string |
||||||
|
want VaultSignerConfig |
||||||
|
wantErr bool |
||||||
|
}{ |
||||||
|
{ |
||||||
|
name: "empty config uses env vars", |
||||||
|
json: `{"keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "http://vault.example.com:8200", |
||||||
|
Token: "s.xxxxxxxxxxxxxxxx", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "config values override env vars", |
||||||
|
json: `{"addr": "http://custom.vault.com:8200", "token": "s.custom", "keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "http://custom.vault.com:8200", |
||||||
|
Token: "s.custom", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "partial config uses env vars for missing values", |
||||||
|
json: `{"addr": "http://custom.vault.com:8200", "keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "http://custom.vault.com:8200", |
||||||
|
Token: "s.xxxxxxxxxxxxxxxx", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "empty token in config uses env var", |
||||||
|
json: `{"addr": "http://custom.vault.com:8200", "token": "", "keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "http://custom.vault.com:8200", |
||||||
|
Token: "s.xxxxxxxxxxxxxxxx", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
var got VaultSignerConfig |
||||||
|
err := json.Unmarshal([]byte(tt.json), &got) |
||||||
|
|
||||||
|
if (err != nil) != tt.wantErr { |
||||||
|
t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
if got.Addr != tt.want.Addr { |
||||||
|
t.Errorf("Addr: got %q, want %q", got.Addr, tt.want.Addr) |
||||||
|
} |
||||||
|
if got.Token != tt.want.Token { |
||||||
|
t.Errorf("Token: got %q, want %q", got.Token, tt.want.Token) |
||||||
|
} |
||||||
|
if got.KeyName != tt.want.KeyName { |
||||||
|
t.Errorf("KeyName: got %q, want %q", got.KeyName, tt.want.KeyName) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func TestVaultSignerConfigUnmarshalJSON_WithoutEnvVars(t *testing.T) { |
||||||
|
// Save original environment variables
|
||||||
|
originalAddr := os.Getenv("VAULT_ADDR") |
||||||
|
originalToken := os.Getenv("VAULT_TOKEN") |
||||||
|
defer func() { |
||||||
|
os.Setenv("VAULT_ADDR", originalAddr) |
||||||
|
os.Setenv("VAULT_TOKEN", originalToken) |
||||||
|
}() |
||||||
|
|
||||||
|
// Unset environment variables
|
||||||
|
os.Unsetenv("VAULT_ADDR") |
||||||
|
os.Unsetenv("VAULT_TOKEN") |
||||||
|
|
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
json string |
||||||
|
want VaultSignerConfig |
||||||
|
wantErr bool |
||||||
|
}{ |
||||||
|
{ |
||||||
|
name: "config values used when env vars not set", |
||||||
|
json: `{"addr": "http://vault.example.com:8200", "token": "s.xxxxxxxxxxxxxxxx", "keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "http://vault.example.com:8200", |
||||||
|
Token: "s.xxxxxxxxxxxxxxxx", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "empty config when env vars not set", |
||||||
|
json: `{"keyName": "signing-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "", |
||||||
|
Token: "", |
||||||
|
KeyName: "signing-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "only keyName required in config", |
||||||
|
json: `{"keyName": "my-key"}`, |
||||||
|
want: VaultSignerConfig{ |
||||||
|
Addr: "", |
||||||
|
Token: "", |
||||||
|
KeyName: "my-key", |
||||||
|
}, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
var got VaultSignerConfig |
||||||
|
err := json.Unmarshal([]byte(tt.json), &got) |
||||||
|
|
||||||
|
if (err != nil) != tt.wantErr { |
||||||
|
t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
if got.Addr != tt.want.Addr { |
||||||
|
t.Errorf("Addr: got %q, want %q", got.Addr, tt.want.Addr) |
||||||
|
} |
||||||
|
if got.Token != tt.want.Token { |
||||||
|
t.Errorf("Token: got %q, want %q", got.Token, tt.want.Token) |
||||||
|
} |
||||||
|
if got.KeyName != tt.want.KeyName { |
||||||
|
t.Errorf("KeyName: got %q, want %q", got.KeyName, tt.want.KeyName) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func TestVaultSignerConfigUnmarshalJSON_InvalidJSON(t *testing.T) { |
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
json string |
||||||
|
wantErr bool |
||||||
|
}{ |
||||||
|
{ |
||||||
|
name: "invalid json", |
||||||
|
json: `{invalid json}`, |
||||||
|
wantErr: true, |
||||||
|
}, |
||||||
|
{ |
||||||
|
name: "empty json", |
||||||
|
json: `{}`, |
||||||
|
wantErr: false, |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
var got VaultSignerConfig |
||||||
|
err := json.Unmarshal([]byte(tt.json), &got) |
||||||
|
|
||||||
|
if (err != nil) != tt.wantErr { |
||||||
|
t.Errorf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr) |
||||||
|
return |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue