in kinder/pkg/cluster/manager/actions/smoke-test.go [31:116]
func SmokeTest(c *status.Cluster, wait time.Duration) error {
// test are executed on the bootstrap control-plane
cp1 := c.BootstrapControlPlane()
// cleanups garbage from previous test
cleanupSmokeTest(cp1)
// Test deployments
cp1.Infof("test deployments")
if err := cp1.Command(
"kubectl",
"--kubeconfig=/etc/kubernetes/admin.conf",
"create", "deployment", "nginx", "--image=nginx:1.15.9-alpine",
).RunWithEcho(); err != nil {
return err
}
if err := waitForPodsRunning(c, cp1, wait, "nginx", 1); err != nil {
return err
}
// Test service type NodePort
cp1.Infof("test NodePort service")
if err := cp1.Command(
"kubectl",
"--kubeconfig=/etc/kubernetes/admin.conf",
"expose", "deployment", "nginx", "--port=80", "--type=NodePort",
).Run(); err != nil {
return err
}
nodePort, err := getNodePort(cp1, "nginx")
if err != nil {
return err
}
for _, n := range c.K8sNodes() {
err = waitForNodePort(c, n, 30*time.Second, nodePort)
if err != nil {
return err
}
}
podName, err := getPodName(cp1, "nginx")
if err != nil {
return err
}
// Test kubectl logs
cp1.Infof("test kubectl logs")
lines, err := cp1.Command(
"kubectl", "--kubeconfig=/etc/kubernetes/admin.conf", "logs", podName,
).RunAndCapture()
if err != nil {
return errors.Wrapf(err, "failed to run kubectl logs")
}
fmt.Printf("%d logs lines returned\n", len(lines))
// Test kubectl exec
cp1.Infof("test kubectl exec")
lines, err = cp1.Command(
"kubectl", "--kubeconfig=/etc/kubernetes/admin.conf", "exec", podName, "--", "nslookup", "kubernetes",
).RunAndCapture()
if err != nil {
return errors.Wrapf(err, "failed to run kubectl exec")
}
fmt.Printf("%d output lines returned\n", len(lines))
// Test DNS resolution
cp1.Infof("test DNS resolution")
if len(lines) < 3 || !strings.Contains(lines[3], "kubernetes.default.svc.cluster.local") {
return errors.Wrapf(err, "dns resolution error")
}
fmt.Printf("kubernetes service answers to %s\n", lines[3])
// cleanups and print final message
cleanupSmokeTest(cp1)
fmt.Printf("\nSmoke test passed!\n")
return nil
}