README ¶
Integration Tests
Integration tests should be used to test a specific functionality of k3s that exists across multiple Go packages, either via exported function calls, or more often, CLI commands. Integration tests should be used for "black box" testing.
Framework
All integration tests in TStac follow a Behavior Diven Development (BDD) style. Specifically, TStac uses Ginkgo and Gomega to drive the tests.
To generate an initial test, the command ginkgo bootstrap
can be used.
To facilitate TStac CLI testing, see tests/util/cmd.go
helper functions.
Format
All integration tests should be placed under tests/integration/<TEST_NAME>
.
All integration test files should be named: <TEST_NAME>_int_test.go
.
All integration test functions should be named: Test_Integration<TEST_NAME>
.
See the local storage test as an example.
Running
Integration tests can be run with no k3s cluster present, each test will spin up and kill the appropriate k3s server it needs.
Note: Integration tests must be run as root, prefix the commands below with sudo -E env "PATH=$PATH"
if a sudo user.
go test ./tests/integration/... -run Integration
Additionally, to generate JUnit reporting for the tests, the Ginkgo CLI is used
ginkgo --junit-report=result.xml ./tests/integration/...
Integration tests can be run on an existing single-node cluster via compile time flag, tests will skip if the server is not configured correctly.
go test -ldflags "-X 'github.com/TinyStac/tinystack/tests/integration.existingServer=True'" ./tests/integration/... -run Integration
Integration tests can also be run via a Sonobuoy plugin on an existing single-node cluster.
./scripts/build-tests-sonobuoy
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy run --plugin ./dist/artifacts/k3s-int-tests.yaml
Check the sonobuoy status and retrieve results
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy status
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy retrieve
sudo KUBECONFIG=/etc/rancher/k3s/k3s.yaml sonobuoy results <TAR_FILE_FROM_RETRIEVE>
Documentation ¶
Index ¶
- func CheckDeployments(deployments []string) error
- func FindStringInCmdAsync(scanner *bufio.Scanner, target string) bool
- func IsExistingServer() bool
- func IsRoot() bool
- func ParseNodes() ([]corev1.Node, error)
- func ParsePods(opts metav1.ListOptions) ([]corev1.Pod, error)
- func RunCommand(cmd string) (string, error)
- func ServerArgsPresent(neededArgs []string) bool
- func TStacCleanup(k3sTestLock int, dataDir string) error
- func TStacCmd(inputArgs ...string) (string, error)
- func TStacDefaultDeployments() error
- func TStacDumpLog(server *TStacServer) error
- func TStacKillServer(server *TStacServer) error
- func TStacServerArgs() []string
- func TStacTestLock() (int, error)
- type TStacServer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckDeployments ¶
CheckDeployments checks if the provided list of deployments are ready, otherwise returns an error
func IsExistingServer ¶
func IsExistingServer() bool
func ParseNodes ¶
func ServerArgsPresent ¶
ServerArgsPresent checks if the given arguments are found in the running k3s server
func TStacCleanup ¶
TStacCleanup unlocks the test-lock and attempts to cleanup networking and files leftover from an integration test. This is similar to the k3s-killall.sh script, but we dynamically generate that on install, so we don't have access to it during testing.
func TStacCmd ¶
TStacCmd launches the provided TStac command via exec. Command blocks until finished. Command output from both Stderr and Stdout is provided via string. Input can be a single string with space separated args, or multiple string args cmdEx1, err := TStacCmd("etcd-snapshot", "ls") cmdEx2, err := TStacCmd("kubectl get pods -A") cmdEx2, err := TStacCmd("kubectl", "get", "pods", "-A")
func TStacDefaultDeployments ¶
func TStacDefaultDeployments() error
TStacDefaultDeployments checks if the default deployments for TStac are ready, otherwise returns an error
func TStacDumpLog ¶
func TStacDumpLog(server *TStacServer) error
func TStacKillServer ¶
func TStacKillServer(server *TStacServer) error
TStacKillServer terminates the running TStac server and its children
func TStacServerArgs ¶
func TStacServerArgs() []string
TStacServerArgs returns the list of arguments that the k3s server launched with
func TStacTestLock ¶
Types ¶
type TStacServer ¶
type TStacServer struct {
// contains filtered or unexported fields
}
func TStacStartServer ¶
func TStacStartServer(inputArgs ...string) (*TStacServer, error)
TStacStartServer acquires an exclusive lock on a temporary file, then launches a k3s cluster with the provided arguments. Subsequent/parallel calls to this function will block until the original lock is cleared using TStacKillServer