package admin
import (
"io/ioutil"
"os"
"testing"
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/util/sets"
// install all APIs
_ "github.com/openshift/origin/pkg/api/install"
_ "k8s.io/kubernetes/pkg/api/install"
)
func TestNodeConfigNonTLS(t *testing.T) {
signerCert, signerKey, signerSerial := makeSignerCert(t)
defer os.Remove(signerCert)
defer os.Remove(signerKey)
defer os.Remove(signerSerial)
configDirName := executeNodeConfig([]string{"--node=my-node", "--hostnames=example.org", "--listen=http://0.0.0.0", "--certificate-authority=" + signerCert, "--signer-cert=" + signerCert, "--signer-key=" + signerKey, "--signer-serial=" + signerSerial})
defer os.Remove(configDirName)
configDir, err := os.Open(configDirName)
if err != nil {
t.Fatalf("unable to read %v", configDirName)
}
fileNameSlice, err := configDir.Readdirnames(0)
if err != nil {
t.Fatalf("unable to read %v", configDirName)
}
filenames := sets.NewString(fileNameSlice...)
expectedNames := sets.NewString("master-client.crt", "master-client.key", "node.kubeconfig", "node-config.yaml", "node-registration.json", "ca.crt")
if !filenames.HasAll(expectedNames.List()...) || !expectedNames.HasAll(filenames.List()...) {
t.Errorf("expected %v, got %v", expectedNames.List(), filenames.List())
}
}
func TestNodeConfigTLS(t *testing.T) {
signerCert, signerKey, signerSerial := makeSignerCert(t)
defer os.Remove(signerCert)
defer os.Remove(signerKey)
defer os.Remove(signerSerial)
configDirName := executeNodeConfig([]string{"--node=my-node", "--hostnames=example.org", "--listen=https://0.0.0.0", "--certificate-authority=" + signerCert, "--node-client-certificate-authority=" + signerCert, "--signer-cert=" + signerCert, "--signer-key=" + signerKey, "--signer-serial=" + signerSerial})
defer os.Remove(configDirName)
configDir, err := os.Open(configDirName)
if err != nil {
t.Fatalf("unable to read %v", configDirName)
}
fileNameSlice, err := configDir.Readdirnames(0)
if err != nil {
t.Fatalf("unable to read %v", configDirName)
}
filenames := sets.NewString(fileNameSlice...)
expectedNames := sets.NewString("master-client.crt", "master-client.key", "server.crt", "server.key", "node-client-ca.crt", "node.kubeconfig", "node-config.yaml", "node-registration.json", "ca.crt")
if !filenames.HasAll(expectedNames.List()...) || !expectedNames.HasAll(filenames.List()...) {
t.Errorf("expected %v, got %v", expectedNames.List(), filenames.List())
}
}
func makeSignerCert(t *testing.T) (string, string, string) {
certFile, _ := ioutil.TempFile("", "signer-cert.crt-")
keyFile, _ := ioutil.TempFile("", "signer-key.key-")
serialFile, _ := ioutil.TempFile("", "serial.txt-")
options := CreateSignerCertOptions{
CertFile: certFile.Name(),
KeyFile: keyFile.Name(),
SerialFile: serialFile.Name(),
ExpireDays: 365,
Name: "unit-test-signer",
Overwrite: true,
}
if err := options.Validate(nil); err != nil {
t.Errorf("unexpected error: %v", err)
}
if _, err := options.CreateSignerCert(); err != nil {
t.Errorf("unexpected error: %v", err)
}
return certFile.Name(), keyFile.Name(), serialFile.Name()
}
func executeNodeConfig(args []string) string {
configDir, _ := ioutil.TempDir("", "nodeconfig-test-")
argsToUse := make([]string, 0, 4+len(args))
argsToUse = append(argsToUse, "create-node-config")
argsToUse = append(argsToUse, "--node-dir="+configDir)
argsToUse = append(argsToUse, args...)
root := &cobra.Command{
Use: "openshift",
Short: "test",
Long: "",
Run: func(c *cobra.Command, args []string) {
c.Help()
},
}
root.AddCommand(NewCommandNodeConfig("create-node-config", "openshift admin", ioutil.Discard))
root.SetArgs(argsToUse)
root.Execute()
return configDir
}