mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-10-01 01:36:09 -04:00
bazel: migrate all integration tests (and retire CMakeLists.txt)
This commit is contained in:
parent
a87fd7607f
commit
e113253262
19
.github/workflows/test-integration.yml
vendored
19
.github/workflows/test-integration.yml
vendored
@ -29,23 +29,6 @@ jobs:
|
||||
with:
|
||||
ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }}
|
||||
|
||||
- name: Setup Go environment
|
||||
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
|
||||
with:
|
||||
go-version: "1.21.5"
|
||||
cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: sudo apt-get update && sudo apt-get install -y libcryptsetup12 libcryptsetup-dev
|
||||
|
||||
- name: Create and populate build folder
|
||||
run: mkdir build && cd build && cmake ..
|
||||
|
||||
# Runs all test targets starting with "integration-"
|
||||
- name: CMake-based Integration Tests
|
||||
working-directory: build
|
||||
run: ctest -R integration-
|
||||
|
||||
- name: Setup bazel
|
||||
uses: ./.github/actions/setup_bazel_nix
|
||||
with:
|
||||
@ -55,4 +38,4 @@ jobs:
|
||||
- name: Integration Tests
|
||||
env:
|
||||
TMPDIR: ${{ runner.temp }}
|
||||
run: bazel test //... --test_output=errors --config=nostamp --config=integration-only --remote_download_minimal
|
||||
run: sudo -E "PATH=$PATH" bazel test //... --config=nostamp --remote_download_minimal --config=integration --spawn_strategy=standalone
|
||||
|
@ -1,8 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.11)
|
||||
project(constellation LANGUAGES C)
|
||||
|
||||
enable_testing()
|
||||
|
||||
# TODO(malt3): Remove this once every integration test is migrated to Bazel
|
||||
add_test(NAME integration-csi COMMAND bash -c "go test -tags integration -c ./test/ && sudo ./test.test -test.v" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/csi)
|
||||
add_test(NAME integration-dm COMMAND bash -c "go test -tags integration -c ./test/ && sudo ./test.test -test.v" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/disk-mapper/internal)
|
@ -76,6 +76,21 @@ nixpkgs_package(
|
||||
repository = "@nixpkgs",
|
||||
)
|
||||
|
||||
nixpkgs_package(
|
||||
name = "util-linux",
|
||||
repository = "@nixpkgs",
|
||||
)
|
||||
|
||||
nixpkgs_package(
|
||||
name = "coreutils",
|
||||
repository = "@nixpkgs",
|
||||
)
|
||||
|
||||
nixpkgs_package(
|
||||
name = "e2fsprogs",
|
||||
repository = "@nixpkgs",
|
||||
)
|
||||
|
||||
load("//nix/cc:nixpkgs_cc_libraries.bzl", "nixpkgs_cc_library_deps")
|
||||
|
||||
nixpkgs_cc_library_deps()
|
||||
|
@ -3,19 +3,51 @@ load("//bazel/go:go_test.bzl", "go_test")
|
||||
go_test(
|
||||
name = "test_test",
|
||||
srcs = ["mount_integration_test.go"],
|
||||
count = 1,
|
||||
# tool dependencies come from the test code itself (dd, rm, cp)
|
||||
# and from github.com/kubernetes/mount-utils/mount_linux.go
|
||||
data = [
|
||||
"@coreutils//:bin/cp",
|
||||
"@coreutils//:bin/dd",
|
||||
"@coreutils//:bin/rm",
|
||||
"@e2fsprogs//:bin/fsck.ext4",
|
||||
"@e2fsprogs//:bin/mkfs.ext4",
|
||||
"@util-linux//:bin/blkid",
|
||||
"@util-linux//:bin/fsck",
|
||||
"@util-linux//:bin/mount",
|
||||
"@util-linux//:bin/umount",
|
||||
],
|
||||
env = {
|
||||
"BLKID": "$(rlocationpath @util-linux//:bin/blkid)",
|
||||
"CP": "$(rlocationpath @coreutils//:bin/cp)",
|
||||
"DD": "$(rlocationpath @coreutils//:bin/dd)",
|
||||
"FSCK": "$(rlocationpath @util-linux//:bin/fsck)",
|
||||
"FSCK_EXT4": "$(rlocationpath @e2fsprogs//:bin/fsck.ext4)",
|
||||
"MKFS_EXT4": "$(rlocationpath @e2fsprogs//:bin/mkfs.ext4)",
|
||||
"MOUNT": "$(rlocationpath @util-linux//:bin/mount)",
|
||||
"RM": "$(rlocationpath @coreutils//:bin/rm)",
|
||||
"UMOUNT": "$(rlocationpath @util-linux//:bin/umount)",
|
||||
},
|
||||
# keep
|
||||
tags = ["manual"],
|
||||
tags = [
|
||||
"integration",
|
||||
"local",
|
||||
"no-sandbox",
|
||||
],
|
||||
target_compatible_with = ["@platforms//os:linux"],
|
||||
deps = select({
|
||||
"@io_bazel_rules_go//go/platform:android": [
|
||||
"//csi/cryptmapper",
|
||||
"@com_github_stretchr_testify//assert",
|
||||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
],
|
||||
"@io_bazel_rules_go//go/platform:linux": [
|
||||
"//csi/cryptmapper",
|
||||
"@com_github_stretchr_testify//assert",
|
||||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
|
@ -13,9 +13,13 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"testing"
|
||||
|
||||
"github.com/bazelbuild/rules_go/go/runfiles"
|
||||
"github.com/edgelesssys/constellation/v2/csi/cryptmapper"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
@ -27,14 +31,40 @@ const (
|
||||
deviceName string = "testDeviceName"
|
||||
)
|
||||
|
||||
var toolsEnvs []string = []string{"CP", "DD", "RM", "FSCK_EXT4", "MKFS_EXT4", "BLKID", "FSCK", "MOUNT", "UMOUNT"}
|
||||
|
||||
// addToolsToPATH is used to update the PATH to contain necessary tool binaries for
|
||||
// coreutils, util-linux and ext4.
|
||||
func addToolsToPATH() error {
|
||||
path := ":" + os.Getenv("PATH") + ":"
|
||||
for _, tool := range toolsEnvs {
|
||||
toolPath := os.Getenv(tool)
|
||||
if toolPath == "" {
|
||||
continue
|
||||
}
|
||||
toolPath, err := runfiles.Rlocation(toolPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pathComponent := filepath.Dir(toolPath)
|
||||
if strings.Contains(path, ":"+pathComponent+":") {
|
||||
continue
|
||||
}
|
||||
path = ":" + pathComponent + path
|
||||
}
|
||||
path = strings.Trim(path, ":")
|
||||
os.Setenv("PATH", path)
|
||||
return nil
|
||||
}
|
||||
|
||||
func setup(devicePath string) {
|
||||
if err := exec.Command("/bin/dd", "if=/dev/zero", fmt.Sprintf("of=%s", devicePath), "bs=64M", "count=1").Run(); err != nil {
|
||||
if err := exec.Command("dd", "if=/dev/zero", fmt.Sprintf("of=%s", devicePath), "bs=64M", "count=1").Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func teardown(devicePath string) {
|
||||
if err := exec.Command("/bin/rm", "-f", devicePath).Run(); err != nil {
|
||||
if err := exec.Command("rm", "-f", devicePath).Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
@ -44,16 +74,22 @@ func cp(source, target string) error {
|
||||
}
|
||||
|
||||
func resize(devicePath string) {
|
||||
if err := exec.Command("/bin/dd", "if=/dev/zero", fmt.Sprintf("of=%s", devicePath), "bs=32M", "count=1", "oflag=append", "conv=notrunc").Run(); err != nil {
|
||||
if err := exec.Command("dd", "if=/dev/zero", fmt.Sprintf("of=%s", devicePath), "bs=32M", "count=1", "oflag=append", "conv=notrunc").Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
// try to become root (best effort)
|
||||
_ = syscall.Setuid(0)
|
||||
if os.Getuid() != 0 {
|
||||
fmt.Printf("This test suite requires root privileges, as libcryptsetup uses the kernel's device mapper.\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := addToolsToPATH(); err != nil {
|
||||
fmt.Printf("Failed to add tools to PATH: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
goleak.VerifyTestMain(m)
|
||||
|
||||
|
@ -6,8 +6,21 @@ go_test(
|
||||
"benchmark_test.go",
|
||||
"integration_test.go",
|
||||
],
|
||||
data = [
|
||||
"@coreutils//:bin/dd",
|
||||
"@coreutils//:bin/rm",
|
||||
],
|
||||
env = {
|
||||
"DD": "$(rlocationpath @coreutils//:bin/dd)",
|
||||
"RM": "$(rlocationpath @coreutils//:bin/rm)",
|
||||
},
|
||||
# keep
|
||||
tags = ["manual"],
|
||||
tags = [
|
||||
"integration",
|
||||
"local",
|
||||
"no-sandbox",
|
||||
],
|
||||
target_compatible_with = ["@platforms//os:linux"],
|
||||
deps = select({
|
||||
"@io_bazel_rules_go//go/platform:android": [
|
||||
"//disk-mapper/internal/diskencryption",
|
||||
@ -16,6 +29,7 @@ go_test(
|
||||
"@com_github_martinjungblut_go_cryptsetup//:go-cryptsetup",
|
||||
"@com_github_stretchr_testify//assert",
|
||||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
"@org_uber_go_zap//zapcore",
|
||||
],
|
||||
@ -26,6 +40,7 @@ go_test(
|
||||
"@com_github_martinjungblut_go_cryptsetup//:go-cryptsetup",
|
||||
"@com_github_stretchr_testify//assert",
|
||||
"@com_github_stretchr_testify//require",
|
||||
"@io_bazel_rules_go//go/runfiles:go_default_library",
|
||||
"@org_uber_go_goleak//:goleak",
|
||||
"@org_uber_go_zap//zapcore",
|
||||
],
|
||||
|
@ -14,8 +14,12 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
|
||||
"github.com/bazelbuild/rules_go/go/runfiles"
|
||||
"github.com/edgelesssys/constellation/v2/disk-mapper/internal/diskencryption"
|
||||
ccryptsetup "github.com/edgelesssys/constellation/v2/internal/cryptsetup"
|
||||
"github.com/edgelesssys/constellation/v2/internal/logger"
|
||||
@ -32,21 +36,53 @@ const (
|
||||
|
||||
var diskPath = flag.String("disk", "", "Path to the disk to use for the benchmark")
|
||||
|
||||
var toolsEnvs []string = []string{"DD", "RM"}
|
||||
|
||||
// addToolsToPATH is used to update the PATH to contain necessary tool binaries for
|
||||
// coreutils.
|
||||
func addToolsToPATH() error {
|
||||
path := ":" + os.Getenv("PATH") + ":"
|
||||
for _, tool := range toolsEnvs {
|
||||
toolPath := os.Getenv(tool)
|
||||
if toolPath == "" {
|
||||
continue
|
||||
}
|
||||
toolPath, err := runfiles.Rlocation(toolPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pathComponent := filepath.Dir(toolPath)
|
||||
if strings.Contains(path, ":"+pathComponent+":") {
|
||||
continue
|
||||
}
|
||||
path = ":" + pathComponent + path
|
||||
}
|
||||
path = strings.Trim(path, ":")
|
||||
os.Setenv("PATH", path)
|
||||
return nil
|
||||
}
|
||||
|
||||
func setup(sizeGB int) error {
|
||||
return exec.Command("/bin/dd", "if=/dev/random", fmt.Sprintf("of=%s", devicePath), "bs=1G", fmt.Sprintf("count=%d", sizeGB)).Run()
|
||||
return exec.Command("dd", "if=/dev/random", fmt.Sprintf("of=%s", devicePath), "bs=1G", fmt.Sprintf("count=%d", sizeGB)).Run()
|
||||
}
|
||||
|
||||
func teardown() error {
|
||||
return exec.Command("/bin/rm", "-f", devicePath).Run()
|
||||
return exec.Command("rm", "-f", devicePath).Run()
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
flag.Parse()
|
||||
|
||||
// try to become root (best effort)
|
||||
_ = syscall.Setuid(0)
|
||||
if os.Getuid() != 0 {
|
||||
fmt.Printf("This test suite requires root privileges, as libcrypsetup uses the kernel's device mapper.\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := addToolsToPATH(); err != nil {
|
||||
fmt.Printf("Failed to add tools to PATH: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
goleak.VerifyTestMain(m,
|
||||
// https://github.com/census-instrumentation/opencensus-go/issues/1262
|
||||
|
Loading…
Reference in New Issue
Block a user