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  }