Skip to content

Commit

Permalink
Refactor e2e test framework
Browse files Browse the repository at this point in the history
This patch refactors the test framework for better e2e usage:
- Introduces TestSupport type to manage all testing
- TestSupport handles the creation of resources
- TestSupport also manage the start/stop of SSH server and Kind instance
- TestSupport ensures that those resources are removed clean and shutdown of services

The test framework uses a static pre-generated SSH keypair which is copied to a
known location ~/.crashd-testing/randomname for each package that uses the TestSupport
framework to manage resources.

Signed-off-by: Vladimir Vivien <vivienv@vmware.com>
  • Loading branch information
srm09 authored and vladimirvivien committed Aug 19, 2020
1 parent e8d19d5 commit da64801
Show file tree
Hide file tree
Showing 27 changed files with 759 additions and 634 deletions.
3 changes: 0 additions & 3 deletions .github/workflows/compile-test.yaml
Expand Up @@ -20,8 +20,5 @@ jobs:
sudo ufw allow 2200:2300/tcp
sudo ufw enable
sudo ufw status verbose
mkdir -p ~/.ssh
chmod 765 ~/.ssh
cp testing/keys/* ~/.ssh/
GO111MODULE=on go get sigs.k8s.io/kind@v0.7.0
GO111MODULE=on go test -timeout 600s -v -p 1 ./...
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -4,3 +4,4 @@
dist
.idea
.DS_Store
.testing
4 changes: 2 additions & 2 deletions examples/host-list-provider.crsh
Expand Up @@ -11,9 +11,9 @@
# setup and configuration
ssh=ssh_config(
username=os.username,
private_key_path="{0}/.ssh/id_rsa".format(os.home),
private_key_path=args.ssh_pk_path,
port=args.ssh_port,
max_retries=5,
max_retries=50,
)

provider=host_list_provider(hosts=["localhost", "127.0.0.1"], ssh_config=ssh)
Expand Down
4 changes: 2 additions & 2 deletions examples/kube-nodes-provider.crsh
Expand Up @@ -11,9 +11,9 @@
# setup and configuration
ssh=ssh_config(
username=os.username,
private_key_path="{0}/.ssh/id_rsa".format(os.home),
private_key_path=args.ssh_pk_path,
port=args.ssh_port,
max_retries=5,
max_retries=50,
)

hosts=resources(
Expand Down
76 changes: 27 additions & 49 deletions exec/executor_test.go
Expand Up @@ -4,72 +4,46 @@
package exec

import (
"io/ioutil"
"os"
"strings"
"testing"
"time"

"github.com/sirupsen/logrus"

testcrashd "github.com/vmware-tanzu/crash-diagnostics/testing"
)

var (
testSSHPort = testcrashd.NextPortValue()
testServerName = testcrashd.NextResourceName()
testClusterName = testcrashd.NextResourceName()
getTestKubeConf func() string
support *testcrashd.TestSupport
)

func TestMain(m *testing.M) {
testcrashd.Init()

sshSvr := testcrashd.NewSSHServer(testServerName, testSSHPort)
logrus.Debug("Attempting to start SSH server")
if err := sshSvr.Start(); err != nil {
logrus.Error(err)
os.Exit(1)
test, err := testcrashd.Init()
if err != nil {
logrus.Fatal(err)
}
support = test

kind := testcrashd.NewKindCluster("../testing/kind-cluster-docker.yaml", testClusterName)
if err := kind.Create(); err != nil {
logrus.Error(err)
os.Exit(1)
if err := support.SetupSSHServer(); err != nil {
logrus.Fatal(err)
}

// attempt to wait for cluster up
time.Sleep(time.Second * 10)
if err := support.SetupKindCluster(); err != nil {
logrus.Fatal(err)
}

tmpFile, err := ioutil.TempFile(os.TempDir(), testClusterName)
_, err = support.SetupKindKubeConfig()
if err != nil {
logrus.Error(err)
os.Exit(1)
logrus.Fatal(err)
}

defer func() {
logrus.Debug("Stopping SSH server...")
if err := sshSvr.Stop(); err != nil {
logrus.Error(err)
os.Exit(1)
}

if err := kind.Destroy(); err != nil {
logrus.Error(err)
os.Exit(1)
}
}()

getTestKubeConf = func() string {
return tmpFile.Name()
}
result := m.Run()

if err := kind.MakeKubeConfigFile(getTestKubeConf()); err != nil {
logrus.Error(err)
os.Exit(1)
if err := support.TearDown(); err != nil {
logrus.Fatal(err)
}

os.Exit(m.Run())
os.Exit(result)
}

func TestKindScript(t *testing.T) {
Expand All @@ -81,41 +55,45 @@ func TestKindScript(t *testing.T) {
{
name: "api objects",
scriptPath: "../examples/kind-api-objects.crsh",
args: ArgMap{"kubecfg": getTestKubeConf()},
args: ArgMap{"kubecfg": support.KindKubeConfigFile()},
},
{
name: "pod logs",
scriptPath: "../examples/pod-logs.crsh",
args: ArgMap{"kubecfg": getTestKubeConf()},
args: ArgMap{"kubecfg": support.KindKubeConfigFile()},
},
{
name: "script with args",
scriptPath: "../examples/script-args.crsh",
args: ArgMap{
"workdir": "/tmp/crashargs",
"kubecfg": getTestKubeConf(),
"kubecfg": support.KindKubeConfigFile(),
"output": "/tmp/craslogs.tar.gz",
},
},
{
name: "host-list provider",
scriptPath: "../examples/host-list-provider.crsh",
args: ArgMap{"kubecfg": getTestKubeConf(), "ssh_port": testSSHPort},
args: ArgMap{
"kubecfg": support.KindKubeConfigFile(),
"ssh_pk_path": support.PrivateKeyPath(),
"ssh_port": support.PortValue(),
},
},
//{
// name: "kube-nodes provider",
// scriptPath: "../examples/kube-nodes-provider.crsh",
// args: ArgMap{
// "kubecfg": getTestKubeConf(),
// "ssh_port": testSSHPort,
// "username": testcrashd.GetSSHUsername(),
// "key_path": testcrashd.GetSSHPrivateKey(),
// "username": getUsername(),
// "key_path": getPrivateKey(),
// },
//},
{
name: "kind-capi-bootstrap",
scriptPath: "../examples/kind-capi-bootstrap.crsh",
args: ArgMap{"cluster_name": testClusterName},
args: ArgMap{"cluster_name": support.ResourceName()},
},
}

Expand Down
42 changes: 42 additions & 0 deletions k8s/main_test.go
@@ -0,0 +1,42 @@
// Copyright (c) 2019 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package k8s

import (
"os"
"testing"

"github.com/sirupsen/logrus"

testcrashd "github.com/vmware-tanzu/crash-diagnostics/testing"
)

var (
support *testcrashd.TestSupport
)

func TestMain(m *testing.M) {
test, err := testcrashd.Init()
if err != nil {
logrus.Fatal("failed to initialize test support:", err)
}

support = test

if err := support.SetupKindCluster(); err != nil {
logrus.Fatal(err)
}
_, err = support.SetupKindKubeConfig()
if err != nil {
logrus.Fatal(err)
}

result := m.Run()

if err := support.TearDown(); err != nil {
logrus.Fatal(err)
}

os.Exit(result)
}
157 changes: 0 additions & 157 deletions ssh/client.go

This file was deleted.

0 comments on commit da64801

Please sign in to comment.