@@ -25,6 +25,7 @@ import (
2525 "errors"
2626 "fmt"
2727 "math/big"
28+ "net/url"
2829 "testing"
2930
3031 "github.com/Azure/azure-sdk-for-go/sdk/azcore"
@@ -68,6 +69,14 @@ func TestValidateSecret(t *testing.T) {
6869 },
6970 },
7071 },
72+ {
73+ name : "valid SAS Key Secret" ,
74+ secret : & corev1.Secret {
75+ Data : map [string ][]byte {
76+ sasKeyField : []byte ("?spr=<some-sas-url" ),
77+ },
78+ },
79+ },
7180 {
7281 name : "valid SharedKey Secret" ,
7382 secret : & corev1.Secret {
@@ -292,6 +301,85 @@ func Test_sharedCredentialFromSecret(t *testing.T) {
292301 }
293302}
294303
304+ func Test_sasTokenFromSecret (t * testing.T ) {
305+ tests := []struct {
306+ name string
307+ endpoint string
308+ secret * corev1.Secret
309+ want string
310+ wantErr bool
311+ }{
312+ {
313+ name : "Valid SAS Token" ,
314+ endpoint : "https://accountName.blob.windows.net" ,
315+ secret : & corev1.Secret {
316+ Data : map [string ][]byte {
317+ sasKeyField : []byte ("?sv=2020-08-0&ss=bfqt&srt=co&sp=rwdlacupitfx&se=2022-05-26T21:55:35Z&st=2022-05-26T13:55:35Z&spr=https&sig=JlHT" ),
318+ },
319+ },
320+ want : "https://accountName.blob.windows.net?sv=2020-08-0&ss=bfqt&srt=co&sp=rwdlacupitfx&se=2022-05-26T21:55:35Z&st=2022-05-26T13:55:35Z&spr=https&sig=JlHT" ,
321+ },
322+ {
323+ name : "Valid SAS Token without leading question mark" ,
324+ endpoint : "https://accountName.blob.windows.net" ,
325+ secret : & corev1.Secret {
326+ Data : map [string ][]byte {
327+ sasKeyField : []byte ("sv=2020-08-04&ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ),
328+ },
329+ },
330+ want : "https://accountName.blob.windows.net?sv=2020-08-04&ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ,
331+ },
332+ {
333+ name : "endpoint with query values" ,
334+ endpoint : "https://accountName.blob.windows.net?sv=2020-08-04" ,
335+ secret : & corev1.Secret {
336+ Data : map [string ][]byte {
337+ sasKeyField : []byte ("ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ),
338+ },
339+ },
340+ want : "https://accountName.blob.windows.net?sv=2020-08-04&ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ,
341+ },
342+ {
343+ name : "conflicting query values in token" ,
344+ endpoint : "https://accountName.blob.windows.net?sv=2020-08-04&ss=abcde" ,
345+ secret : & corev1.Secret {
346+ Data : map [string ][]byte {
347+ sasKeyField : []byte ("sv=2019-07-06&ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ),
348+ },
349+ },
350+ want : "https://accountName.blob.windows.net?sv=2019-07-06&ss=bfqt&srt=co&sp=rwdl&se=2022-05-26T21:55:35Z&st=2022-05-26&spr=https&sig=JlHT" ,
351+ },
352+ {
353+ name : "invalid sas token" ,
354+ secret : & corev1.Secret {
355+ Data : map [string ][]byte {
356+ sasKeyField : []byte ("%##sssvecrpt" ),
357+ },
358+ },
359+ wantErr : true ,
360+ },
361+ }
362+ for _ , tt := range tests {
363+ t .Run (tt .name , func (t * testing.T ) {
364+ g := NewWithT (t )
365+
366+ _ , err := url .ParseQuery ("" )
367+ got , err := sasTokenFromSecret (tt .endpoint , tt .secret )
368+ g .Expect (err != nil ).To (Equal (tt .wantErr ))
369+ if tt .want != "" {
370+ ttVaules , err := url .Parse (tt .want )
371+ g .Expect (err ).To (BeNil ())
372+
373+ gotValues , err := url .Parse (got )
374+ g .Expect (err ).To (BeNil ())
375+ g .Expect (gotValues .Query ()).To (Equal (ttVaules .Query ()))
376+ return
377+ }
378+ g .Expect (got ).To (Equal ("" ))
379+ })
380+ }
381+ }
382+
295383func Test_chainCredentialWithSecret (t * testing.T ) {
296384 g := NewWithT (t )
297385
0 commit comments