@@ -17,12 +17,18 @@ limitations under the License.
1717package v1alpha1
1818
1919import (
20+ "context"
2021 "fmt"
2122 "os"
2223 "reflect"
2324 "testing"
2425
26+ v1 "k8s.io/api/rbac/v1"
2527 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28+ "k8s.io/apimachinery/pkg/runtime"
29+ "k8s.io/apimachinery/pkg/types"
30+ utilruntime "k8s.io/apimachinery/pkg/util/runtime"
31+ "sigs.k8s.io/controller-runtime/pkg/client/fake"
2632)
2733
2834// TestNamespacedName tests Repository.NamespacedName
@@ -259,3 +265,177 @@ func TestRepository_IsOCI(t *testing.T) {
259265 })
260266 }
261267}
268+
269+ func TestRatingEnabled (t * testing.T ) {
270+ os .Setenv (RatingEnableEnv , "true" )
271+ if ! RatingEnabled () {
272+ t .Fatalf ("Test Failed. expect true get false" )
273+ }
274+ os .Unsetenv (RatingEnableEnv )
275+ if RatingEnabled () {
276+ t .Fatalf ("Test Failed. expect false get true" )
277+ }
278+ }
279+
280+ func TestGetRatingServiceAccount (t * testing.T ) {
281+ setSA := "serviceaccount"
282+ os .Setenv (RatingServiceAccountEnv , setSA )
283+ if r := GetRatingServiceAccount (); r != setSA {
284+ t .Fatalf ("Test Failed. expect '%s' get '%s'" , setSA , r )
285+ }
286+ os .Unsetenv (RatingServiceAccountEnv )
287+ if r := GetRatingServiceAccount (); r != DefaultRatingServiaceAccount {
288+ t .Fatalf ("Test Failed. expect '%s' get '%s'" , DefaultRatingServiaceAccount , r )
289+ }
290+ }
291+
292+ func TestGetRatingClusterRole (t * testing.T ) {
293+ setRole := "clustrrole"
294+ os .Setenv (RatingClusterRoleEnv , setRole )
295+ if r := GetRatingClusterRole (); r != setRole {
296+ t .Fatalf ("Test Failed. expec '%s' get '%s'" , setRole , r )
297+ }
298+ os .Unsetenv (RatingClusterRoleEnv )
299+ if r := GetRatingClusterRole (); r != DefaultRatingClusterRole {
300+ t .Fatalf ("Test Failed. expec '%s' get '%s'" , DefaultRatingClusterRole , r )
301+ }
302+ }
303+
304+ func TestGetRatingClusterRoleBinding (t * testing.T ) {
305+ setRolebinding := "clusterrolebinding"
306+ os .Setenv (RatingClusterRoleBindingEnv , setRolebinding )
307+ if r := GetRatingClusterRoleBinding (); r != setRolebinding {
308+ t .Fatalf ("Test Failed. expect '%s' get '%s'" , setRolebinding , r )
309+ }
310+ os .Unsetenv (RatingClusterRoleBindingEnv )
311+ if r := GetRatingClusterRoleBinding (); r != DefaultRatingClusterRoleBinding {
312+ t .Fatalf ("Test Failed. expect '%s' get '%s'" , DefaultRatingClusterRoleBinding , r )
313+ }
314+ }
315+
316+ func TestAddSubjectToClusterRoleBinding (t * testing.T ) {
317+ c := fake .NewClientBuilder ()
318+ namespace := "default"
319+ expectSubject := []v1.Subject {
320+ {
321+ Kind : "ServiceAccount" ,
322+ Name : GetRatingServiceAccount (),
323+ Namespace : namespace ,
324+ },
325+ }
326+
327+ addSubjectCLB := & v1.ClusterRoleBinding {
328+ ObjectMeta : metav1.ObjectMeta {
329+ Name : DefaultRatingClusterRoleBinding ,
330+ },
331+ }
332+
333+ subjectCLB := & v1.ClusterRoleBinding {
334+ ObjectMeta : metav1.ObjectMeta {
335+ Name : "default" ,
336+ },
337+ Subjects : expectSubject ,
338+ }
339+
340+ scheme := runtime .NewScheme ()
341+ utilruntime .Must (v1 .AddToScheme (scheme ))
342+ c .WithObjects (addSubjectCLB , subjectCLB )
343+ c .WithScheme (scheme )
344+ // first test not enable
345+ client := c .Build ()
346+ if err := AddSubjectToClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
347+ t .Fatalf ("Test Failed. rating is not enabled and no error should be returned." )
348+ }
349+ // set rating
350+ os .Setenv (RatingEnableEnv , "true" )
351+ if err := AddSubjectToClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
352+ t .Fatalf ("Test Failed. rating is enabled, but serviceaccount is not set properly. with error: %v" , err )
353+ }
354+ // checkt clusterrolebinding
355+ clb := & v1.ClusterRoleBinding {}
356+ if err := client .Get (context .TODO (), types.NamespacedName {Name : GetRatingClusterRoleBinding ()}, clb ); err != nil {
357+ t .Fatalf ("Test Failed. after setting clusterrolebinding %s's subject, getobject erorr: %v" , GetRatingClusterRoleBinding (), err )
358+ }
359+ if ! reflect .DeepEqual (clb .Subjects , expectSubject ) {
360+ t .Fatalf ("Test Failed. for clusterrolebinding %s, the expected subject is %v but got %v" , GetRatingClusterRoleBinding (), expectSubject , clb .Subjects )
361+ }
362+
363+ // set clusterrolebinding to default
364+ os .Setenv (RatingClusterRoleBindingEnv , "default" )
365+ if err := AddSubjectToClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
366+ t .Fatalf ("Test Failed. rating is enabled, but serviceaccount is not set properly. with error: %v" , err )
367+ }
368+ clb = & v1.ClusterRoleBinding {}
369+ if err := client .Get (context .TODO (), types.NamespacedName {Name : GetRatingClusterRoleBinding ()}, clb ); err != nil {
370+ t .Fatalf ("Test Failed. after setting clusterrolebinding %s's subject, getobject erorr: %v" , GetRatingClusterRoleBinding (), err )
371+ }
372+ if ! reflect .DeepEqual (clb .Subjects , expectSubject ) {
373+ t .Fatalf ("Test Failed. for clusterrolebinding %s, the expected subject is %v but got %v" , GetRatingClusterRoleBinding (), expectSubject , clb .Subjects )
374+ }
375+
376+ os .Unsetenv (RatingClusterRoleBindingEnv )
377+ os .Unsetenv (RatingEnableEnv )
378+ }
379+
380+ func TestRemoveSubjectFromClusterRoleBinding (t * testing.T ) {
381+ c := fake .NewClientBuilder ()
382+ namespace := "default"
383+
384+ clb1 := & v1.ClusterRoleBinding {
385+ ObjectMeta : metav1.ObjectMeta {
386+ Name : DefaultRatingClusterRoleBinding ,
387+ },
388+ }
389+
390+ clb2 := & v1.ClusterRoleBinding {
391+ ObjectMeta : metav1.ObjectMeta {
392+ Name : "default" ,
393+ },
394+ Subjects : []v1.Subject {
395+ {
396+ Kind : "ServiceAccount" ,
397+ Name : GetRatingServiceAccount (),
398+ Namespace : namespace ,
399+ },
400+ },
401+ }
402+
403+ scheme := runtime .NewScheme ()
404+ utilruntime .Must (v1 .AddToScheme (scheme ))
405+ c .WithObjects (clb1 , clb2 )
406+ c .WithScheme (scheme )
407+ // first test not enable
408+ client := c .Build ()
409+ if err := RemoveSubjectFromClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
410+ t .Fatalf ("Test Failed. rating is not enabled and no error should be returned." )
411+ }
412+
413+ os .Setenv (RatingEnableEnv , "true" )
414+ // remove serviceaccount from clusterrolebinding rating-clusterrolebinding
415+ if err := RemoveSubjectFromClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
416+ t .Fatalf ("Test Failed. rating is enabled, but the serviceaccount is not removed normally. with error: %v" , err )
417+ }
418+ // checkt clusterrolebinding
419+ clb := & v1.ClusterRoleBinding {}
420+ if err := client .Get (context .TODO (), types.NamespacedName {Name : GetRatingClusterRoleBinding ()}, clb ); err != nil {
421+ t .Fatalf ("Test Failed. after setting clusterrolebinding %s's subject, getobject erorr: %v" , GetRatingClusterRoleBinding (), err )
422+ }
423+ if len (clb .Subjects ) != 0 {
424+ t .Fatalf ("Test Failed. for clusterrolebinding %s, the expected subject is nil but got %v" , GetRatingClusterRoleBinding (), clb .Subjects )
425+ }
426+
427+ os .Setenv (RatingClusterRoleBindingEnv , "default" )
428+ // remove serviceaccount from clustrrolebinding default
429+ if err := RemoveSubjectFromClusterRoleBinding (context .TODO (), client , namespace ); err != nil {
430+ t .Fatalf ("Test Failed. rating is enabled, but the serviceaccount is not removed normally. with error: %v" , err )
431+ }
432+ clb = & v1.ClusterRoleBinding {}
433+ if err := client .Get (context .TODO (), types.NamespacedName {Name : GetRatingClusterRoleBinding ()}, clb ); err != nil {
434+ t .Fatalf ("Test Failed. after setting clusterrolebinding %s's subject, getobject erorr: %v" , GetRatingClusterRoleBinding (), err )
435+ }
436+ if len (clb .Subjects ) != 0 {
437+ t .Fatalf ("Test Failed. for clusterrolebinding %s, the expected subject is nil but got %v" , GetRatingClusterRoleBinding (), clb .Subjects )
438+ }
439+ os .Unsetenv (RatingClusterRoleBindingEnv )
440+ os .Unsetenv (RatingEnableEnv )
441+ }
0 commit comments