Integration Tests

All minikube integration tests

TestDownloadOnly

makes sure the –download-only parameter in minikube start caches the appropriate images and tarballs.

TestDownloadOnlyKic

makes sure –download-only caches the docker driver images as well.

TestOffline

makes sure minikube works without internet, once the user has cached the necessary images. This test has to run after TestDownloadOnly.

TestAddons

tests addons that require no special environment in parallel

validateIngressAddon

tests the ingress addon by deploying a default nginx pod

validateRegistryAddon

tests the registry addon

validateMetricsServerAddon

tests the metrics server addon by making sure “kubectl top pods” returns a sensible result

validateHelmTillerAddon

tests the helm tiller addon by running “helm version” inside the cluster

validateOlmAddon

tests the OLM addon

validateCSIDriverAndSnapshots

tests the csi hostpath driver by creating a persistent volume, snapshotting it and restoring it.

validateGCPAuthAddon

tests the GCP Auth addon with either phony or real credentials and makes sure the files are mounted into pods correctly

TestCertOptions

makes sure minikube certs respect the –apiserver-ips and –apiserver-names parameters

TestCertExpiration

makes sure minikube can start after its profile certs have expired. It does this by configuring minikube certs to expire after 3 minutes, then waiting 3 minutes, then starting again. It also makes sure minikube prints a cert expiration warning to the user.

TestDockerFlags

makes sure the –docker-env and –docker-opt parameters are respected

TestForceSystemdFlag

tests the –force-systemd flag, as one would expect.

validateDockerSystemd

makes sure the –force-systemd flag worked with the docker container runtime

validateContainerdSystemd

makes sure the –force-systemd flag worked with the containerd container runtime

validateCrioSystemd

makes sure the –force-systemd flag worked with the cri-o container runtime

TestForceSystemdEnv

makes sure the MINIKUBE_FORCE_SYSTEMD environment variable works just as well as the –force-systemd flag

TestKVMDriverInstallOrUpdate

makes sure our docker-machine-driver-kvm2 binary can be installed properly

TestHyperKitDriverInstallOrUpdate

makes sure our docker-machine-driver-hyperkit binary can be installed properly

TestHyperkitDriverSkipUpgrade

makes sure our docker-machine-driver-hyperkit binary can be installed properly

TestErrorSpam

asserts that there are no unexpected errors displayed in minikube command outputs.

TestFunctional

are functionality tests which can safely share a profile in parallel

validateNodeLabels

checks if minikube cluster is created with correct kubernetes’s node label

