Skip to content

Commit 8c673e3

Browse files
committed
add missing event and fix mockery
Signed-off-by: Javier Rodriguez <javier@chainloop.dev>
1 parent d08d08a commit 8c673e3

8 files changed

Lines changed: 1061 additions & 62 deletions

File tree

app/controlplane/pkg/auditor/events/casbackend.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,17 @@ var (
2828
_ auditor.LogEntry = (*CASBackendCreated)(nil)
2929
_ auditor.LogEntry = (*CASBackendUpdated)(nil)
3030
_ auditor.LogEntry = (*CASBackendDeleted)(nil)
31+
_ auditor.LogEntry = (*CASBackendPermanentDeleted)(nil)
3132
_ auditor.LogEntry = (*CASBackendStatusChanged)(nil)
3233
)
3334

3435
const (
35-
CASBackendType auditor.TargetType = "CASBackend"
36-
CASBackendCreatedActionType string = "CASBackendCreated"
37-
CASBackendUpdatedActionType string = "CASBackendUpdated"
38-
CASBackendDeletedActionType string = "CASBackendDeleted"
39-
CASBackendStatusChangedAction string = "CASBackendStatusChanged"
36+
CASBackendType auditor.TargetType = "CASBackend"
37+
CASBackendCreatedActionType string = "CASBackendCreated"
38+
CASBackendUpdatedActionType string = "CASBackendUpdated"
39+
CASBackendDeletedActionType string = "CASBackendSoftDeleted"
40+
CASBackendPermanentDeletedType string = "CASBackendPermanentDeleted"
41+
CASBackendStatusChangedAction string = "CASBackendStatusChanged"
4042
)
4143

4244
// CASBackendBase contains the common fields for all CAS backend events
@@ -154,6 +156,27 @@ func (c *CASBackendDeleted) Description() string {
154156
return fmt.Sprintf("%s has deleted CAS backend %s", auditor.GetActorIdentifier(), c.CASBackendName)
155157
}
156158

