As I started writing tests for EKS config, dealing with the repeated setup/verification code was cumbersome. This should make it much easier to add new tests.
93 lines
2.6 KiB
Go
93 lines
2.6 KiB
Go
package run
|
|
|
|
import (
|
|
"github.com/stretchr/testify/suite"
|
|
yaml "gopkg.in/yaml.v2"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
type KubeconfigTestSuite struct {
|
|
suite.Suite
|
|
configFile *os.File
|
|
initKube InitKube
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) BeforeTest(_, _ string) {
|
|
file, err := ioutil.TempFile("", "kubeconfig********.yml")
|
|
suite.Require().NoError(err)
|
|
file.Close()
|
|
suite.configFile = file
|
|
|
|
// set up an InitKube with the bare minimum configuration
|
|
suite.initKube = InitKube{
|
|
ConfigFile: file.Name(),
|
|
TemplateFile: "../../assets/kubeconfig.tpl", // the actual kubeconfig template
|
|
APIServer: "a",
|
|
Token: "b",
|
|
}
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) AfterTest(_, _ string) {
|
|
if suite.configFile != nil {
|
|
os.Remove(suite.configFile.Name())
|
|
}
|
|
}
|
|
|
|
func TestKubeconfigTestSuite(t *testing.T) {
|
|
suite.Run(t, new(KubeconfigTestSuite))
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsNamespace() {
|
|
cfg := Config{
|
|
Namespace: "marshmallow",
|
|
}
|
|
contents := suite.generateKubeconfig(cfg)
|
|
suite.Contains(contents, "namespace: marshmallow")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsAPIServer() {
|
|
suite.initKube.APIServer = "https://kube.cluster/peanut"
|
|
contents := suite.generateKubeconfig(Config{})
|
|
suite.Contains(contents, "server: https://kube.cluster/peanut")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsServiceAccount() {
|
|
suite.initKube.ServiceAccount = "chef"
|
|
contents := suite.generateKubeconfig(Config{})
|
|
suite.Contains(contents, "user: chef")
|
|
suite.Contains(contents, "name: chef")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsToken() {
|
|
suite.initKube.Token = "eWVhaCB3ZSB0b2tpbic"
|
|
contents := suite.generateKubeconfig(Config{})
|
|
suite.Contains(contents, "token: eWVhaCB3ZSB0b2tpbic")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsCertificate() {
|
|
suite.initKube.Certificate = "d293LCB5b3UgYXJlIHNvIGNvb2wgZm9yIHNtb2tpbmcgd2VlZCDwn5mE"
|
|
contents := suite.generateKubeconfig(Config{})
|
|
suite.Contains(contents, "certificate-authority-data: d293LCB5b3UgYXJlIHNvIGNvb2wgZm9yIHNtb2tpbmcgd2VlZCDwn5mE")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) TestSetsSkipTLSVerify() {
|
|
suite.initKube.SkipTLSVerify = true
|
|
contents := suite.generateKubeconfig(Config{})
|
|
suite.Contains(contents, "insecure-skip-tls-verify: true")
|
|
}
|
|
|
|
func (suite *KubeconfigTestSuite) generateKubeconfig(cfg Config) string {
|
|
suite.Require().NoError(suite.initKube.Prepare(cfg))
|
|
suite.Require().NoError(suite.initKube.Execute(cfg))
|
|
|
|
contents, err := ioutil.ReadFile(suite.configFile.Name())
|
|
suite.Require().NoError(err)
|
|
|
|
conf := map[string]interface{}{}
|
|
suite.NoError(yaml.UnmarshalStrict(contents, &conf))
|
|
|
|
return string(contents)
|
|
}
|