151 lines
4.0 KiB
TypeScript
151 lines
4.0 KiB
TypeScript
import * as fs from "fs";
|
|
import { getRequiredInputError } from "../../tests/util";
|
|
import { createKubeconfig, getDefaultKubeconfig } from "./default";
|
|
|
|
describe("Default kubeconfig", () => {
|
|
test("it creates a kubeconfig with proper format", () => {
|
|
const certAuth = "certAuth";
|
|
const token = "token";
|
|
const clusterUrl = "clusterUrl";
|
|
|
|
const kc = createKubeconfig(certAuth, token, clusterUrl);
|
|
const expected = JSON.stringify({
|
|
apiVersion: "v1",
|
|
kind: "Config",
|
|
clusters: [
|
|
{
|
|
name: "default",
|
|
cluster: {
|
|
server: clusterUrl,
|
|
"certificate-authority-data": certAuth,
|
|
"insecure-skip-tls-verify": false,
|
|
},
|
|
},
|
|
],
|
|
users: [{ name: "default-user", user: { token } }],
|
|
contexts: [
|
|
{
|
|
name: "loaded-context",
|
|
context: {
|
|
cluster: "default",
|
|
user: "default-user",
|
|
name: "loaded-context",
|
|
},
|
|
},
|
|
],
|
|
preferences: {},
|
|
"current-context": "loaded-context",
|
|
});
|
|
|
|
expect(kc).toBe(expected);
|
|
});
|
|
|
|
test("it throws error without method", () => {
|
|
expect(() => getDefaultKubeconfig()).toThrow(
|
|
getRequiredInputError("method")
|
|
);
|
|
});
|
|
|
|
describe("default method", () => {
|
|
beforeEach(() => {
|
|
process.env["INPUT_METHOD"] = "default";
|
|
});
|
|
|
|
test("it throws error without kubeconfig", () => {
|
|
expect(() => getDefaultKubeconfig()).toThrow(
|
|
getRequiredInputError("kubeconfig")
|
|
);
|
|
});
|
|
|
|
test("it gets default config through kubeconfig input", () => {
|
|
const kc = "example kc";
|
|
process.env["INPUT_KUBECONFIG"] = kc;
|
|
|
|
expect(getDefaultKubeconfig()).toBe(kc);
|
|
});
|
|
});
|
|
|
|
test("it defaults to default method", () => {
|
|
process.env["INPUT_METHOD"] = "unknown";
|
|
|
|
const kc = "example kc";
|
|
process.env["INPUT_KUBECONFIG"] = kc;
|
|
|
|
expect(getDefaultKubeconfig()).toBe(kc);
|
|
});
|
|
|
|
test("it defaults to default method from service-principal", () => {
|
|
process.env["INPUT_METHOD"] = "service-principal";
|
|
|
|
const kc = "example kc";
|
|
process.env["INPUT_KUBECONFIG"] = kc;
|
|
|
|
expect(getDefaultKubeconfig()).toBe(kc);
|
|
});
|
|
|
|
describe("service-account method", () => {
|
|
beforeEach(() => {
|
|
process.env["INPUT_METHOD"] = "service-account";
|
|
});
|
|
|
|
test("it throws error without cluster url", () => {
|
|
expect(() => getDefaultKubeconfig()).toThrow(
|
|
getRequiredInputError("k8s-url")
|
|
);
|
|
});
|
|
|
|
test("it throws error without k8s secret", () => {
|
|
process.env["INPUT_K8S-URL"] = "url";
|
|
|
|
expect(() => getDefaultKubeconfig()).toThrow(
|
|
getRequiredInputError("k8s-secret")
|
|
);
|
|
});
|
|
|
|
test("it gets kubeconfig through service-account", () => {
|
|
const k8sUrl = "https://testing-dns-4za.hfp.earth.azmk8s.io:443";
|
|
const token = "ZXlKaGJHY2lPcUpTVXpJMU5pSX=";
|
|
const cert = "LS0tLS1CRUdJTiBDRWyUSUZJQ";
|
|
const k8sSecret = fs.readFileSync("tests/sample-secret.yml").toString();
|
|
|
|
process.env["INPUT_K8S-URL"] = k8sUrl;
|
|
process.env["INPUT_K8S-SECRET"] = k8sSecret;
|
|
|
|
const expectedConfig = JSON.stringify({
|
|
apiVersion: "v1",
|
|
kind: "Config",
|
|
clusters: [
|
|
{
|
|
name: "default",
|
|
cluster: {
|
|
server: k8sUrl,
|
|
"certificate-authority-data": cert,
|
|
"insecure-skip-tls-verify": false,
|
|
},
|
|
},
|
|
],
|
|
users: [
|
|
{
|
|
name: "default-user",
|
|
user: { token: Buffer.from(token, "base64").toString() },
|
|
},
|
|
],
|
|
contexts: [
|
|
{
|
|
name: "loaded-context",
|
|
context: {
|
|
cluster: "default",
|
|
user: "default-user",
|
|
name: "loaded-context",
|
|
},
|
|
},
|
|
],
|
|
preferences: {},
|
|
"current-context": "loaded-context",
|
|
});
|
|
|
|
expect(getDefaultKubeconfig()).toBe(expectedConfig);
|
|
});
|
|
});
|
|
});
|