// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package kubernetes import ( "os" "strconv" "sync" "testing" "github.com/hashicorp/go-hclog" sr "github.com/hashicorp/vault/serviceregistration" "github.com/hashicorp/vault/serviceregistration/kubernetes/client" kubetest "github.com/hashicorp/vault/serviceregistration/kubernetes/testing" ) var testVersion = "version1" func TestServiceRegistration(t *testing.T) { testState, testConf, closeFunc := kubetest.Server(t) defer closeFunc() client.Scheme = testConf.ClientScheme client.TokenFile = testConf.PathToTokenFile client.RootCAFile = testConf.PathToRootCAFile if err := os.Setenv(client.EnvVarKubernetesServiceHost, testConf.ServiceHost); err != nil { t.Fatal(err) } if err := os.Setenv(client.EnvVarKubernetesServicePort, testConf.ServicePort); err != nil { t.Fatal(err) } if testState.NumPatches() != 0 { t.Fatalf("expected 0 patches but have %d: %+v", testState.NumPatches(), testState) } shutdownCh := make(chan struct{}) config := map[string]string{ "namespace": kubetest.ExpectedNamespace, "pod_name": kubetest.ExpectedPodName, } logger := hclog.NewNullLogger() state := sr.State{ VaultVersion: testVersion, IsInitialized: true, IsSealed: true, IsActive: true, IsPerformanceStandby: true, } reg, err := NewServiceRegistration(config, logger, state) if err != nil { t.Fatal(err) } if err := reg.Run(shutdownCh, &sync.WaitGroup{}, ""); err != nil { t.Fatal(err) } // Test initial state. if testState.NumPatches() != 5 { t.Fatalf("expected 5 current labels but have %d: %+v", testState.NumPatches(), testState) } if testState.Get(pathToLabels + labelVaultVersion)["value"] != testVersion { t.Fatalf("expected %q but received %q", testVersion, testState.Get(pathToLabels + labelVaultVersion)["value"]) } if testState.Get(pathToLabels + labelActive)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelActive)["value"]) } if testState.Get(pathToLabels + labelSealed)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelSealed)["value"]) } if testState.Get(pathToLabels + labelPerfStandby)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelPerfStandby)["value"]) } if testState.Get(pathToLabels + labelInitialized)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelInitialized)["value"]) } // Test NotifyActiveStateChange. if err := reg.NotifyActiveStateChange(false); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelActive)["value"] != strconv.FormatBool(false) { t.Fatalf("expected %q but received %q", strconv.FormatBool(false), testState.Get(pathToLabels + labelActive)["value"]) } if err := reg.NotifyActiveStateChange(true); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelActive)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelActive)["value"]) } // Test NotifySealedStateChange. if err := reg.NotifySealedStateChange(false); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelSealed)["value"] != strconv.FormatBool(false) { t.Fatalf("expected %q but received %q", strconv.FormatBool(false), testState.Get(pathToLabels + labelSealed)["value"]) } if err := reg.NotifySealedStateChange(true); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelSealed)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelSealed)["value"]) } // Test NotifyPerformanceStandbyStateChange. if err := reg.NotifyPerformanceStandbyStateChange(false); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelPerfStandby)["value"] != strconv.FormatBool(false) { t.Fatalf("expected %q but received %q", strconv.FormatBool(false), testState.Get(pathToLabels + labelPerfStandby)["value"]) } if err := reg.NotifyPerformanceStandbyStateChange(true); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelPerfStandby)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelPerfStandby)["value"]) } // Test NotifyInitializedStateChange. if err := reg.NotifyInitializedStateChange(false); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelInitialized)["value"] != strconv.FormatBool(false) { t.Fatalf("expected %q but received %q", strconv.FormatBool(false), testState.Get(pathToLabels + labelInitialized)["value"]) } if err := reg.NotifyInitializedStateChange(true); err != nil { t.Fatal(err) } if testState.Get(pathToLabels + labelInitialized)["value"] != strconv.FormatBool(true) { t.Fatalf("expected %q but received %q", strconv.FormatBool(true), testState.Get(pathToLabels + labelInitialized)["value"]) } }