add kubeconfig tests
parent
b1ebe65c1d
commit
ff7cb9ae83
|
@ -0,0 +1,188 @@
|
|||
package kubeconfig
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||
)
|
||||
|
||||
func TestEmptyConfig(t *testing.T) {
|
||||
tmp := tempFile(t, []byte{})
|
||||
defer os.Remove(tmp)
|
||||
|
||||
cfg, err := ReadConfig(tmp)
|
||||
if err != nil {
|
||||
t.Fatalf("could not read config: %v", err)
|
||||
}
|
||||
|
||||
if len(cfg.AuthInfos) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
if len(cfg.Clusters) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
if len(cfg.Contexts) != 0 {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewConfig(t *testing.T) {
|
||||
dir, err := ioutil.TempDir("", ".kube")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// setup minikube config
|
||||
expected := api.NewConfig()
|
||||
minikubeConfig(expected)
|
||||
|
||||
// write actual
|
||||
filename := filepath.Join(dir, "config")
|
||||
err = WriteConfig(expected, filename)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
actual, err := ReadConfig(filename)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if !configEquals(actual, expected) {
|
||||
t.Fatal("configs did not match")
|
||||
}
|
||||
}
|
||||
|
||||
// tempFile creates a temporary with the provided bytes as its contents.
|
||||
// The caller is responsible for deleting file after use.
|
||||
func tempFile(t *testing.T, data []byte) string {
|
||||
tmp, err := ioutil.TempFile("", "kubeconfig")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if len(data) > 0 {
|
||||
if _, err := tmp.Write(data); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := tmp.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return tmp.Name()
|
||||
}
|
||||
|
||||
// minikubeConfig returns a config that reasonably approximates a localkube cluster
|
||||
func minikubeConfig(config *api.Config) {
|
||||
// cluster
|
||||
clusterName := "minikube"
|
||||
cluster := api.NewCluster()
|
||||
cluster.Server = "https://192.168.99.100:443"
|
||||
cluster.CertificateAuthority = "/home/tux/.minikube/apiserver.crt"
|
||||
config.Clusters[clusterName] = cluster
|
||||
|
||||
// user
|
||||
userName := "minikube"
|
||||
user := api.NewAuthInfo()
|
||||
user.ClientCertificate = "/home/tux/.minikube/apiserver.crt"
|
||||
user.ClientKey = "/home/tux/.minikube/apiserver.key"
|
||||
config.AuthInfos[userName] = user
|
||||
|
||||
// context
|
||||
contextName := "minikube"
|
||||
context := api.NewContext()
|
||||
context.Cluster = clusterName
|
||||
context.AuthInfo = userName
|
||||
config.Contexts[contextName] = context
|
||||
|
||||
config.CurrentContext = contextName
|
||||
}
|
||||
|
||||
// configEquals checks if configs are identical
|
||||
func configEquals(a, b *api.Config) bool {
|
||||
if a.Kind != b.Kind {
|
||||
return false
|
||||
}
|
||||
|
||||
if a.APIVersion != b.APIVersion {
|
||||
return false
|
||||
}
|
||||
|
||||
if a.Preferences.Colors != b.Preferences.Colors {
|
||||
return false
|
||||
}
|
||||
if len(a.Extensions) != len(b.Extensions) {
|
||||
return false
|
||||
}
|
||||
|
||||
// clusters
|
||||
if len(a.Clusters) != len(b.Clusters) {
|
||||
return false
|
||||
}
|
||||
for k, aCluster := range a.Clusters {
|
||||
bCluster, exists := b.Clusters[k]
|
||||
if !exists {
|
||||
return false
|
||||
}
|
||||
|
||||
if aCluster.LocationOfOrigin != bCluster.LocationOfOrigin ||
|
||||
aCluster.Server != bCluster.Server ||
|
||||
aCluster.APIVersion != bCluster.APIVersion ||
|
||||
aCluster.InsecureSkipTLSVerify != bCluster.InsecureSkipTLSVerify ||
|
||||
aCluster.CertificateAuthority != bCluster.CertificateAuthority ||
|
||||
len(aCluster.CertificateAuthorityData) != len(bCluster.CertificateAuthorityData) ||
|
||||
len(aCluster.Extensions) != len(bCluster.Extensions) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// users
|
||||
if len(a.AuthInfos) != len(b.AuthInfos) {
|
||||
return false
|
||||
}
|
||||
for k, aAuth := range a.AuthInfos {
|
||||
bAuth, exists := b.AuthInfos[k]
|
||||
if !exists {
|
||||
return false
|
||||
}
|
||||
if aAuth.LocationOfOrigin != bAuth.LocationOfOrigin ||
|
||||
aAuth.ClientCertificate != bAuth.ClientCertificate ||
|
||||
len(aAuth.ClientCertificateData) != len(bAuth.ClientCertificateData) ||
|
||||
aAuth.ClientKey != bAuth.ClientKey ||
|
||||
len(aAuth.ClientKeyData) != len(bAuth.ClientKeyData) ||
|
||||
aAuth.Token != bAuth.Token ||
|
||||
aAuth.Username != bAuth.Username ||
|
||||
aAuth.Password != bAuth.Password ||
|
||||
len(aAuth.Extensions) != len(bAuth.Extensions) {
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// contexts
|
||||
if len(a.Contexts) != len(b.Contexts) {
|
||||
return false
|
||||
}
|
||||
for k, aContext := range a.Contexts {
|
||||
bContext, exists := b.Contexts[k]
|
||||
if !exists {
|
||||
return false
|
||||
}
|
||||
if aContext.LocationOfOrigin != bContext.LocationOfOrigin ||
|
||||
aContext.Cluster != bContext.Cluster ||
|
||||
aContext.AuthInfo != bContext.AuthInfo ||
|
||||
aContext.Namespace != bContext.Namespace ||
|
||||
len(aContext.Extensions) != len(aContext.Extensions) {
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
return true
|
||||
}
|
Loading…
Reference in New Issue