Skip to content

Commit 86a5432

Browse files
refactor(controller): use new Publisher method
Signed-off-by: Fabrizio Sestito <[email protected]>
1 parent c134aac commit 86a5432

File tree

6 files changed

+61
-33
lines changed

6 files changed

+61
-33
lines changed

internal/controller/image_controller.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122
"fmt"
2223

2324
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -27,6 +28,7 @@ import (
2728
"sigs.k8s.io/controller-runtime/pkg/log"
2829

2930
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
31+
"github.com/rancher/sbombastic/internal/handlers"
3032
"github.com/rancher/sbombastic/internal/messaging"
3133
)
3234

@@ -57,20 +59,23 @@ func (r *ImageReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl
5759

5860
var sbom storagev1alpha1.SBOM
5961
if err := r.Get(ctx, req.NamespacedName, &sbom); err != nil {
60-
if apierrors.IsNotFound(err) {
61-
log.Info("Creating SBOM of Image", "name", image.Name, "namespace", image.Namespace)
62-
63-
msg := messaging.GenerateSBOM{
64-
ImageName: image.Name,
65-
ImageNamespace: image.Namespace,
66-
}
67-
68-
if err = r.Publisher.Publish(ctx, &msg); err != nil {
69-
return ctrl.Result{}, fmt.Errorf("unable to publish CreateSBOM message: %w", err)
70-
}
71-
} else {
62+
if !apierrors.IsNotFound(err) {
7263
return ctrl.Result{}, fmt.Errorf("unable to fetch SBOM: %w", err)
7364
}
65+
66+
log.Info("Creating SBOM of Image", "name", image.Name, "namespace", image.Namespace)
67+
68+
message, err := json.Marshal(&handlers.GenerateSBOMMessage{
69+
ImageName: image.Name,
70+
ImageNamespace: image.Namespace,
71+
})
72+
if err != nil {
73+
return ctrl.Result{}, fmt.Errorf("unable to marshal GenerateSBOM message: %w", err)
74+
}
75+
76+
if err = r.Publisher.Publish(ctx, handlers.GenerateSBOMSubject, message); err != nil {
77+
return ctrl.Result{}, fmt.Errorf("unable to publish GenerateSBOM message: %w", err)
78+
}
7479
}
7580

7681
return ctrl.Result{}, nil

internal/controller/image_controller_test.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122

2223
. "github.com/onsi/ginkgo/v2" //nolint:revive // Required for testing
2324
. "github.com/onsi/gomega" //nolint:revive // Required for testing
@@ -29,7 +30,7 @@ import (
2930
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3031

3132
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
32-
"github.com/rancher/sbombastic/internal/messaging"
33+
"github.com/rancher/sbombastic/internal/handlers"
3334
messagingMocks "github.com/rancher/sbombastic/internal/messaging/mocks"
3435
)
3536

@@ -57,14 +58,16 @@ var _ = Describe("Image Controller", func() {
5758
It("should successfully reconcile the resource", func(ctx context.Context) {
5859
By("Ensuring the right message is published to the worker queue")
5960
mockPublisher := messagingMocks.NewMockPublisher(GinkgoT())
60-
mockPublisher.On("Publish", mock.Anything, &messaging.GenerateSBOM{
61+
message, err := json.Marshal(&handlers.GenerateSBOMMessage{
6162
ImageName: image.Name,
6263
ImageNamespace: image.Namespace,
63-
}).Return(nil)
64+
})
65+
Expect(err).NotTo(HaveOccurred())
66+
mockPublisher.On("Publish", mock.Anything, handlers.GenerateSBOMSubject, message).Return(nil)
6467
reconciler.Publisher = mockPublisher
6568

6669
By("Reconciling the Registry")
67-
_, err := reconciler.Reconcile(ctx, reconcile.Request{
70+
_, err = reconciler.Reconcile(ctx, reconcile.Request{
6871
NamespacedName: types.NamespacedName{
6972
Name: image.Name,
7073
Namespace: image.Namespace,

internal/controller/registry_controller.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122
"fmt"
2223

2324
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -31,6 +32,7 @@ import (
3132

3233
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
3334
"github.com/rancher/sbombastic/api/v1alpha1"
35+
"github.com/rancher/sbombastic/internal/handlers"
3436
"github.com/rancher/sbombastic/internal/messaging"
3537
)
3638

@@ -62,7 +64,7 @@ func (r *RegistryReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
6264
return ctrl.Result{}, nil
6365
}
6466

65-
if registry.Annotations[v1alpha1.RegistryLastDiscoveredAtAnnotation] == "" {
67+
if registry.Annotations[v1alpha1.RegistryLastDiscoveredAtAnnotation] == "" { //nolint:nestif // (fabrizio) This logic will go away with the implementation of the ScanJob RFC.
6668
log.Info(
6769
"Registry needs to be discovered, sending the request.",
6870
"name",
@@ -71,11 +73,15 @@ func (r *RegistryReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
7173
registry.Namespace,
7274
)
7375

74-
msg := messaging.CreateCatalog{
76+
message, err := json.Marshal(&handlers.CreateCatalogMessage{
7577
RegistryName: registry.Name,
7678
RegistryNamespace: registry.Namespace,
79+
})
80+
if err != nil {
81+
return ctrl.Result{}, fmt.Errorf("unable to marshal CreateCatalog message: %w", err)
7782
}
78-
if err := r.Publisher.Publish(ctx, &msg); err != nil {
83+
84+
if err := r.Publisher.Publish(ctx, handlers.CreateCatalogSubject, message); err != nil {
7985
meta.SetStatusCondition(&registry.Status.Conditions, metav1.Condition{
8086
Type: v1alpha1.RegistryDiscoveringCondition,
8187
Status: metav1.ConditionUnknown,

internal/controller/registry_controller_test.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122
"errors"
2223
"time"
2324

@@ -33,7 +34,7 @@ import (
3334

3435
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
3536
"github.com/rancher/sbombastic/api/v1alpha1"
36-
"github.com/rancher/sbombastic/internal/messaging"
37+
"github.com/rancher/sbombastic/internal/handlers"
3738
messagingMocks "github.com/rancher/sbombastic/internal/messaging/mocks"
3839
)
3940

@@ -65,14 +66,16 @@ var _ = Describe("Registry Controller", func() {
6566
It("Should start the discovery process", func(ctx context.Context) {
6667
By("Ensuring the right message is published to the worker queue")
6768
mockPublisher := messagingMocks.NewMockPublisher(GinkgoT())
68-
mockPublisher.On("Publish", mock.Anything, &messaging.CreateCatalog{
69+
message, err := json.Marshal(&handlers.CreateCatalogMessage{
6970
RegistryName: registry.Name,
7071
RegistryNamespace: registry.Namespace,
71-
}).Return(nil)
72+
})
73+
Expect(err).NotTo(HaveOccurred())
74+
mockPublisher.On("Publish", mock.Anything, handlers.CreateCatalogSubject, message).Return(nil)
7275
reconciler.Publisher = mockPublisher
7376

7477
By("Reconciling the Registry")
75-
_, err := reconciler.Reconcile(ctx, reconcile.Request{
78+
_, err = reconciler.Reconcile(ctx, reconcile.Request{
7679
NamespacedName: types.NamespacedName{
7780
Name: registry.Name,
7881
Namespace: registry.Namespace,
@@ -107,14 +110,16 @@ var _ = Describe("Registry Controller", func() {
107110
func(ctx context.Context) {
108111
By("Returning an error when publishing the message")
109112
mockPublisher := messagingMocks.NewMockPublisher(GinkgoT())
110-
mockPublisher.On("Publish", mock.Anything, &messaging.CreateCatalog{
113+
message, err := json.Marshal(&handlers.CreateCatalogMessage{
111114
RegistryName: registry.Name,
112115
RegistryNamespace: registry.Namespace,
113-
}).Return(errors.New("failed to publish message"))
116+
})
117+
Expect(err).NotTo(HaveOccurred())
118+
mockPublisher.On("Publish", mock.Anything, handlers.CreateCatalogSubject, message).Return(errors.New("failed to publish message"))
114119
reconciler.Publisher = mockPublisher
115120

116121
By("Reconciling the Registry")
117-
_, err := reconciler.Reconcile(ctx, reconcile.Request{
122+
_, err = reconciler.Reconcile(ctx, reconcile.Request{
118123
NamespacedName: types.NamespacedName{
119124
Name: registry.Name,
120125
Namespace: registry.Namespace,

internal/controller/sbom_controller.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122
"fmt"
2223
"time"
2324

@@ -30,6 +31,7 @@ import (
3031

3132
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
3233
"github.com/rancher/sbombastic/api/v1alpha1"
34+
"github.com/rancher/sbombastic/internal/handlers"
3335
"github.com/rancher/sbombastic/internal/messaging"
3436
)
3537

@@ -58,16 +60,20 @@ func (r *SBOMReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
5860
return ctrl.Result{}, fmt.Errorf("unable to fetch SBOM: %w", err)
5961
}
6062

61-
scanSBOM := &messaging.ScanSBOM{
63+
scanSBOM := &handlers.ScanSBOMMessage{
6264
SBOMName: sbom.Name,
6365
SBOMNamespace: sbom.Namespace,
6466
}
65-
if err := r.Publisher.Publish(ctx, scanSBOM); err != nil {
67+
message, err := json.Marshal(scanSBOM)
68+
if err != nil {
69+
return ctrl.Result{}, fmt.Errorf("unable to marshal ScanSBOM message: %w", err)
70+
}
71+
if err = r.Publisher.Publish(ctx, handlers.ScanSBOMSubject, message); err != nil {
6672
return ctrl.Result{}, fmt.Errorf("unable to publish ScanSBOM message: %w", err)
6773
}
6874

6975
var sbomList storagev1alpha1.SBOMList
70-
err := r.List(ctx, &sbomList, client.InNamespace(req.Namespace), client.MatchingFieldsSelector{
76+
err = r.List(ctx, &sbomList, client.InNamespace(req.Namespace), client.MatchingFieldsSelector{
7177
Selector: fields.SelectorFromSet(map[string]string{
7278
"spec.imageMetadata.registry": sbom.GetImageMetadata().Registry,
7379
}),

internal/controller/sbom_controller_test.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package controller
1818

1919
import (
2020
"context"
21+
"encoding/json"
2122

2223
. "github.com/onsi/ginkgo/v2" //nolint:revive // Required for testing
2324
. "github.com/onsi/gomega" //nolint:revive // Required for testing
@@ -31,7 +32,7 @@ import (
3132

3233
storagev1alpha1 "github.com/rancher/sbombastic/api/storage/v1alpha1"
3334
"github.com/rancher/sbombastic/api/v1alpha1"
34-
"github.com/rancher/sbombastic/internal/messaging"
35+
"github.com/rancher/sbombastic/internal/handlers"
3536
messagingMocks "github.com/rancher/sbombastic/internal/messaging/mocks"
3637
)
3738

@@ -103,14 +104,16 @@ var _ = Describe("SBOM Controller", func() {
103104
It("should successfully reconcile the resource", func(ctx context.Context) {
104105
By("Ensuring the right message is published to the worker queue")
105106
mockPublisher := messagingMocks.NewMockPublisher(GinkgoT())
106-
mockPublisher.On("Publish", mock.Anything, &messaging.ScanSBOM{
107+
message, err := json.Marshal(&handlers.ScanSBOMMessage{
107108
SBOMName: sbom.Name,
108109
SBOMNamespace: sbom.Namespace,
109-
}).Return(nil)
110+
})
111+
Expect(err).NotTo(HaveOccurred())
112+
mockPublisher.On("Publish", mock.Anything, handlers.ScanSBOMSubject, message).Return(nil)
110113
reconciler.Publisher = mockPublisher
111114

112115
By("Reconciling the Registry")
113-
_, err := reconciler.Reconcile(ctx, reconcile.Request{
116+
_, err = reconciler.Reconcile(ctx, reconcile.Request{
114117
NamespacedName: types.NamespacedName{
115118
Name: sbom.Name,
116119
Namespace: sbom.Namespace,

0 commit comments

Comments
 (0)