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); }); }); });