Steps:

  • Get the node labels from the cluster with kubectl get nodes
  • check if the node labels matches with the expected Minikube labels: minikube.k8s.io/*

validateImageCommands

runs tests on all the minikube image commands, ex. minikube image load, minikube image list, etc.

Steps:

  • Make sure image listing works by minikube image ls
  • Make sure image building works by minikube image build
  • Make sure image loading from Docker daemon works by minikube image load --daemon
  • Make sure image saving works by minikube image load --daemon
  • Make sure image removal works by minikube image rm
  • Make sure image loading from file works by minikube image load
  • Make sure image saving to Docker daemon works by minikube image load

Skips:

  • Skips on none driver as image loading is not supported
  • Skips on GitHub Actions and macOS as this test case requires a running docker daemon

validateDockerEnv

check functionality of minikube after evaluating docker-env

Steps:

  • Run eval $(minikube docker-env) to configure current environment to use minikube’s Docker daemon
  • Run minikube status to get the minikube status
  • Make sure minikube components have status Running
  • Make sure docker-env has status in-use
  • Run eval $(minikube -p profile docker-env) and check if we are point to docker inside minikube
  • Make sure docker images hits the minikube’s Docker daemon by check if gcr.io/k8s-minikube/storage-provisioner is in the output of docker images

Skips:

  • Skips on none drive since docker-env is not supported
  • Skips on non-docker container runtime

validatePodmanEnv

check functionality of minikube after evaluating podman-env

Steps:

  • Run eval $(minikube podman-env) to configure current environment to use minikube’s Podman daemon, and minikube status to get the minikube status
  • Make sure minikube components have status Running
  • Make sure podman-env has status in-use
  • Run eval $(minikube docker-env) again and docker images to list the docker images using the minikube’s Docker daemon
  • Make sure docker images hits the minikube’s Podman daemon by check if gcr.io/k8s-minikube/storage-provisioner is in the output of docker images

Skips:

  • Skips on none drive since podman-env is not supported
  • Skips on non-docker container runtime
  • Skips on non-Linux platforms

validateStartWithProxy

makes sure minikube start respects the HTTP_PROXY environment variable

Steps:

  • Start a local HTTP proxy
  • Start minikube with the environment variable HTTP_PROXY set to the local HTTP proxy

validateStartWithCustomCerts

makes sure minikube start respects the HTTPS_PROXY environment variable and works with custom certs a proxy is started by calling the mitmdump binary in the background, then installing the certs generated by the binary mitmproxy/dump creates the proxy at localhost at port 8080 only runs on Github Actions for amd64 linux, otherwise validateStartWithProxy runs instead

validateAuditAfterStart

makes sure the audit log contains the correct logging after minikube start

Steps:

  • Read the audit log file and make sure it contains the current minikube profile name

validateSoftStart

validates that after minikube already started, a minikube start should not change the configs.

Steps:

  • The test validateStartWithProxy should have start minikube, make sure the configured node port is 8441
  • Run minikube start again as a soft start
  • Make sure the configured node port is not changed

validateKubeContext

asserts that kubectl is properly configured (race-condition prone!)

Steps:

  • Run kubectl config current-context
  • Make sure the current minikube profile name is in the output of the command

validateKubectlGetPods

asserts that kubectl get pod -A returns non-zero content

Steps:

  • Run kubectl get po -A to get all pods in the current minikube profile
  • Make sure the output is not empty and contains kube-system components

validateMinikubeKubectl

validates that the minikube kubectl command returns content

Steps:

  • Run minikube kubectl -- get pods to get the pods in the current minikube profile
  • Make sure the command doesn’t raise any error

validateMinikubeKubectlDirectCall

validates that calling minikube’s kubectl

Steps:

  • Run kubectl get pods by calling the minikube’s kubectl binary file directly
  • Make sure the command doesn’t raise any error

validateExtraConfig

verifies minikube with –extra-config works as expected

Steps:

  • The tests before this already created a profile
  • Soft-start minikube with different --extra-config command line option
  • Load the profile’s config
  • Make sure the specified --extra-config is correctly returned

validateComponentHealth

asserts that all Kubernetes components are healthy NOTE: It expects all components to be Ready, so it makes sense to run it close after only those tests that include ‘–wait=all’ start flag

Steps:

  • Run kubectl get po po -l tier=control-plane -n kube-system -o=json to get all the Kubernetes conponents
  • For each component, make sure the pod status is Running

validateStatusCmd

makes sure minikube status outputs correctly

Steps:

  • Run minikube status with custom format host:{{.Host}},kublet:{{.Kubelet}},apiserver:{{.APIServer}},kubeconfig:{{.Kubeconfig}}
  • Make sure host, kublete, apiserver and kubeconfig statuses are shown in the output
  • Run minikube status again as JSON output
  • Make sure host, kublete, apiserver and kubeconfig statuses are set in the JSON output

validateDashboardCmd

asserts that the dashboard command works

Steps:

  • Run minikube dashboard --url to start minikube dashboard and return the URL of it
  • Send a GET request to the dashboard URL
  • Make sure HTTP status OK is returned

validateDryRun

asserts that the dry-run mode quickly exits with the right code

Steps:

  • Run minikube start --dry-run --memory 250MB
  • Since the 250MB memory is less than the required 2GB, minikube should exit with an exit code ExInsufficientMemory
  • Run minikube start --dry-run
  • Make sure the command doesn’t raise any error

validateInternationalLanguage

asserts that the language used can be changed with environment variables

Steps:

  • Set environment variable LC_ALL=fr to enable minikube translation to French
  • Start minikube with memory of 250MB which is too little: minikube start --dry-run --memory 250MB
  • Make sure the dry-run output message is in French

validateCacheCmd

tests functionality of cache command (cache add, delete, list)

Steps:

  • Run minikube cache add and make sure we can add a remote image to the cache
  • Run minikube cache add and make sure we can build and add a local image to the cache
  • Run minikube cache delete and make sure we can delete an image from the cache
  • Run minikube cache list and make sure we can list the images in the cache
  • Run minikube ssh sudo crictl images and make sure we can list the images in the cache with crictl
  • Delete an image from minikube node and run minikube cache reload to make sure the image is brought back correctly

validateConfigCmd

asserts basic “config” command functionality

Steps:

  • Run minikube config set/get/unset to make sure configuration is modified correctly

validateLogsCmd

asserts basic “logs” command functionality

Steps:

  • Run minikube logs and make sure the logs contains some keywords like apiserver, Audit and Last Start

validateLogsFileCmd

asserts “logs –file” command functionality

Steps:

  • Run minikube logs --file logs.txt to save the logs to a local file
  • Make sure the logs are correctly written

validateProfileCmd

asserts “profile” command functionality

Steps:

  • Run minikube profile lis and make sure the command doesn’t fail for the non-existent profile lis
  • Run minikube profile list --output json to make sure the previous command doesn’t create a new profile
  • Run minikube profile list and make sure the profiles are correctly listed
  • Run minikube profile list -o JSON and make sure the profiles are correctly listed as JSON output

validateServiceCmd

asserts basic “service” command functionality

Steps:

  • Create a new k8s.gcr.io/echoserver deployment
  • Run minikube service list to make sure the newly created service is correctly listed in the output
  • Run minikube service with --https --url to make sure the HTTPS endpoint URL of the service is printed
  • Run minikube service with --url --format={{.IP}} to make sure the IP address of the service is printed
  • Run minikube service with a regular --url to make sure the HTTP endpoint URL of the service is printed
  • Make sure we can hit the endpoint URL with an HTTP GET request

validateAddonsCmd

asserts basic “addon” command functionality

Steps:

  • Run minikube addons list to list the addons in a tabular format
  • Make sure dashboard, ingress and ingress-dns is listed as available addons
  • Run minikube addons list -o JSON lists the addons in JSON format

validateSSHCmd

asserts basic “ssh” command functionality

Steps:

  • Run minikube ssh echo hello to make sure we can SSH into the minikube container and run an command
  • Run minikube ssh cat /etc/hostname as well to make sure the command is run inside minikube

validateCpCmd

asserts basic “cp” command functionality

Steps:

  • Run minikube cp ... to copy a file to the minikube node
  • Run minikube ssh sudo cat ... to print out the copied file within minikube
  • make sure the file is correctly copied

Skips:

  • Skips none driver since cp is not supported

validateMySQL

validates a minimalist MySQL deployment

Steps:

  • Run kubectl replace --force -f testdata/mysql/yaml
  • Wait for the mysql pod to be running
  • Run mysql -e show databases; inside the MySQL pod to verify MySQL is up and running
  • Retry with exponential backoff if failed, as mysqld first comes up without users configured. Scan for names in case of a reschedule.

Skips:

  • Skips for ARM64 architecture since it’s not supported by MySQL

validateFileSync

to check existence of the test file

Steps:

  • Test files have been synced into minikube in the previous step setupFileSync
  • Check the existence of the test file
  • Make sure the file is correctly synced

Skips:

  • Skips on none driver since SSH is not supported

validateCertSync

checks to make sure a custom cert has been copied into the minikube guest and installed correctly

Steps:

  • Check both the installed & reference certs and make sure they are symlinked

validateNotActiveRuntimeDisabled

asserts that for a given runtime, the other runtimes are disabled, for example for containerd runtime, docker and crio needs to be not running

Steps:

  • For each container runtime, run minikube ssh sudo systemctl is-active ... and make sure the other container runtimes are not running

validateUpdateContextCmd

asserts basic “update-context” command functionality

Steps:

  • Run minikube update-context
  • Make sure the context has been correctly updated by checking the command output

validateVersionCmd

asserts minikube version command works fine for both –short and –components

Steps:

  • Run minikube version --short and make sure the returned version is a valid semver
  • Run minikube version --components and make sure the component versions are returned

validateMountCmd

verifies the minikube mount command works properly

validatePersistentVolumeClaim

makes sure PVCs work properly

validateTunnelCmd

makes sure the minikube tunnel command works as expected

validateTunnelStart

starts minikube tunnel

validateServiceStable

starts nginx pod, nginx service and waits nginx having loadbalancer ingress IP

validateAccessDirect

validates if the test service can be accessed with LoadBalancer IP from host

validateDNSDig

validates if the DNS forwarding works by dig command DNS lookup NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental

validateDNSDscacheutil

validates if the DNS forwarding works by dscacheutil command DNS lookup NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental

validateAccessDNS

validates if the test service can be accessed with DNS forwarding from host NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental

validateTunnelDelete

stops minikube tunnel

TestGuestEnvironment

verifies files and packges installed inside minikube ISO/Base image

TestGvisorAddon

tests the functionality of the gVisor addon

TestJSONOutput

makes sure json output works properly for the start, pause, unpause, and stop commands

validateDistinctCurrentSteps

validateDistinctCurrentSteps makes sure each step has a distinct step number

validateIncreasingCurrentSteps

verifies that for a successful minikube start, ‘current step’ should be increasing

TestErrorJSONOutput

makes sure json output can print errors properly

TestKicCustomNetwork

verifies the docker driver works with a custom network

TestKicExistingNetwork

verifies the docker driver and run with an existing network

TestingKicBaseImage

will return true if the integraiton test is running against a passed –base-image flag

TestMountStart

tests using the mount command on start

validateStartWithMount

starts a cluster with mount enabled

validateMount

checks if the cluster has a folder mounted

validateMountStop

stops a cluster

validateRestart

restarts a cluster

TestMultiNode

tests all multi node cluster functionality

validateMultiNodeStart

makes sure a 2 node cluster can start

validateAddNodeToMultiNode

uses the minikube node add command to add a node to an existing cluster

validateProfileListWithMultiNode

make sure minikube profile list outputs correct with multinode clusters

validateCopyFileWithMultiNode

validateProfileListWithMultiNode make sure minikube profile list outputs correct with multinode clusters

validateStopRunningNode

tests the minikube node stop command

validateStartNodeAfterStop

tests the minikube node start command on an existing stopped node

validateRestartKeepsNodes

restarts minikube cluster and checks if the reported node list is unchanged

validateStopMultiNodeCluster

runs minikube stop on a multinode cluster

validateRestartMultiNodeCluster

verifies a soft restart on a multinode cluster works

validateDeleteNodeFromMultiNode

tests the minikube node delete command

validateNameConflict

tests that the node name verification works as expected

validateDeployAppToMultiNode

deploys an app to a multinode cluster and makes sure all nodes can serve traffic

validatePodsPingHost

uses app previously deplyed by validateDeployAppToMultiNode to verify its pods, located on different nodes, can resolve “host.minikube.internal”.

TestNetworkPlugins

tests all supported CNI options Options tested: kubenet, bridge, flannel, kindnet, calico, cilium Flags tested: enable-default-cni (legacy), false (CNI off), auto-detection

validateFalseCNI

checks that minikube returns and error if container runtime is “containerd” or “crio” and –cni=false

validateHairpinMode

makes sure the hairpinning (https://en.wikipedia.org/wiki/Hairpinning) is correctly configured for given CNI try to access deployment/netcat pod using external, obtained from ‘netcat’ service dns resolution, IP address should fail if hairpinMode is off

TestChangeNoneUser

tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected and changes the minikube file permissions from root to the correct user.

TestPause

tests minikube pause functionality

validateFreshStart

just starts a new minikube cluster

validateStartNoReconfigure

validates that starting a running cluster does not invoke reconfiguration

validatePause

runs minikube pause

validateUnpause

runs minikube unpause

validateDelete

deletes the unpaused cluster

validateVerifyDeleted

makes sure no left over left after deleting a profile such as containers or volumes

validateStatus

makes sure paused clusters show up in minikube status correctly

TestPreload

verifies the preload tarballs get pulled in properly by minikube

TestScheduledStopWindows

tests the schedule stop functionality on Windows

TestScheduledStopUnix

tests the schedule stop functionality on Unix

TestSkaffold

makes sure skaffold run can be run with minikube

TestStartStop

tests starting, stopping and restarting a minikube clusters with various Kubernetes versions and configurations The oldest supported, newest supported and default Kubernetes versions are always tested.

validateFirstStart

runs the initial minikube start

validateDeploying

deploys an app the minikube cluster

validateEnableAddonWhileActive

makes sure addons can be enabled while cluster is active.

validateStop

tests minikube stop

validateEnableAddonAfterStop

makes sure addons can be enabled on a stopped cluster

validateSecondStart

verifies that starting a stopped cluster works

validateAppExistsAfterStop

verifies that a user’s app will not vanish after a minikube stop

validateAddonAfterStop

validates that an addon which was enabled when minikube is stopped will be enabled and working..

validateKubernetesImages

verifies that a restarted cluster contains all the necessary images

validatePauseAfterStart

verifies that minikube pause works

TestInsufficientStorage

makes sure minikube status displays the correct info if there is insufficient disk space on the machine

TestRunningBinaryUpgrade

upgrades a running legacy cluster to minikube at HEAD

TestStoppedBinaryUpgrade

starts a legacy minikube, stops it, and then upgrades to minikube at HEAD

TestKubernetesUpgrade

upgrades Kubernetes from oldest to newest

TestMissingContainerUpgrade

tests a Docker upgrade where the underlying container is missing

Last modified October 15, 2021: update docs (2c1180409)