99 swarmtypes "github.com/docker/docker/api/types/swarm"
1010 "github.com/docker/docker/client"
1111 "github.com/docker/docker/integration/internal/swarm"
12+ "github.com/docker/docker/internal/testutil"
1213 "github.com/gotestyourself/gotestyourself/skip"
1314 "github.com/stretchr/testify/assert"
1415 "github.com/stretchr/testify/require"
@@ -35,7 +36,7 @@ func TestSecretInspect(t *testing.T) {
3536
3637 secret , _ , err = client .SecretInspectWithRaw (context .Background (), testName )
3738 require .NoError (t , err )
38- assert .Equal (t , secret . ID , secretID )
39+ assert .Equal (t , secretID , secretID )
3940}
4041
4142func TestSecretList (t * testing.T ) {
@@ -124,3 +125,110 @@ func createSecret(ctx context.Context, t *testing.T, client client.APIClient, na
124125 assert .NotEqual (t , secret .ID , "" )
125126 return secret .ID
126127}
128+
129+ func TestSecretsCreate (t * testing.T ) {
130+ skip .If (t , testEnv .DaemonInfo .OSType != "linux" )
131+
132+ defer setupTest (t )()
133+ d := swarm .NewSwarm (t , testEnv )
134+ defer d .Stop (t )
135+ client , err := client .NewClientWithOpts (client .WithHost ((d .Sock ())))
136+ require .NoError (t , err )
137+
138+ ctx := context .Background ()
139+
140+ testName := "test_secret"
141+ createSecret (ctx , t , client , testName , []byte ("TESTINGDATA" ), nil )
142+ require .NoError (t , err )
143+
144+ // create an already existin secret, daemon should return a status code of 409
145+ _ , err = client .SecretCreate (ctx , swarmtypes.SecretSpec {
146+ Annotations : swarmtypes.Annotations {
147+ Name : testName ,
148+ },
149+ Data : []byte ("TESTINGDATA" ),
150+ })
151+ testutil .ErrorContains (t , err , "already exists" )
152+ }
153+
154+ func TestSecretsDelete (t * testing.T ) {
155+ skip .If (t , testEnv .DaemonInfo .OSType != "linux" )
156+
157+ defer setupTest (t )()
158+ d := swarm .NewSwarm (t , testEnv )
159+ defer d .Stop (t )
160+ client , err := client .NewClientWithOpts (client .WithHost ((d .Sock ())))
161+ require .NoError (t , err )
162+
163+ ctx := context .Background ()
164+
165+ testName := "test_secret"
166+ secretID := createSecret (ctx , t , client , testName , []byte ("TESTINGDATA" ), nil )
167+ require .NoError (t , err )
168+
169+ insp , _ , err := client .SecretInspectWithRaw (ctx , secretID )
170+ require .NoError (t , err )
171+ assert .Equal (t , insp .ID , secretID )
172+
173+ err = client .SecretRemove (ctx , secretID )
174+ require .NoError (t , err )
175+
176+ _ , _ , err = client .SecretInspectWithRaw (ctx , secretID )
177+ testutil .ErrorContains (t , err , "No such secret" )
178+
179+ err = client .SecretRemove (ctx , "non-existin" )
180+ testutil .ErrorContains (t , err , "No such secret: non-existin" )
181+ }
182+
183+ func TestSecretsUpdate (t * testing.T ) {
184+ skip .If (t , testEnv .DaemonInfo .OSType != "linux" )
185+
186+ defer setupTest (t )()
187+ d := swarm .NewSwarm (t , testEnv )
188+ defer d .Stop (t )
189+ client , err := client .NewClientWithOpts (client .WithHost ((d .Sock ())))
190+ require .NoError (t , err )
191+
192+ ctx := context .Background ()
193+
194+ testName := "test_secret"
195+ secretID := createSecret (ctx , t , client , testName , []byte ("TESTINGDATA" ), nil )
196+ require .NoError (t , err )
197+
198+ insp , _ , err := client .SecretInspectWithRaw (ctx , secretID )
199+ require .NoError (t , err )
200+ assert .Equal (t , insp .ID , secretID )
201+
202+ // test UpdateSecret with full ID
203+ insp .Spec .Labels = map [string ]string {"test" : "test1" }
204+ err = client .SecretUpdate (ctx , secretID , insp .Version , insp .Spec )
205+ require .NoError (t , err )
206+
207+ insp , _ , err = client .SecretInspectWithRaw (ctx , secretID )
208+ require .NoError (t , err )
209+ assert .Equal (t , insp .Spec .Labels ["test" ], "test1" )
210+
211+ // test UpdateSecret with full name
212+ insp .Spec .Labels = map [string ]string {"test" : "test2" }
213+ err = client .SecretUpdate (ctx , testName , insp .Version , insp .Spec )
214+ require .NoError (t , err )
215+
216+ insp , _ , err = client .SecretInspectWithRaw (ctx , secretID )
217+ require .NoError (t , err )
218+ assert .Equal (t , insp .Spec .Labels ["test" ], "test2" )
219+
220+ // test UpdateSecret with prefix ID
221+ insp .Spec .Labels = map [string ]string {"test" : "test3" }
222+ err = client .SecretUpdate (ctx , secretID [:1 ], insp .Version , insp .Spec )
223+ require .NoError (t , err )
224+
225+ insp , _ , err = client .SecretInspectWithRaw (ctx , secretID )
226+ require .NoError (t , err )
227+ assert .Equal (t , insp .Spec .Labels ["test" ], "test3" )
228+
229+ // test UpdateSecret in updating Data which is not supported in daemon
230+ // this test will produce an error in func UpdateSecret
231+ insp .Spec .Data = []byte ("TESTINGDATA2" )
232+ err = client .SecretUpdate (ctx , secretID , insp .Version , insp .Spec )
233+ testutil .ErrorContains (t , err , "only updates to Labels are allowed" )
234+ }
0 commit comments