1
1
//
2
- // Copyright 2023 The Chainloop Authors.
2
+ // Copyright 2023-2025 The Chainloop Authors.
3
3
//
4
4
// Licensed under the Apache License, Version 2.0 (the "License");
5
5
// you may not use this file except in compliance with the License.
@@ -33,11 +33,12 @@ import (
33
33
34
34
const (
35
35
// This is the digest of the empty envelope
36
- validDigest = "sha256:f845058d865c3d4d491c9019f6afe9c543ad2cd11b31620cc512e341fb03d3d8"
37
- validDigest2 = "sha256:2b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
38
- validDigest3 = "sha256:1b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
39
- validDigestPublic = "sha256:8b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
40
- invalidDigest = "sha256:deadbeef"
36
+ validDigest = "sha256:f845058d865c3d4d491c9019f6afe9c543ad2cd11b31620cc512e341fb03d3d8"
37
+ validDigest2 = "sha256:2b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
38
+ validDigest3 = "sha256:1b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
39
+ validDigestPublic = "sha256:8b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d"
40
+ validDigestWithoutRun = "sha256:63e8ec8e489d31265fb920241da3300ec36c10865d2e287e055d4e1287ce25e6"
41
+ invalidDigest = "sha256:deadbeef"
41
42
)
42
43
43
44
func (s * casMappingIntegrationSuite ) TestCASMappingForDownloadUser () {
@@ -121,6 +122,8 @@ func (s *casMappingIntegrationSuite) TestCASMappingForDownloadByOrg() {
121
122
require .NoError (s .T (), err )
122
123
_ , err = s .CASMapping .Create (ctx , validDigestPublic , s .casBackend3 .ID .String (), s .publicWorkflowRun .ID .String ())
123
124
require .NoError (s .T (), err )
125
+ _ , err = s .CASMapping .Create (ctx , validDigestWithoutRun , s .casBackend3 .ID .String (), "" )
126
+ require .NoError (s .T (), err )
124
127
125
128
// both validDigest and validDigest2 from two different orgs
126
129
s .Run ("validDigest is in org1" , func () {
@@ -137,6 +140,17 @@ func (s *casMappingIntegrationSuite) TestCASMappingForDownloadByOrg() {
137
140
s .Equal (s .casBackend3 .ID , mapping .CASBackend .ID )
138
141
})
139
142
143
+ s .Run ("validDigestWithoutRun is available only to org 3" , func () {
144
+ mapping , err := s .CASMapping .FindCASMappingForDownloadByOrg (ctx , validDigestWithoutRun , []string {s .casBackend3 .OrganizationID .String ()})
145
+ s .NoError (err )
146
+ s .NotNil (mapping )
147
+ s .Equal (s .casBackend3 .ID , mapping .CASBackend .ID )
148
+
149
+ mapping , err = s .CASMapping .FindCASMappingForDownloadByOrg (ctx , validDigestWithoutRun , []string {s .org1 .ID })
150
+ s .Error (err )
151
+ s .Nil (mapping )
152
+ })
153
+
140
154
s .Run ("can't find an invalid digest" , func () {
141
155
mapping , err := s .CASMapping .FindCASMappingForDownloadByOrg (ctx , invalidDigest , []string {s .org1 .ID })
142
156
s .Error (err )
@@ -234,70 +248,84 @@ func (s *casMappingIntegrationSuite) TestCreate() {
234
248
name string
235
249
digest string
236
250
casBackendID uuid.UUID
237
- workflowRunID uuid.UUID
251
+ workflowRunID * uuid.UUID
238
252
wantErr bool
239
253
wantPublic bool
240
254
}{
241
255
{
242
256
name : "valid" ,
243
257
digest : validDigest ,
244
258
casBackendID : s .casBackend1 .ID ,
245
- workflowRunID : s .workflowRun .ID ,
259
+ workflowRunID : biz . ToPtr ( s .workflowRun .ID ) ,
246
260
},
247
261
{
248
262
name : "created again with same digest" ,
249
263
digest : validDigest ,
250
264
casBackendID : s .casBackend1 .ID ,
251
- workflowRunID : s .workflowRun .ID ,
265
+ workflowRunID : biz . ToPtr ( s .workflowRun .ID ) ,
252
266
},
253
267
{
254
268
name : "invalid digest format" ,
255
269
digest : invalidDigest ,
256
270
casBackendID : s .casBackend1 .ID ,
257
- workflowRunID : s .workflowRun .ID ,
271
+ workflowRunID : biz . ToPtr ( s .workflowRun .ID ) ,
258
272
wantErr : true ,
259
273
},
260
274
{
261
275
name : "invalid digest missing prefix" ,
262
276
digest : "3b0f04c276be095e62f3ac03b9991913c37df1fcd44548e75069adce313aba4d" ,
263
277
casBackendID : s .casBackend1 .ID ,
264
- workflowRunID : s .workflowRun .ID ,
278
+ workflowRunID : biz . ToPtr ( s .workflowRun .ID ) ,
265
279
wantErr : true ,
266
280
},
267
281
{
268
282
name : "non-existing CASBackend" ,
269
283
digest : validDigest ,
270
284
casBackendID : uuid .New (),
271
- workflowRunID : s .workflowRun .ID ,
285
+ workflowRunID : biz . ToPtr ( s .workflowRun .ID ) ,
272
286
wantErr : true ,
273
287
},
274
288
{
275
289
name : "non-existing WorkflowRunID" ,
276
290
digest : validDigest ,
277
291
casBackendID : s .casBackend1 .ID ,
278
- workflowRunID : uuid .New (),
292
+ workflowRunID : biz . ToPtr ( uuid .New () ),
279
293
wantErr : true ,
280
294
},
281
295
{
282
296
name : "public workflowrun" ,
283
297
digest : validDigest ,
284
298
casBackendID : s .casBackend1 .ID ,
285
- workflowRunID : s .publicWorkflowRun .ID ,
299
+ workflowRunID : biz . ToPtr ( s .publicWorkflowRun .ID ) ,
286
300
wantPublic : true ,
287
301
},
302
+ {
303
+ name : "not associated to any workflowrun" ,
304
+ digest : validDigest ,
305
+ casBackendID : s .casBackend1 .ID ,
306
+ wantPublic : false ,
307
+ },
288
308
}
289
309
290
310
for _ , tc := range testCases {
291
311
want := & biz.CASMapping {
292
- Digest : validDigest ,
293
- CASBackend : & biz.CASBackend {ID : s .casBackend1 .ID },
294
- WorkflowRunID : tc .workflowRunID ,
295
- OrgID : s .casBackend1 .OrganizationID ,
296
- Public : tc .wantPublic ,
312
+ Digest : validDigest ,
313
+ CASBackend : & biz.CASBackend {ID : s .casBackend1 .ID },
314
+ OrgID : s .casBackend1 .OrganizationID ,
315
+ Public : tc .wantPublic ,
316
+ }
317
+
318
+ if tc .workflowRunID != nil {
319
+ want .WorkflowRunID = * tc .workflowRunID
297
320
}
298
321
299
322
s .Run (tc .name , func () {
300
- got , err := s .CASMapping .Create (context .TODO (), tc .digest , tc .casBackendID .String (), tc .workflowRunID .String ())
323
+ var workflowRunID string
324
+ if tc .workflowRunID != nil {
325
+ workflowRunID = tc .workflowRunID .String ()
326
+ }
327
+
328
+ got , err := s .CASMapping .Create (context .TODO (), tc .digest , tc .casBackendID .String (), workflowRunID )
301
329
if tc .wantErr {
302
330
s .Error (err )
303
331
} else {
0 commit comments