func SmokeTest()

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
}