@@ -15,7 +15,11 @@ limitations under the License.
1515
1616package configuration
1717
18- import "testing"
18+ import (
19+ "testing"
20+
21+ "oras.land/oras-go/v2/registry/remote/properties"
22+ )
1923
2024func Test_EncodeAuth (t * testing.T ) {
2125 tests := []struct {
@@ -121,3 +125,136 @@ func TestAuthConfig_DecodeAuth(t *testing.T) {
121125 })
122126 }
123127}
128+
129+ func TestCredential (t * testing.T ) {
130+ tests := []struct {
131+ name string
132+ authCfg AuthConfig
133+ want properties.Credential
134+ wantErr bool
135+ }{
136+ {
137+ name : "Username and password" ,
138+ authCfg : AuthConfig {
139+ Username : "username" ,
140+ Password : "password" ,
141+ },
142+ want : properties.Credential {
143+ Username : "username" ,
144+ Password : "password" ,
145+ },
146+ },
147+ {
148+ name : "Identity token" ,
149+ authCfg : AuthConfig {
150+ IdentityToken : "identity_token" ,
151+ },
152+ want : properties.Credential {
153+ RefreshToken : "identity_token" ,
154+ },
155+ },
156+ {
157+ name : "Registry token" ,
158+ authCfg : AuthConfig {
159+ RegistryToken : "registry_token" ,
160+ },
161+ want : properties.Credential {
162+ AccessToken : "registry_token" ,
163+ },
164+ },
165+ {
166+ name : "All fields" ,
167+ authCfg : AuthConfig {
168+ Username : "username" ,
169+ Password : "password" ,
170+ IdentityToken : "identity_token" ,
171+ RegistryToken : "registry_token" ,
172+ },
173+ want : properties.Credential {
174+ Username : "username" ,
175+ Password : "password" ,
176+ RefreshToken : "identity_token" ,
177+ AccessToken : "registry_token" ,
178+ },
179+ },
180+ {
181+ name : "Empty auth config" ,
182+ authCfg : AuthConfig {},
183+ want : properties.Credential {},
184+ },
185+ {
186+ name : "Auth field overrides username and password" ,
187+ authCfg : AuthConfig {
188+ Auth : "dXNlcm5hbWU6cGFzc3dvcmQ=" , // username:password
189+ Username : "old_username" ,
190+ Password : "old_password" ,
191+ },
192+ want : properties.Credential {
193+ Username : "username" ,
194+ Password : "password" ,
195+ },
196+ },
197+ {
198+ name : "Auth field with identity and registry tokens" ,
199+ authCfg : AuthConfig {
200+ Auth : "dXNlcm5hbWU6cGFzc3dvcmQ=" , // username:password
201+ IdentityToken : "identity_token" ,
202+ RegistryToken : "registry_token" ,
203+ },
204+ want : properties.Credential {
205+ Username : "username" ,
206+ Password : "password" ,
207+ RefreshToken : "identity_token" ,
208+ AccessToken : "registry_token" ,
209+ },
210+ },
211+ {
212+ name : "Invalid auth field" ,
213+ authCfg : AuthConfig {
214+ Auth : "invalid_base64!@#" ,
215+ },
216+ want : properties .EmptyCredential ,
217+ wantErr : true ,
218+ },
219+ {
220+ name : "Auth field bad format" ,
221+ authCfg : AuthConfig {
222+ Auth : "d2hhdGV2ZXI=" , // whatever (no colon)
223+ },
224+ want : properties .EmptyCredential ,
225+ wantErr : true ,
226+ },
227+ {
228+ name : "Auth field username only" ,
229+ authCfg : AuthConfig {
230+ Auth : "dXNlcm5hbWU6" , // username:
231+ },
232+ want : properties.Credential {
233+ Username : "username" ,
234+ Password : "" ,
235+ },
236+ },
237+ {
238+ name : "Auth field password only" ,
239+ authCfg : AuthConfig {
240+ Auth : "OnBhc3N3b3Jk" , // :password
241+ },
242+ want : properties.Credential {
243+ Username : "" ,
244+ Password : "password" ,
245+ },
246+ },
247+ }
248+ for _ , tt := range tests {
249+ t .Run (tt .name , func (t * testing.T ) {
250+ got , err := tt .authCfg .Credential ()
251+ if (err != nil ) != tt .wantErr {
252+ t .Errorf ("Credential() error = %v, wantErr %v" , err , tt .wantErr )
253+ return
254+ }
255+ if got != tt .want {
256+ t .Errorf ("Credential() = %v, want %v" , got , tt .want )
257+ }
258+ })
259+ }
260+ }
0 commit comments