11package generator
22
33import (
4+ "context"
5+ "fmt"
6+ "strings"
47 "testing"
58
9+ "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
610 "github.com/dnitsch/configmanager/internal/testutils"
711)
812
@@ -36,6 +40,14 @@ func Test_azSplitToken(t *testing.T) {
3640 token : "some/json/test" ,
3741 },
3842 },
43+ {
44+ name : "with_initial_slash_multislash_secretname" ,
45+ token : "test-vault//some/json/test" ,
46+ expect : azVaultHelper {
47+ vaultUri : "https://test-vault.vault.azure.net" ,
48+ token : "/some/json/test" ,
49+ },
50+ },
3951 }
4052 for _ , tt := range tests {
4153 t .Run (tt .name , func (t * testing.T ) {
@@ -49,3 +61,106 @@ func Test_azSplitToken(t *testing.T) {
4961 })
5062 }
5163}
64+
65+ var (
66+ tazkvsuccessObj map [string ]string = map [string ]string {fmt .Sprintf ("%s#/token/1" , AzKeyVaultSecretsPrefix ): tsuccessParam }
67+ )
68+
69+ type mockAzKvSecretApi func (ctx context.Context , name string , version string , options * azsecrets.GetSecretOptions ) (azsecrets.GetSecretResponse , error )
70+
71+ func (m mockAzKvSecretApi ) GetSecret (ctx context.Context , name string , version string , options * azsecrets.GetSecretOptions ) (azsecrets.GetSecretResponse , error ) {
72+ return m (ctx , name , version , options )
73+ }
74+
75+ func Test_GetAzKeyVaultSecretVarHappy (t * testing.T ) {
76+ tests := []struct {
77+ name string
78+ token string
79+ value string
80+ mockClient func (t * testing.T ) kvApi
81+ genVars * GenVars
82+ }{
83+ {
84+ name : "successVal" ,
85+ token : "AZKVSECRET#/test-vault//token/1" ,
86+ value : tsuccessParam ,
87+ mockClient : func (t * testing.T ) kvApi {
88+ return mockAzKvSecretApi (func (ctx context.Context , name string , version string , options * azsecrets.GetSecretOptions ) (azsecrets.GetSecretResponse , error ) {
89+ t .Helper ()
90+ if name == "" {
91+ t .Errorf ("expect name to not be nil" )
92+ }
93+ if name != "/token/1" {
94+ t .Errorf (testutils .TestPhrase , "/token/1" , name )
95+ }
96+
97+ if strings .Contains (name , "#" ) {
98+ t .Errorf ("incorrectly stripped token separator" )
99+ }
100+
101+ if strings .Contains (name , AzKeyVaultSecretsPrefix ) {
102+ t .Errorf ("incorrectly stripped prefix" )
103+ }
104+
105+ if version != "" {
106+ t .Fatal ("expect version to be \" \" an empty string " )
107+ }
108+
109+ resp := azsecrets.GetSecretResponse {}
110+ resp .Value = & tsuccessParam
111+ return resp , nil
112+ })
113+ },
114+ genVars : & GenVars {},
115+ },
116+ {
117+ name : "successVal with keyseparator" ,
118+ token : "AZKVSECRET#/test-vault/token/1|somekey" ,
119+ value : tsuccessParam ,
120+ mockClient : func (t * testing.T ) kvApi {
121+ return mockAzKvSecretApi (func (ctx context.Context , name string , version string , options * azsecrets.GetSecretOptions ) (azsecrets.GetSecretResponse , error ) {
122+ t .Helper ()
123+ if name == "" {
124+ t .Error ("expect name to not be nil" )
125+ }
126+ if name != "token/1" {
127+ t .Errorf (testutils .TestPhrase , "token/1" , name )
128+ }
129+ if strings .Contains (name , "#" ) {
130+ t .Errorf ("incorrectly stripped token separator" )
131+ }
132+
133+ if strings .Contains (name , AzKeyVaultSecretsPrefix ) {
134+ t .Errorf ("incorrectly stripped prefix" )
135+ }
136+
137+ if version != "" {
138+ t .Fatal ("expect version to be \" \" an empty string " )
139+ }
140+ resp := azsecrets.GetSecretResponse {}
141+ resp .Value = & tsuccessParam
142+ return resp , nil
143+ })
144+ },
145+ genVars : & GenVars {},
146+ },
147+ }
148+ for _ , tt := range tests {
149+ t .Run (tt .name , func (t * testing.T ) {
150+ tt .genVars .config = GenVarsConfig {tokenSeparator : tokenSeparator }
151+ kvStr , err := NewKvScrtStoreWithToken (context .TODO (), tt .token , "#" , "|" )
152+ if err != nil {
153+ t .Errorf ("failed to init azkvstore" )
154+ }
155+ kvStr .svc = tt .mockClient (t )
156+ tt .genVars .setImplementation (kvStr )
157+ want , err := tt .genVars .getTokenValue ()
158+ if err != nil {
159+ t .Errorf ("%v" , err )
160+ }
161+ if want != tt .value {
162+ t .Errorf (testutils .TestPhrase , want , tt .value )
163+ }
164+ })
165+ }
166+ }
0 commit comments