github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/scoped/querier_test.go (about)

     1  package scoped
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/sirupsen/logrus/hooks/test"
     8  	"github.com/stretchr/testify/require"
     9  	corev1 "k8s.io/api/core/v1"
    10  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    11  
    12  	v1 "github.com/operator-framework/api/pkg/operators/v1"
    13  	"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
    14  	"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned/fake"
    15  )
    16  
    17  func TestUserDefinedServiceAccountQuerier(t *testing.T) {
    18  	tests := []struct {
    19  		name          string
    20  		crclient      versioned.Interface
    21  		namespace     string
    22  		wantReference *corev1.ObjectReference
    23  		wantErr       bool
    24  		err           error
    25  	}{
    26  		{
    27  			name:      "NoOperatorGroup",
    28  			crclient:  fake.NewSimpleClientset(),
    29  			namespace: "ns",
    30  			wantErr:   true,
    31  			err:       fmt.Errorf("no operator group found that is managing this namespace"),
    32  		},
    33  		{
    34  			name: "OperatorGroup/NamespaceNotInSpec",
    35  			crclient: fake.NewSimpleClientset(&v1.OperatorGroup{
    36  				ObjectMeta: metav1.ObjectMeta{
    37  					Name:      "og",
    38  					Namespace: "ns",
    39  				},
    40  				Spec: v1.OperatorGroupSpec{
    41  					TargetNamespaces: []string{"other"},
    42  				},
    43  			}),
    44  			namespace: "ns",
    45  			wantErr:   true,
    46  			err:       fmt.Errorf("no operator group found that is managing this namespace"),
    47  		},
    48  		{
    49  			name: "OperatorGroup/NamespaceNotInStatus",
    50  			crclient: fake.NewSimpleClientset(&v1.OperatorGroup{
    51  				ObjectMeta: metav1.ObjectMeta{
    52  					Name:      "og",
    53  					Namespace: "ns",
    54  				},
    55  				Spec: v1.OperatorGroupSpec{
    56  					TargetNamespaces: []string{"ns"},
    57  				},
    58  			}),
    59  			namespace: "ns",
    60  			wantErr:   true,
    61  			err:       fmt.Errorf("no operator group found that is managing this namespace"),
    62  		},
    63  		{
    64  			name: "OperatorGroup/Multiple",
    65  			crclient: fake.NewSimpleClientset(
    66  				&v1.OperatorGroup{
    67  					ObjectMeta: metav1.ObjectMeta{
    68  						Name:      "og",
    69  						Namespace: "ns",
    70  					},
    71  					Spec: v1.OperatorGroupSpec{
    72  						TargetNamespaces: []string{"ns"},
    73  					},
    74  					Status: v1.OperatorGroupStatus{
    75  						Namespaces: []string{"ns"},
    76  					},
    77  				},
    78  				&v1.OperatorGroup{
    79  					ObjectMeta: metav1.ObjectMeta{
    80  						Name:      "og2",
    81  						Namespace: "ns",
    82  					},
    83  					Spec: v1.OperatorGroupSpec{
    84  						TargetNamespaces: []string{"ns"},
    85  					},
    86  					Status: v1.OperatorGroupStatus{
    87  						Namespaces: []string{"ns"},
    88  					},
    89  				},
    90  			),
    91  			namespace: "ns",
    92  			wantErr:   true,
    93  			err:       fmt.Errorf("more than one operator group(s) are managing this namespace count=2"),
    94  		},
    95  		{
    96  			name: "OperatorGroup/NamespaceInStatus/NoSA",
    97  			crclient: fake.NewSimpleClientset(&v1.OperatorGroup{
    98  				ObjectMeta: metav1.ObjectMeta{
    99  					Name:      "og",
   100  					Namespace: "ns",
   101  				},
   102  				Spec: v1.OperatorGroupSpec{
   103  					TargetNamespaces: []string{"ns"},
   104  				},
   105  				Status: v1.OperatorGroupStatus{
   106  					Namespaces: []string{"ns"},
   107  				},
   108  			}),
   109  			namespace: "ns",
   110  			wantErr:   false,
   111  			err:       nil,
   112  		},
   113  		{
   114  			name: "OperatorGroup/NamespaceInStatus/ServiceAccountRef",
   115  			crclient: fake.NewSimpleClientset(&v1.OperatorGroup{
   116  				ObjectMeta: metav1.ObjectMeta{
   117  					Name:      "og",
   118  					Namespace: "ns",
   119  				},
   120  				Spec: v1.OperatorGroupSpec{
   121  					TargetNamespaces:   []string{"ns"},
   122  					ServiceAccountName: "sa",
   123  				},
   124  				Status: v1.OperatorGroupStatus{
   125  					Namespaces: []string{"ns"},
   126  					ServiceAccountRef: &corev1.ObjectReference{
   127  						Kind:      "ServiceAccount",
   128  						Namespace: "ns",
   129  						Name:      "sa",
   130  					},
   131  				},
   132  			}),
   133  			namespace: "ns",
   134  			wantErr:   false,
   135  			err:       nil,
   136  			wantReference: &corev1.ObjectReference{
   137  				Kind:      "ServiceAccount",
   138  				Namespace: "ns",
   139  				Name:      "sa",
   140  			},
   141  		},
   142  	}
   143  	for _, tt := range tests {
   144  		t.Run(tt.name, func(t *testing.T) {
   145  			logger, _ := test.NewNullLogger()
   146  			f := &UserDefinedServiceAccountQuerier{
   147  				crclient: tt.crclient,
   148  				logger:   logger,
   149  			}
   150  			gotReference, err := f.NamespaceQuerier(tt.namespace)()
   151  			if tt.wantErr {
   152  				require.Equal(t, tt.err.Error(), err.Error())
   153  			} else {
   154  				require.Nil(t, tt.err)
   155  			}
   156  			require.Equal(t, tt.wantReference, gotReference)
   157  		})
   158  	}
   159  }