159+
// CASBackendPermanentDeleted represents the permanent deletion of a CAS backend
160+
type CASBackendPermanentDeleted struct {
161+
*CASBackendBase
162+
}
163+
164+
func (c *CASBackendPermanentDeleted) ActionType() string {
165+
return CASBackendPermanentDeletedType
166+
}
167+
168+
func (c *CASBackendPermanentDeleted) ActionInfo() (json.RawMessage, error) {
169+
if _, err := c.CASBackendBase.ActionInfo(); err != nil {
170+
return nil, err
171+
}
172+
173+
return json.Marshal(&c)
174+
}
175+
176+
func (c *CASBackendPermanentDeleted) Description() string {
177+
return fmt.Sprintf("%s has permanently deleted CAS backend %s", auditor.GetActorIdentifier(), c.CASBackendName)
178+
}
179+
157180
// CASBackendStatusChanged represents a change in the validation status of a CAS backend
158181
type CASBackendStatusChanged struct {
159182
*CASBackendBase

app/controlplane/pkg/auditor/events/casbackend_test.go

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func TestCASBackendEvents(t *testing.T) {
102102
actorID: userUUID,
103103
},
104104
{
105-
name: "CAS Backend deleted by user",
105+
name: "CAS Backend soft deleted by user",
106106
event: &events.CASBackendDeleted{
107107
CASBackendBase: &events.CASBackendBase{
108108
CASBackendID: &backendUUID,
@@ -112,12 +112,27 @@ func TestCASBackendEvents(t *testing.T) {
112112
Default: true,
113113
},
114114
},
115-
expected: "testdata/casbackends/casbackend_deleted.json",
115+
expected: "testdata/casbackends/casbackend_soft_deleted.json",
116116
actor: auditor.ActorTypeUser,
117117
actorID: userUUID,
118118
},
119119
{
120-
name: "CAS Backend status changed",
120+
name: "CAS Backend permanently deleted by user",
121+
event: &events.CASBackendPermanentDeleted{
122+
CASBackendBase: &events.CASBackendBase{
123+
CASBackendID: &backendUUID,
124+
CASBackendName: backendName,
125+
Provider: backendProvider,
126+
Location: backendLocation,
127+
Default: true,
128+
},
129+
},
130+
expected: "testdata/casbackends/casbackend_permanent_deleted.json",
131+
actor: auditor.ActorTypeUser,
132+
actorID: userUUID,
133+
},
134+
{
135+
name: "CAS Backend status changed with recovery",
121136
event: &events.CASBackendStatusChanged{
122137
CASBackendBase: &events.CASBackendBase{
123138
CASBackendID: &backendUUID,
@@ -271,7 +286,7 @@ func TestCASBackendEventsFailed(t *testing.T) {
271286
expectedErr: "cas backend id and name are required",
272287
},
273288
{
274-
name: "CAS Backend deleted with missing ID",
289+
name: "CAS Backend soft deleted with missing ID",
275290
event: &events.CASBackendDeleted{
276291
CASBackendBase: &events.CASBackendBase{
277292
CASBackendName: "test-backend",
@@ -282,7 +297,7 @@ func TestCASBackendEventsFailed(t *testing.T) {
282297
expectedErr: "cas backend id and name are required",
283298
},
284299
{
285-
name: "CAS Backend deleted with missing name",
300+
name: "CAS Backend soft deleted with missing name",
286301
event: &events.CASBackendDeleted{
287302
CASBackendBase: &events.CASBackendBase{
288303
CASBackendID: &backendUUID,
@@ -292,6 +307,28 @@ func TestCASBackendEventsFailed(t *testing.T) {
292307
},
293308
expectedErr: "cas backend id and name are required",
294309
},
310+
{
311+
name: "CAS Backend permanently deleted with missing ID",
312+
event: &events.CASBackendPermanentDeleted{
313+
CASBackendBase: &events.CASBackendBase{
314+
CASBackendName: "test-backend",
315+
Provider: "OCI",
316+
Location: "test-location",
317+
},
318+
},
319+
expectedErr: "cas backend id and name are required",
320+
},
321+
{
322+
name: "CAS Backend permanently deleted with missing name",
323+
event: &events.CASBackendPermanentDeleted{
324+
CASBackendBase: &events.CASBackendBase{
325+
CASBackendID: &backendUUID,
326+
Provider: "OCI",
327+
Location: "test-location",
328+
},
329+
},
330+
expectedErr: "cas backend id and name are required",
331+
},
295332
{
296333
name: "CAS Backend status changed with missing ID",
297334
event: &events.CASBackendStatusChanged{
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"ActionType": "CASBackendPermanentDeleted",
3+
"TargetType": "CASBackend",
4+
"TargetID": "3089bb36-e27b-428b-8009-d015c8737c56",
5+
"ActorType": "USER",
6+
"ActorID": "1089bb36-e27b-428b-8009-d015c8737c54",
7+
"ActorEmail": "john@cyberdyne.io",
8+
"ActorName": "John Connor",
9+
"OrgID": "1089bb36-e27b-428b-8009-d015c8737c54",
10+
"Description": "John Connor has permanently deleted CAS backend test-backend",
11+
"Info": {
12+
"cas_backend_id": "3089bb36-e27b-428b-8009-d015c8737c56",
13+
"cas_backend_name": "test-backend",
14+
"provider": "OCI",
15+
"location": "test-location",
16+
"default": true
17+
},
18+
"Digest": "sha256:819ef0a1100e731bfb003d20e5b897294e469cb612e095f0b9bb4a1f7f59eb0f"
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"ActionType": "CASBackendSoftDeleted",
3+
"TargetType": "CASBackend",
4+
"TargetID": "3089bb36-e27b-428b-8009-d015c8737c56",
5+
"ActorType": "USER",
6+
"ActorID": "1089bb36-e27b-428b-8009-d015c8737c54",
7+
"ActorEmail": "john@cyberdyne.io",
8+
"ActorName": "John Connor",
9+
"OrgID": "1089bb36-e27b-428b-8009-d015c8737c54",
10+
"Description": "John Connor has deleted CAS backend test-backend",
11+
"Info": {
12+
"cas_backend_id": "3089bb36-e27b-428b-8009-d015c8737c56",
13+
"cas_backend_name": "test-backend",
14+
"provider": "OCI",
15+
"location": "test-location",
16+
"default": true
17+
},
18+
"Digest": "sha256:1ea71357557c287db2f67687985c681c9cf4b383c726ea209df97a065afb81cd"
19+
}

app/controlplane/pkg/biz/.mockery.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ packages:
1515
github.com/chainloop-dev/chainloop/app/controlplane/pkg/biz:
1616
interfaces:
1717
APITokenRepo:
18+
CASBackendRepo:

app/controlplane/pkg/biz/casbackend.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ func (uc *CASBackendUseCase) SoftDelete(ctx context.Context, orgID, id string) e
456456
}
457457
}
458458

459-
// Record CAS backend deletion in audit log
459+
// Record CAS backend soft deletion in audit log
460460
if uc.auditorUC != nil {
461461
uc.auditorUC.Dispatch(ctx, &events.CASBackendDeleted{
462462
CASBackendBase: &events.CASBackendBase{
@@ -497,8 +497,25 @@ func (uc *CASBackendUseCase) Delete(ctx context.Context, id string) error {
497497
}
498498
}
499499

500+
if delErr := uc.repo.Delete(ctx, backendUUID); delErr != nil {
501+
return delErr
502+
}
500503
uc.logger.Infow("msg", "CAS Backend deleted", "ID", id)
501-
return uc.repo.Delete(ctx, backendUUID)
504+
505+
// Record CAS backend permanent deletion in audit log
506+
if uc.auditorUC != nil {
507+
uc.auditorUC.Dispatch(ctx, &events.CASBackendPermanentDeleted{
508+
CASBackendBase: &events.CASBackendBase{
509+
CASBackendID: &backend.ID,
510+
CASBackendName: backend.Name,
511+
Provider: string(backend.Provider),
512+
Location: backend.Location,
513+
Default: backend.Default,
514+
},
515+
}, &backend.OrganizationID)
516+
}
517+
518+
return nil
502519
}
503520

504521
// Implements https://pkg.go.dev/entgo.io/ent/schema/field#EnumValues

app/controlplane/pkg/biz/casbackend_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"testing"
2222

2323
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/biz"
24-
bizMocks "github.com/chainloop-dev/chainloop/app/controlplane/pkg/biz/mocks"
2524
backends "github.com/chainloop-dev/chainloop/pkg/blobmanager"
2625
blobM "github.com/chainloop-dev/chainloop/pkg/blobmanager/mocks"
2726
"github.com/chainloop-dev/chainloop/pkg/credentials"
@@ -37,7 +36,7 @@ type casBackendTestSuite struct {
3736
validUUID uuid.UUID
3837
invalidUUID string
3938
useCase *biz.CASBackendUseCase
40-
repo *bizMocks.CASBackendRepo
39+
repo *biz.MockCASBackendRepo
4140
credsRW *credentialsM.ReaderWriter
4241
backendProvider *blobM.Provider
4342
}
@@ -247,7 +246,7 @@ func (s *casBackendTestSuite) TestNewCASBackendUseCase() {
247246
useCase, err := biz.NewCASBackendUseCase(s.repo, s.credsRW,
248247
backends.Providers{
249248
"OCI": s.backendProvider,
250-
}, tc.config, nil)
249+
}, tc.config, nil, nil)
251250

252251
if tc.expectError {
253252
assert.Error(err)
@@ -278,14 +277,14 @@ func (s *casBackendTestSuite) resetMock() {
278277
func (s *casBackendTestSuite) SetupTest() {
279278
s.validUUID = uuid.New()
280279
s.invalidUUID = "deadbeef"
281-
s.repo = bizMocks.NewCASBackendRepo(s.T())
280+
s.repo = biz.NewMockCASBackendRepo(s.T())
282281
s.credsRW = credentialsM.NewReaderWriter(s.T())
283282
s.backendProvider = blobM.NewProvider(s.T())
284283
var err error
285284
s.useCase, err = biz.NewCASBackendUseCase(s.repo, s.credsRW,
286285
backends.Providers{
287286
"OCI": s.backendProvider,
288-
}, nil, nil,
287+
}, nil, nil, nil,
289288
)
290289
s.Require().NoError(err)
291290
}

0 commit comments

Comments
 (0)