From c7e2b6d284f1d096c3867b48290409b6cd44466e Mon Sep 17 00:00:00 2001 From: idroz Date: Wed, 15 Jun 2022 20:49:30 +0100 Subject: [PATCH 1/2] create unit testing framework --- macpine/README.md | 16 ++++++ macpine/bootstrap.sh | 21 ++++++++ platform/host_api_test.go | 107 ++++++++++++++++++++++++++++++++++++++ test/e2e.sh | 1 + 4 files changed, 145 insertions(+) create mode 100644 macpine/README.md create mode 100644 macpine/bootstrap.sh create mode 100644 platform/host_api_test.go diff --git a/macpine/README.md b/macpine/README.md new file mode 100644 index 0000000..1d1533b --- /dev/null +++ b/macpine/README.md @@ -0,0 +1,16 @@ +# Use `macpine` to spin up bravetools testing environment on Mac + +```bash +alpine launch --image alpine_3.16.0_lxd --name bravetools --mount $PWD +alpine exec bravetools "ash /root/mnt/macpine/bootstrap.sh" +``` + +## Unit Testing + +Run Unit tests directly on the VM + +```bash +alpine ssh bravetools +cd mnt +go test -v ./... +``` \ No newline at end of file diff --git a/macpine/bootstrap.sh b/macpine/bootstrap.sh new file mode 100644 index 0000000..7b8ca3f --- /dev/null +++ b/macpine/bootstrap.sh @@ -0,0 +1,21 @@ +set -e + +cat > /etc/apk/repositories << EOF; $(echo) + +https://dl-cdn.alpinelinux.org/alpine/v$(cat /etc/alpine-release | cut -d'.' -f1,2)/main/ +https://dl-cdn.alpinelinux.org/alpine/v$(cat /etc/alpine-release | cut -d'.' -f1,2)/community/ +https://dl-cdn.alpinelinux.org/alpine/edge/testing/ + +EOF +apk add --update --no-cache go make musl-dev curl linux-headers sudo + +export GOPATH=/root/go +export PATH=${GOPATH}/bin:/usr/local/go/bin:$PATH +export GOBIN=$GOROOT/bin +mkdir -p ${GOPATH}/src ${GOPATH}/bin +export GO111MODULE=on + +go version + +cd /mnt ; make linux; cd ../ +brave init diff --git a/platform/host_api_test.go b/platform/host_api_test.go new file mode 100644 index 0000000..d112851 --- /dev/null +++ b/platform/host_api_test.go @@ -0,0 +1,107 @@ +package platform + +import ( + "testing" + + "github.com/bravetools/bravetools/shared" +) + +func Test_DeleteLocalImage(t *testing.T) { + host := *NewBraveHost() + + bravefile, err := shared.GetBravefileFromLXD("alpine/edge/amd64") + if err != nil { + t.Error("shared.GetBravefileFromLXD: ", err) + } + + err = host.BuildImage(bravefile) + if err != nil { + t.Error("host.BuildImage: ", err) + } + + err = host.DeleteLocalImage("brave-base-alpine-edge-1.0") + if err != nil { + t.Error("host.DeleteImageByName: ", err) + } + +} + +func Test_HostInfo(t *testing.T) { + host := *NewBraveHost() + backend := NewLxd(host.Settings) + + err := host.HostInfo(backend, false) + if err != nil { + t.Error("host.HostInfo: ", err) + } +} + +func Test_BuildImage(t *testing.T) { + host := *NewBraveHost() + + bravefile := *shared.NewBravefile() + bravefile.Base.Image = "alpine/edge/amd64" + bravefile.Base.Location = "public" + + bravefile.SystemPackages.Manager = "apk" + bravefile.SystemPackages.System = []string{"htop", "make"} + + runCommand := &shared.RunCommand{} + runCommand.Command = "echo" + runCommand.Args = []string{"Hello World"} + + bravefile.Run = []shared.RunCommand{*runCommand} + + bravefile.PlatformService.Name = "alpine-test" + bravefile.PlatformService.Version = "1.0" + + err := host.BuildImage(&bravefile) + if err != nil { + t.Error("host.BuildImage: ", err) + } + + err = host.DeleteLocalImage("alpine-test-1.0") + if err != nil { + t.Error("host.DeleteImageByName: ", err) + } +} + +func Test_InitUnit(t *testing.T) { + host := *NewBraveHost() + backend := NewLxd(host.Settings) + + bravefile := *shared.NewBravefile() + bravefile.Base.Image = "alpine/edge/amd64" + bravefile.Base.Location = "public" + + bravefile.SystemPackages.Manager = "apk" + bravefile.SystemPackages.System = []string{"htop", "make"} + + runCommand := &shared.RunCommand{} + runCommand.Command = "echo" + runCommand.Args = []string{"Hello World"} + + bravefile.Run = []shared.RunCommand{*runCommand} + + bravefile.PlatformService.Name = "alpine-test" + bravefile.PlatformService.Version = "1.0" + bravefile.PlatformService.Image = "alpine-test-1.0" + + bravefile.PlatformService.Resources.CPU = "1" + bravefile.PlatformService.Resources.RAM = "1GB" + + err := host.BuildImage(&bravefile) + if err != nil { + t.Error("host.BuildImage: ", err) + } + + err = host.InitUnit(backend, &bravefile) + if err != nil { + t.Error("host.InitUnit: ", err) + } + + err = host.DeleteLocalImage("alpine-test-1.0") + if err != nil { + t.Error("host.DeleteImageByName: ", err) + } +} diff --git a/test/e2e.sh b/test/e2e.sh index f5887b8..2f47075 100644 --- a/test/e2e.sh +++ b/test/e2e.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -e echo ">> Installing Bravetools" cd .. From 9f6af59e44ecdc8b0fce52260df9d2474213bd13 Mon Sep 17 00:00:00 2001 From: Szubie Date: Thu, 16 Jun 2022 13:03:04 +0100 Subject: [PATCH 2/2] Cleanup after unit deployment test. Add functions to excercise host API functions that print. --- platform/host_api_test.go | 57 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/platform/host_api_test.go b/platform/host_api_test.go index d112851..41dd679 100644 --- a/platform/host_api_test.go +++ b/platform/host_api_test.go @@ -90,6 +90,13 @@ func Test_InitUnit(t *testing.T) { bravefile.PlatformService.Resources.CPU = "1" bravefile.PlatformService.Resources.RAM = "1GB" + bravefile.PlatformService.Postdeploy.Run = []shared.RunCommand{ + { + Command: "echo", + Args: []string{"Hello World"}, + }, + } + err := host.BuildImage(&bravefile) if err != nil { t.Error("host.BuildImage: ", err) @@ -100,8 +107,58 @@ func Test_InitUnit(t *testing.T) { t.Error("host.InitUnit: ", err) } + err = host.Postdeploy(&bravefile) + if err != nil { + t.Error("host.Postdeploy: ", err) + } + err = host.DeleteLocalImage("alpine-test-1.0") if err != nil { t.Error("host.DeleteImageByName: ", err) } + + err = host.StopUnit("alpine-test", backend) + if err != nil { + t.Error("host.StopUnit: ", err) + } + + err = host.StartUnit("alpine-test", backend) + if err != nil { + t.Error("host.StartUnit: ", err) + } + + err = host.DeleteUnit("alpine-test") + if err != nil { + t.Error("host.DeleteUnit: ", err) + } +} + +func Test_ListLocalImages(t *testing.T) { + host := *NewBraveHost() + backend := NewLxd(host.Settings) + + err := host.HostInfo(backend, false) + if err != nil { + t.Error("host.HostInfo: ", err) + } + + err = host.ListLocalImages() + if err != nil { + t.Error("host.ListLocalImages: ", err) + } +} + +func Test_ListUnits(t *testing.T) { + host := *NewBraveHost() + backend := NewLxd(host.Settings) + + err := host.HostInfo(backend, false) + if err != nil { + t.Error("host.HostInfo: ", err) + } + + err = host.ListUnits(backend) + if err != nil { + t.Error("host.ListLocalImages: ", err) + } }