blob: a6a93c9ceeeed946e254ea513a669c21a447d9c2 [file] [log] [blame] [edit]
// 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"])
}
}