fix: get namespace from file for Kubernetes storage client
Signed-off-by: m.nabokikh <maksim.nabokikh@flant.com>
This commit is contained in:
@@ -3,8 +3,12 @@ package kubernetes
|
||||
import (
|
||||
"hash"
|
||||
"hash/fnv"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// This test does not have an explicit error condition but is used
|
||||
@@ -42,18 +46,101 @@ func TestOfflineTokenName(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNamespaceFromServiceAccountJWT(t *testing.T) {
|
||||
namespace, err := namespaceFromServiceAccountJWT(serviceAccountToken)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
func TestGetClusterConfigNamespace(t *testing.T) {
|
||||
const namespaceENVVariableName = "TEST_GET_CLUSTER_CONFIG_NAMESPACE"
|
||||
{
|
||||
os.Setenv(namespaceENVVariableName, "namespace-from-env")
|
||||
defer os.Unsetenv(namespaceENVVariableName)
|
||||
}
|
||||
wantNamespace := "dex-test-namespace"
|
||||
if namespace != wantNamespace {
|
||||
t.Errorf("expected namespace %q got %q", wantNamespace, namespace)
|
||||
|
||||
var namespaceFile string
|
||||
{
|
||||
tmpfile, err := ioutil.TempFile(os.TempDir(), "test-get-cluster-config-namespace")
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = tmpfile.Write([]byte("namespace-from-file"))
|
||||
require.NoError(t, err)
|
||||
|
||||
namespaceFile = tmpfile.Name()
|
||||
defer os.Remove(namespaceFile)
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
token string
|
||||
fileName string
|
||||
envVariable string
|
||||
|
||||
expectedError bool
|
||||
expectedNamespace string
|
||||
}{
|
||||
{
|
||||
name: "With env variable",
|
||||
envVariable: "TEST_GET_CLUSTER_CONFIG_NAMESPACE",
|
||||
|
||||
expectedNamespace: "namespace-from-env",
|
||||
},
|
||||
{
|
||||
name: "With token",
|
||||
token: serviceAccountToken,
|
||||
|
||||
expectedNamespace: "dex-test-namespace",
|
||||
},
|
||||
{
|
||||
name: "With namespace file",
|
||||
fileName: namespaceFile,
|
||||
|
||||
expectedNamespace: "namespace-from-file",
|
||||
},
|
||||
{
|
||||
name: "With file and token",
|
||||
fileName: namespaceFile,
|
||||
token: serviceAccountToken,
|
||||
|
||||
expectedNamespace: "dex-test-namespace",
|
||||
},
|
||||
{
|
||||
name: "With file and env",
|
||||
fileName: namespaceFile,
|
||||
envVariable: "TEST_GET_CLUSTER_CONFIG_NAMESPACE",
|
||||
|
||||
expectedNamespace: "namespace-from-env",
|
||||
},
|
||||
{
|
||||
name: "With token and env",
|
||||
envVariable: "TEST_GET_CLUSTER_CONFIG_NAMESPACE",
|
||||
token: serviceAccountToken,
|
||||
|
||||
expectedNamespace: "namespace-from-env",
|
||||
},
|
||||
{
|
||||
name: "With file, token and env",
|
||||
fileName: namespaceFile,
|
||||
token: serviceAccountToken,
|
||||
envVariable: "TEST_GET_CLUSTER_CONFIG_NAMESPACE",
|
||||
|
||||
expectedNamespace: "namespace-from-env",
|
||||
},
|
||||
{
|
||||
name: "Without anything",
|
||||
expectedError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
namespace, err := getInClusterConfigNamespace(tc.token, tc.envVariable, tc.fileName)
|
||||
if tc.expectedError {
|
||||
require.Error(t, err)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
require.Equal(t, namespace, tc.expectedNamespace)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
var serviceAccountToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXgtdGVzdC1uYW1lc3BhY2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZG90aGVyb2JvdC1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZG90aGVyb2JvdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjQyYjJhOTRmLTk4MjAtMTFlNi1iZDc0LTJlZmQzOGYxMjYxYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZXgtdGVzdC1uYW1lc3BhY2U6ZG90aGVyb2JvdCJ9.KViBpPwCiBwxDvAjYUUXoVvLVwqV011aLlYQpNtX12Bh8M-QAFch-3RWlo_SR00bcdFg_nZo9JKACYlF_jHMEsf__PaYms9r7vEaSg0jPfkqnL2WXZktzQRyLBr0n-bxeUrbwIWsKOAC0DfFB5nM8XoXljRmq8yAx8BAdmQp7MIFb4EOV9nYthhua6pjzYyaFSiDiYTjw7HtXOvoL8oepodJ3-37pUKS8vdBvnvUoqC4M1YAhkO5L36JF6KV_RfmG8GPEdNQfXotHcsR-3jKi1n8S5l7Xd-rhrGOhSGQizH3dORzo9GvBAhYeqbq1O-NLzm2EQUiMQayIUx7o4g3Kw"
|
||||
const serviceAccountToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZXgtdGVzdC1uYW1lc3BhY2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZG90aGVyb2JvdC1zZWNyZXQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZG90aGVyb2JvdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjQyYjJhOTRmLTk4MjAtMTFlNi1iZDc0LTJlZmQzOGYxMjYxYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZXgtdGVzdC1uYW1lc3BhY2U6ZG90aGVyb2JvdCJ9.KViBpPwCiBwxDvAjYUUXoVvLVwqV011aLlYQpNtX12Bh8M-QAFch-3RWlo_SR00bcdFg_nZo9JKACYlF_jHMEsf__PaYms9r7vEaSg0jPfkqnL2WXZktzQRyLBr0n-bxeUrbwIWsKOAC0DfFB5nM8XoXljRmq8yAx8BAdmQp7MIFb4EOV9nYthhua6pjzYyaFSiDiYTjw7HtXOvoL8oepodJ3-37pUKS8vdBvnvUoqC4M1YAhkO5L36JF6KV_RfmG8GPEdNQfXotHcsR-3jKi1n8S5l7Xd-rhrGOhSGQizH3dORzo9GvBAhYeqbq1O-NLzm2EQUiMQayIUx7o4g3Kw"
|
||||
|
||||
// The following program was used to generate the example token. Since we don't want to
|
||||
// import Kubernetes, just leave it as a comment.
|
||||
|
Reference in New Issue
Block a user