github.com/verrazzano/verrazzano@v1.7.1/tests/e2e/upgrade/post-upgrade/keycloak/keycloak_test.go (about) 1 // Copyright (c) 2022, 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package keycloak 5 6 import ( 7 "fmt" 8 dump "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/clusterdump" 9 "time" 10 11 "gopkg.in/yaml.v3" 12 13 . "github.com/onsi/ginkgo/v2" 14 . "github.com/onsi/gomega" 15 "github.com/verrazzano/verrazzano/tests/e2e/pkg" 16 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework" 17 "github.com/verrazzano/verrazzano/tests/e2e/pkg/test/framework/metrics" 18 ) 19 20 var waitTimeout = 4 * time.Minute 21 var pollingInterval = 30 * time.Second 22 23 var t = framework.NewTestFramework("verify") 24 25 var userIDConfig map[string]string 26 27 var beforeSuite = t.BeforeSuiteFunc(func() { 28 start := time.Now() 29 beforeSuitePassed = true 30 31 isManagedClusterProfile := pkg.IsManagedClusterProfile() 32 if isManagedClusterProfile { 33 Skip("Skipping test suite since this is a managed cluster profile") 34 } 35 36 exists, err := pkg.DoesNamespaceExist(pkg.TestKeycloakNamespace) 37 if err != nil { 38 Fail(err.Error()) 39 } 40 if !exists { 41 AbortSuite(fmt.Sprintf("Skipping test suite since the namespace %s does not exist", pkg.TestKeycloakNamespace)) 42 } 43 44 configMap, err := pkg.GetConfigMap(pkg.TestKeycloakConfigMap, pkg.TestKeycloakNamespace) 45 if err != nil { 46 AbortSuite(fmt.Sprintf("Failed getting configmap: %v", err)) 47 } 48 49 if configMap == nil { 50 AbortSuite(fmt.Sprintf("Skipping test suite since the configmap %s does not exist", pkg.TestKeycloakConfigMap)) 51 } 52 53 userIDConfigData := configMap.Data["data"] 54 err = yaml.Unmarshal([]byte(userIDConfigData), &userIDConfig) 55 if err != nil { 56 AbortSuite(fmt.Sprintf("Failed getting configmap data: %v", err)) 57 } 58 59 metrics.Emit(t.Metrics.With("before_suite_elapsed_time", time.Since(start).Milliseconds())) 60 }) 61 62 var _ = BeforeSuite(beforeSuite) 63 64 var failed = false 65 var beforeSuitePassed = false 66 67 var _ = t.AfterEach(func() { 68 failed = failed || framework.VzCurrentGinkgoTestDescription().Failed() 69 }) 70 71 var afterSuite = t.AfterSuiteFunc(func() { 72 start := time.Now() 73 if failed || !beforeSuitePassed { 74 dump.ExecuteBugReport() 75 } 76 metrics.Emit(t.Metrics.With("after_suite_elapsed_time", time.Since(start).Milliseconds())) 77 }) 78 79 var _ = AfterSuite(afterSuite) 80 81 var _ = t.Describe("Verify users exist in Keycloak", Label("f:platform-lcm.install"), func() { 82 t.It("Verifying user in master realm", func() { 83 Eventually(verifyUserExistsMaster, waitTimeout, pollingInterval).Should(BeTrue()) 84 }) 85 t.It("Verifying user in verrazzano-system realm", func() { 86 Eventually(verifyUserExistsVerrazzano, waitTimeout, pollingInterval).Should(BeTrue()) 87 }) 88 }) 89 90 func verifyUserExistsMaster() bool { 91 return verifyUserExists("master", userIDConfig[pkg.TestKeycloakMasterUserIDKey]) 92 } 93 94 func verifyUserExistsVerrazzano() bool { 95 return verifyUserExists("verrazzano-system", userIDConfig[pkg.TestKeycloakVerrazzanoUserIDKey]) 96 } 97 98 func verifyUserExists(realm, userID string) bool { 99 kc, err := pkg.NewKeycloakAdminRESTClient() 100 if err != nil { 101 t.Logs.Error(fmt.Printf("Failed to create Keycloak REST client: %v\n", err)) 102 return false 103 } 104 105 exists, err := kc.VerifyUserExists(realm, userID) 106 if err != nil { 107 t.Logs.Info(fmt.Printf("Failed to verify user %s/%s: %v\n", realm, userID, err)) 108 return false 109 } 110 return exists 111 }