master
go 154 lines 3.59 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package cloudauth
4
5 import (
6 "encoding/json"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11 "gopkg.in/yaml.v3"
12 )
13
14 func TestConfigValidate(t *testing.T) {
15 tests := map[string]struct {
16 cfg Config
17 wantErr bool
18 }{
19 "provider omitted": {
20 cfg: Config{},
21 },
22 "provider empty": {
23 cfg: Config{Provider: ""},
24 },
25 "provider none": {
26 cfg: Config{Provider: ProviderNone},
27 },
28 "provider none with azure_ad block": {
29 cfg: Config{
30 Provider: ProviderNone,
31 AzureAD: &AzureADAuthConfig{
32 Mode: AzureADAuthModeServicePrincipal,
33 },
34 },
35 },
36 "provider azure_ad valid": {
37 cfg: Config{
38 Provider: ProviderAzureAD,
39 AzureAD: &AzureADAuthConfig{
40 Mode: AzureADAuthModeServicePrincipal,
41 ModeServicePrincipal: &AzureADModeServicePrincipalConfig{
42 TenantID: "tenant",
43 ClientID: "client",
44 ClientSecret: "secret",
45 },
46 },
47 },
48 },
49 "provider azure_ad missing block": {
50 cfg: Config{
51 Provider: ProviderAzureAD,
52 },
53 wantErr: true,
54 },
55 "provider azure_ad invalid": {
56 cfg: Config{
57 Provider: ProviderAzureAD,
58 AzureAD: &AzureADAuthConfig{
59 Mode: AzureADAuthModeServicePrincipal,
60 ModeServicePrincipal: &AzureADModeServicePrincipalConfig{
61 TenantID: "tenant",
62 ClientID: "client",
63 },
64 },
65 },
66 wantErr: true,
67 },
68 "invalid provider": {
69 cfg: Config{Provider: "invalid"},
70 wantErr: true,
71 },
72 }
73
74 for name, tc := range tests {
75 t.Run(name, func(t *testing.T) {
76 err := tc.cfg.Validate()
77 if tc.wantErr {
78 require.Error(t, err)
79 return
80 }
81 require.NoError(t, err)
82 })
83 }
84 }
85
86 func TestConfigIsEnabled(t *testing.T) {
87 assert.False(t, Config{}.IsEnabled())
88 assert.False(t, Config{Provider: ""}.IsEnabled())
89 assert.False(t, Config{Provider: ProviderNone}.IsEnabled())
90 assert.True(t, Config{Provider: ProviderAzureAD}.IsEnabled())
91 }
92
93 func TestConfigNewCredentialErrors(t *testing.T) {
94 t.Run("provider none", func(t *testing.T) {
95 _, err := (Config{Provider: ProviderNone}).NewCredential()
96 require.Error(t, err)
97 assert.ErrorContains(t, err, "cloud_auth is not enabled")
98 })
99
100 t.Run("invalid provider", func(t *testing.T) {
101 _, err := (Config{Provider: Provider("invalid")}).NewCredential()
102 require.Error(t, err)
103 assert.ErrorContains(t, err, `cloud_auth.provider "invalid" is invalid`)
104 })
105 }
106
107 func TestConfigMarshalDisabledOmitsProviderBlocks(t *testing.T) {
108 cfg := Config{}
109
110 jsonData, err := json.Marshal(cfg)
111 require.NoError(t, err)
112
113 var gotJSON map[string]any
114 require.NoError(t, json.Unmarshal(jsonData, &gotJSON))
115 assert.Equal(t, "none", gotJSON["provider"])
116 _, ok := gotJSON["azure_ad"]
117 assert.False(t, ok)
118
119 yamlData, err := yaml.Marshal(cfg)
120 require.NoError(t, err)
121
122 var gotYAML map[string]any
123 require.NoError(t, yaml.Unmarshal(yamlData, &gotYAML))
124 assert.Equal(t, "none", gotYAML["provider"])
125 _, ok = gotYAML["azure_ad"]
126 assert.False(t, ok)
127 }
128
129 func TestConfigMarshalAzureADIncludesBlock(t *testing.T) {
130 cfg := Config{
131 Provider: ProviderAzureAD,
132 AzureAD: &AzureADAuthConfig{
133 Mode: AzureADAuthModeDefault,
134 },
135 }
136
137 jsonData, err := json.Marshal(cfg)
138 require.NoError(t, err)
139
140 var gotJSON map[string]any
141 require.NoError(t, json.Unmarshal(jsonData, &gotJSON))
142 assert.Equal(t, "azure_ad", gotJSON["provider"])
143 _, ok := gotJSON["azure_ad"]
144 assert.True(t, ok)
145
146 yamlData, err := yaml.Marshal(cfg)
147 require.NoError(t, err)
148
149 var gotYAML map[string]any
150 require.NoError(t, yaml.Unmarshal(yamlData, &gotYAML))
151 assert.Equal(t, "azure_ad", gotYAML["provider"])
152 _, ok = gotYAML["azure_ad"]
153 assert.True(t, ok)
154 }