Commit dd65505e authored by Derek Nola's avatar Derek Nola

Make (Docker) RunOnNode a method

parent 9fe819ee
...@@ -59,9 +59,9 @@ var _ = Describe("Basic Tests", Ordered, func() { ...@@ -59,9 +59,9 @@ var _ = Describe("Basic Tests", Ordered, func() {
Context("Verify Binaries and Images", func() { Context("Verify Binaries and Images", func() {
It("has valid bundled binaries", func() { It("has valid bundled binaries", func() {
for _, server := range config.Servers { for _, server := range config.Servers {
Expect(tester.VerifyValidVersion(server.Name, "kubectl")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "kubectl")).To(Succeed())
Expect(tester.VerifyValidVersion(server.Name, "ctr")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "ctr")).To(Succeed())
Expect(tester.VerifyValidVersion(server.Name, "crictl")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "crictl")).To(Succeed())
} }
}) })
It("has valid airgap images", func() { It("has valid airgap images", func() {
......
...@@ -37,7 +37,7 @@ var _ = Describe("Boostrap Token Tests", Ordered, func() { ...@@ -37,7 +37,7 @@ var _ = Describe("Boostrap Token Tests", Ordered, func() {
var newSecret string var newSecret string
It("creates a bootstrap token", func() { It("creates a bootstrap token", func() {
var err error var err error
newSecret, err = tester.RunCmdOnDocker(config.Servers[0].Name, "k3s token create --ttl=5m --description=Test") newSecret, err = config.Servers[0].RunCmdOnNode("k3s token create --ttl=5m --description=Test")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(newSecret).NotTo(BeEmpty()) Expect(newSecret).NotTo(BeEmpty())
}) })
......
...@@ -84,7 +84,7 @@ func lookLayers(node, layer string) error { ...@@ -84,7 +84,7 @@ func lookLayers(node, layer string) error {
layersNum := 0 layersNum := 0
var err error var err error
for layersNum = 0; layersNum < 100; layersNum++ { for layersNum = 0; layersNum < 100; layersNum++ {
// We use RunCommand instead of RunCmdOnDocker because we pipe the output to jq // We use RunCommand instead of RunCmdOnNode because we pipe the output to jq
cmd := fmt.Sprintf("docker exec -i %s ctr --namespace=k8s.io snapshot --snapshotter=stargz info %s | jq -r '.Parent'", node, layer) cmd := fmt.Sprintf("docker exec -i %s ctr --namespace=k8s.io snapshot --snapshotter=stargz info %s | jq -r '.Parent'", node, layer)
layer, err = tester.RunCommand(cmd) layer, err = tester.RunCommand(cmd)
if err != nil { if err != nil {
......
...@@ -67,7 +67,7 @@ var _ = Describe("Skew Tests", Ordered, func() { ...@@ -67,7 +67,7 @@ var _ = Describe("Skew Tests", Ordered, func() {
}) })
It("should match respective versions", func() { It("should match respective versions", func() {
for _, server := range config.Servers { for _, server := range config.Servers {
out, err := tester.RunCmdOnDocker(server.Name, "k3s --version") out, err := server.RunCmdOnNode("k3s --version")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
// The k3s image is in the format rancher/k3s:v1.20.0-k3s1 // The k3s image is in the format rancher/k3s:v1.20.0-k3s1
cVersion := strings.Split(*k3sImage, ":")[1] cVersion := strings.Split(*k3sImage, ":")[1]
...@@ -76,7 +76,7 @@ var _ = Describe("Skew Tests", Ordered, func() { ...@@ -76,7 +76,7 @@ var _ = Describe("Skew Tests", Ordered, func() {
Expect(out).To(ContainSubstring(cVersion)) Expect(out).To(ContainSubstring(cVersion))
} }
for _, agent := range config.Agents { for _, agent := range config.Agents {
Expect(tester.RunCmdOnDocker(agent.Name, "k3s --version")). Expect(agent.RunCmdOnNode("k3s --version")).
To(ContainSubstring(strings.Replace(lastMinorVersion, "-", "+", 1))) To(ContainSubstring(strings.Replace(lastMinorVersion, "-", "+", 1)))
} }
}) })
...@@ -115,11 +115,11 @@ var _ = Describe("Skew Tests", Ordered, func() { ...@@ -115,11 +115,11 @@ var _ = Describe("Skew Tests", Ordered, func() {
}, "60s", "5s").Should(Succeed()) }, "60s", "5s").Should(Succeed())
}) })
It("should match respective versions", func() { It("should match respective versions", func() {
out, err := tester.RunCmdOnDocker(config.Servers[0].Name, "k3s --version") out, err := config.Servers[0].RunCmdOnNode("k3s --version")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(out).To(ContainSubstring(strings.Replace(lastMinorVersion, "-", "+", 1))) Expect(out).To(ContainSubstring(strings.Replace(lastMinorVersion, "-", "+", 1)))
for _, server := range config.Servers[1:] { for _, server := range config.Servers[1:] {
out, err := tester.RunCmdOnDocker(server.Name, "k3s --version") out, err := server.RunCmdOnNode("k3s --version")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
// The k3s image is in the format rancher/k3s:v1.20.0-k3s1-amd64 // The k3s image is in the format rancher/k3s:v1.20.0-k3s1-amd64
cVersion := strings.Split(*k3sImage, ":")[1] cVersion := strings.Split(*k3sImage, ":")[1]
......
...@@ -32,21 +32,20 @@ type TestConfig struct { ...@@ -32,21 +32,20 @@ type TestConfig struct {
NumAgents int NumAgents int
NeedRestart bool NeedRestart bool
Servers []Server Servers []Server
Agents []Agent Agents []DockerNode
ServerYaml string ServerYaml string
AgentYaml string AgentYaml string
} }
type Server struct { type DockerNode struct {
Name string Name string
Port int
IP string IP string
URL string
} }
type Agent struct { type Server struct {
Name string DockerNode
IP string Port int
URL string
} }
// NewTestConfig initializes the test environment and returns the configuration // NewTestConfig initializes the test environment and returns the configuration
...@@ -140,6 +139,12 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error { ...@@ -140,6 +139,12 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
joinOrStart = fmt.Sprintf("--server %s", config.Servers[0].URL) joinOrStart = fmt.Sprintf("--server %s", config.Servers[0].URL)
} }
} }
newServer := Server{
DockerNode: DockerNode{
Name: name,
},
Port: port,
}
// If we need restarts, we use the systemd-node container, volume mount the k3s binary // If we need restarts, we use the systemd-node container, volume mount the k3s binary
// and start the server using the install script // and start the server using the install script
...@@ -167,7 +172,7 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error { ...@@ -167,7 +172,7 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
// The pipe requires that we use sh -c with "" to run the command // The pipe requires that we use sh -c with "" to run the command
sCmd := fmt.Sprintf("/bin/sh -c \"curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='%s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -\"", sCmd := fmt.Sprintf("/bin/sh -c \"curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='%s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -\"",
joinOrStart+" "+os.Getenv(fmt.Sprintf("SERVER_%d_ARGS", i))) joinOrStart+" "+os.Getenv(fmt.Sprintf("SERVER_%d_ARGS", i)))
if out, err := RunCmdOnDocker(name, sCmd); err != nil { if out, err := newServer.RunCmdOnNode(sCmd); err != nil {
return fmt.Errorf("failed to start server: %s: %v", out, err) return fmt.Errorf("failed to start server: %s: %v", out, err)
} }
} else { } else {
...@@ -199,13 +204,9 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error { ...@@ -199,13 +204,9 @@ func (config *TestConfig) ProvisionServers(numOfServers int) error {
ip := strings.TrimSpace(ipOutput) ip := strings.TrimSpace(ipOutput)
url := fmt.Sprintf("https://%s:6443", ip) url := fmt.Sprintf("https://%s:6443", ip)
newServer.URL = url
config.Servers = append(config.Servers, Server{ newServer.IP = ip
Name: name, config.Servers = append(config.Servers, newServer)
Port: port,
IP: ip,
URL: url,
})
fmt.Printf("Started %s @ %s\n", name, url) fmt.Printf("Started %s @ %s\n", name, url)
...@@ -235,6 +236,9 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error { ...@@ -235,6 +236,9 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
name := fmt.Sprintf("k3s-agent-%d-%s", i, strings.ToLower(testID)) name := fmt.Sprintf("k3s-agent-%d-%s", i, strings.ToLower(testID))
agentInstanceArgs := fmt.Sprintf("AGENT_%d_ARGS", i) agentInstanceArgs := fmt.Sprintf("AGENT_%d_ARGS", i)
newAgent := DockerNode{
Name: name,
}
if config.NeedRestart { if config.NeedRestart {
dRun := strings.Join([]string{"docker run -d", dRun := strings.Join([]string{"docker run -d",
...@@ -257,7 +261,8 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error { ...@@ -257,7 +261,8 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
// The pipe requires that we use sh -c with "" to run the command // The pipe requires that we use sh -c with "" to run the command
sCmd := fmt.Sprintf("/bin/sh -c \"curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='agent %s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -\"", sCmd := fmt.Sprintf("/bin/sh -c \"curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='agent %s' INSTALL_K3S_SKIP_DOWNLOAD=true sh -\"",
os.Getenv(agentInstanceArgs)) os.Getenv(agentInstanceArgs))
if out, err := RunCmdOnDocker(name, sCmd); err != nil {
if out, err := newAgent.RunCmdOnNode(sCmd); err != nil {
return fmt.Errorf("failed to start server: %s: %v", out, err) return fmt.Errorf("failed to start server: %s: %v", out, err)
} }
} else { } else {
...@@ -285,11 +290,9 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error { ...@@ -285,11 +290,9 @@ func (config *TestConfig) ProvisionAgents(numOfAgents int) error {
return err return err
} }
ip := strings.TrimSpace(ipOutput) ip := strings.TrimSpace(ipOutput)
newAgent.IP = ip
config.Agents = append(config.Agents, newAgent)
config.Agents = append(config.Agents, Agent{
Name: name,
IP: ip,
})
fmt.Printf("Started %s\n", name) fmt.Printf("Started %s\n", name)
return nil return nil
}) })
...@@ -385,9 +388,9 @@ func copyAndModifyKubeconfig(config *TestConfig) error { ...@@ -385,9 +388,9 @@ func copyAndModifyKubeconfig(config *TestConfig) error {
return nil return nil
} }
// RunCmdOnDocker runs a command on a docker container // RunCmdOnNode runs a command on a docker container
func RunCmdOnDocker(container, cmd string) (string, error) { func (node DockerNode) RunCmdOnNode(cmd string) (string, error) {
dCmd := fmt.Sprintf("docker exec %s %s", container, cmd) dCmd := fmt.Sprintf("docker exec %s %s", node.Name, cmd)
return RunCommand(dCmd) return RunCommand(dCmd)
} }
...@@ -425,8 +428,8 @@ func getEnvOrDefault(key, defaultValue string) string { ...@@ -425,8 +428,8 @@ func getEnvOrDefault(key, defaultValue string) string {
} }
// VerifyValidVersion checks for invalid version strings // VerifyValidVersion checks for invalid version strings
func VerifyValidVersion(container string, binary string) error { func VerifyValidVersion(node Server, binary string) error {
output, err := RunCmdOnDocker(container, binary+" version") output, err := node.RunCmdOnNode(binary + " version")
if err != nil { if err != nil {
return err return err
} }
......
package main package upgrade
import ( import (
"flag" "flag"
...@@ -81,7 +81,7 @@ var _ = Describe("Upgrade Tests", Ordered, func() { ...@@ -81,7 +81,7 @@ var _ = Describe("Upgrade Tests", Ordered, func() {
}) })
It("should confirm latest version", func() { It("should confirm latest version", func() {
for _, server := range config.Servers { for _, server := range config.Servers {
out, err := tester.RunCmdOnDocker(server.Name, "k3s --version") out, err := server.RunCmdOnNode("k3s --version")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
Expect(out).To(ContainSubstring(strings.Replace(latestVersion, "-", "+", 1))) Expect(out).To(ContainSubstring(strings.Replace(latestVersion, "-", "+", 1)))
} }
...@@ -127,11 +127,11 @@ var _ = Describe("Upgrade Tests", Ordered, func() { ...@@ -127,11 +127,11 @@ var _ = Describe("Upgrade Tests", Ordered, func() {
}) })
It("should confirm commit version", func() { It("should confirm commit version", func() {
for _, server := range config.Servers { for _, server := range config.Servers {
Expect(tester.VerifyValidVersion(server.Name, "kubectl")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "kubectl")).To(Succeed())
Expect(tester.VerifyValidVersion(server.Name, "ctr")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "ctr")).To(Succeed())
Expect(tester.VerifyValidVersion(server.Name, "crictl")).To(Succeed()) Expect(tester.VerifyValidVersion(server, "crictl")).To(Succeed())
out, err := tester.RunCmdOnDocker(server.Name, "k3s --version") out, err := server.RunCmdOnNode("k3s --version")
Expect(err).NotTo(HaveOccurred()) Expect(err).NotTo(HaveOccurred())
cVersion := strings.Split(*k3sImage, ":")[1] cVersion := strings.Split(*k3sImage, ":")[1]
cVersion = strings.Replace(cVersion, "-amd64", "", 1) cVersion = strings.Replace(cVersion, "-amd64", "", 1)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment