blob: de11dad37e2303b91af2094a9b436e7ae498f5d0 [file] [log] [blame] [edit]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package client
import (
"errors"
"os"
"testing"
"github.com/hashicorp/go-hclog"
kubetest "github.com/hashicorp/vault/serviceregistration/kubernetes/testing"
)
func TestClient(t *testing.T) {
testState, testConf, closeFunc := kubetest.Server(t)
defer closeFunc()
Scheme = testConf.ClientScheme
TokenFile = testConf.PathToTokenFile
RootCAFile = testConf.PathToRootCAFile
if err := os.Setenv(EnvVarKubernetesServiceHost, testConf.ServiceHost); err != nil {
t.Fatal(err)
}
if err := os.Setenv(EnvVarKubernetesServicePort, testConf.ServicePort); err != nil {
t.Fatal(err)
}
client, err := New(hclog.Default())
if err != nil {
t.Fatal(err)
}
e := &env{
client: client,
testState: testState,
}
e.TestGetPod(t)
e.TestGetPodNotFound(t)
e.TestUpdatePodTags(t)
e.TestUpdatePodTagsNotFound(t)
}
type env struct {
client *Client
testState *kubetest.State
}
func (e *env) TestGetPod(t *testing.T) {
pod, err := e.client.GetPod(kubetest.ExpectedNamespace, kubetest.ExpectedPodName)
if err != nil {
t.Fatal(err)
}
if pod.Metadata.Name != "shell-demo" {
t.Fatalf("expected %q but received %q", "shell-demo", pod.Metadata.Name)
}
}
func (e *env) TestGetPodNotFound(t *testing.T) {
_, err := e.client.GetPod(kubetest.ExpectedNamespace, "no-exist")
if err == nil {
t.Fatal("expected error because pod is unfound")
}
if wrapped := errors.Unwrap(err); wrapped != nil {
err = wrapped
}
if _, ok := err.(*ErrNotFound); !ok {
t.Fatalf("expected *ErrNotFound but received %T (%s)", err, err)
}
}
func (e *env) TestUpdatePodTags(t *testing.T) {
if err := e.client.PatchPod(kubetest.ExpectedNamespace, kubetest.ExpectedPodName, &Patch{
Operation: Add,
Path: "/metadata/labels/fizz",
Value: "buzz",
}); err != nil {
t.Fatal(err)
}
if e.testState.NumPatches() != 1 {
t.Fatalf("expected 1 label but received %+v", e.testState)
}
if e.testState.Get("/metadata/labels/fizz")["value"] != "buzz" {
t.Fatalf("expected buzz but received %q", e.testState.Get("fizz")["value"])
}
if e.testState.Get("/metadata/labels/fizz")["op"] != "add" {
t.Fatalf("expected add but received %q", e.testState.Get("fizz")["op"])
}
}
func (e *env) TestUpdatePodTagsNotFound(t *testing.T) {
err := e.client.PatchPod(kubetest.ExpectedNamespace, "no-exist", &Patch{
Operation: Add,
Path: "/metadata/labels/fizz",
Value: "buzz",
})
if err == nil {
t.Fatal("expected error because pod is unfound")
}
if wrapped := errors.Unwrap(err); wrapped != nil {
err = wrapped
}
if _, ok := err.(*ErrNotFound); !ok {
t.Fatalf("expected *ErrNotFound but received %T", err)
}
}
func TestSanitize(t *testing.T) {
expected := "fizz-buzz"
result := Sanitize("fizz+buzz")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
expected = "fizz_buzz"
result = Sanitize("fizz_buzz")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
expected = "fizz.buzz"
result = Sanitize("fizz.buzz")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
expected = "fizz-buzz"
result = Sanitize("fizz-buzz")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
expected = "123--fhd"
result = Sanitize("123-*fhd")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
expected = "1.4.0-beta1-ent"
result = Sanitize("1.4.0-beta1+ent")
if result != expected {
t.Fatalf("expected %q but received %q", expected, result)
}
}