@@ -8,12 +8,36 @@ import (
88 "time"
99
1010 "github.com/google/go-cmp/cmp"
11+ "github.com/twmb/franz-go/pkg/kadm"
12+ "github.com/twmb/franz-go/pkg/kerr"
1113 "k8s.io/apimachinery/pkg/util/json"
1214
1315 "github.com/crossplane-contrib/provider-kafka/apis/v1alpha1"
1416 "github.com/crossplane-contrib/provider-kafka/internal/clients/kafka"
1517)
1618
19+ // fakeACLAdmin is an in-process implementation of adminClient for unit tests.
20+ type fakeACLAdmin struct {
21+ createResults kadm.CreateACLsResults
22+ createErr error
23+ describeResults kadm.DescribeACLsResults
24+ describeErr error
25+ deleteResults kadm.DeleteACLsResults
26+ deleteErr error
27+ }
28+
29+ func (f * fakeACLAdmin ) CreateACLs (_ context.Context , _ * kadm.ACLBuilder ) (kadm.CreateACLsResults , error ) {
30+ return f .createResults , f .createErr
31+ }
32+
33+ func (f * fakeACLAdmin ) DescribeACLs (_ context.Context , _ * kadm.ACLBuilder ) (kadm.DescribeACLsResults , error ) {
34+ return f .describeResults , f .describeErr
35+ }
36+
37+ func (f * fakeACLAdmin ) DeleteACLs (_ context.Context , _ * kadm.ACLBuilder ) (kadm.DeleteACLsResults , error ) {
38+ return f .deleteResults , f .deleteErr
39+ }
40+
1741var dataTesting = []byte (os .Getenv ("KAFKA_CONFIG" ))
1842
1943var baseACL = AccessControlList {
@@ -477,6 +501,81 @@ func TestList(t *testing.T) {
477501 }
478502}
479503
504+ // --- Unit tests for broker-level error propagation (no real Kafka needed) ---
505+
506+ func TestCreateBrokerError (t * testing.T ) {
507+ cl := & fakeACLAdmin {
508+ createResults : kadm.CreateACLsResults {
509+ {Principal : "User:alice" , Err : kerr .ClusterAuthorizationFailed },
510+ },
511+ }
512+ err := Create (context .Background (), cl , & baseACL )
513+ if err == nil {
514+ t .Fatal ("Create() expected error for broker-level Err, got nil" )
515+ }
516+ }
517+
518+ func TestCreateEmptyResponse (t * testing.T ) {
519+ cl := & fakeACLAdmin {createResults : kadm.CreateACLsResults {}}
520+ err := Create (context .Background (), cl , & baseACL )
521+ if err == nil {
522+ t .Fatal ("Create() expected error for empty response, got nil" )
523+ }
524+ }
525+
526+ func TestListBrokerError (t * testing.T ) {
527+ cl := & fakeACLAdmin {
528+ describeResults : kadm.DescribeACLsResults {
529+ {Err : kerr .ClusterAuthorizationFailed },
530+ },
531+ }
532+ got , err := List (context .Background (), cl , & baseACL )
533+ if err == nil {
534+ t .Fatal ("List() expected error for broker-level Err, got nil" )
535+ }
536+ if got != nil {
537+ t .Errorf ("List() expected nil result on error, got %v" , got )
538+ }
539+ }
540+
541+ func TestListNotFound (t * testing.T ) {
542+ cl := & fakeACLAdmin {
543+ describeResults : kadm.DescribeACLsResults {
544+ {Described : kadm.DescribedACLs {}},
545+ },
546+ }
547+ got , err := List (context .Background (), cl , & baseACL )
548+ if err != nil {
549+ t .Fatalf ("List() unexpected error: %v" , err )
550+ }
551+ if got != nil {
552+ t .Errorf ("List() expected nil for no matching ACL, got %v" , got )
553+ }
554+ }
555+
556+ func TestListEmptyResponse (t * testing.T ) {
557+ cl := & fakeACLAdmin {describeResults : kadm.DescribeACLsResults {}}
558+ got , err := List (context .Background (), cl , & baseACL )
559+ if err != nil {
560+ t .Fatalf ("List() unexpected error: %v" , err )
561+ }
562+ if got != nil {
563+ t .Errorf ("List() expected nil for empty response, got %v" , got )
564+ }
565+ }
566+
567+ func TestDeleteBrokerError (t * testing.T ) {
568+ cl := & fakeACLAdmin {
569+ deleteResults : kadm.DeleteACLsResults {
570+ {Err : kerr .ClusterAuthorizationFailed },
571+ },
572+ }
573+ err := Delete (context .Background (), cl , & baseACL )
574+ if err == nil {
575+ t .Fatal ("Delete() expected error for broker-level Err, got nil" )
576+ }
577+ }
578+
480579// TestListAtProviderNotFound verifies that List returns nil when the ACL does not exist.
481580func TestListAtProviderNotFound (t * testing.T ) {
482581 if len (dataTesting ) == 0 {
0 commit comments