ci: Run core tests groups workflow on amd64 and arm64 runners. (#25695)

This commit is contained in:
James Rasell
2025-04-17 15:16:29 +01:00
committed by GitHub
parent c44f847cbb
commit c85c723336
8 changed files with 79 additions and 43 deletions

View File

@@ -8,3 +8,5 @@ self-hosted-runner:
- windows-2019-16core
- custom-linux-xxl-nomad-20.04
- custom-linux-xl-nomad-22.04
- custom-ubuntu-22.04-xl
- custom-ubuntu-22.04-arm64-xl

View File

@@ -104,7 +104,6 @@ jobs:
sudo -E env "PATH=$PATH" make test-nomad-module
tests-groups:
needs: [checks]
runs-on: custom-linux-xl-nomad-22.04
timeout-minutes: 30
strategy:
fail-fast: false
@@ -115,6 +114,11 @@ jobs:
- command
- drivers
- quick
runners:
- custom-ubuntu-22.04-xl
- custom-ubuntu-22.04-arm64-xl
runs-on: ${{matrix.runners}}
name: tests-groups (${{matrix.groups}}, ${{ contains(matrix.runners, '-arm64') && ' linux_arm64 )' || ' linux_amd64 )' }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
@@ -122,9 +126,12 @@ jobs:
cache: ${{ contains(runner.name, 'Github Actions') }}
go-version-file: .go-version
cache-dependency-path: '**/go.sum'
- name: Install optional dependencies
- name: Install "driver" group dependencies
if: ${{ matrix.groups == 'drivers' }}
run: sudo apt update && sudo apt install qemu-system
- name: Install "command" group dependencies
if: ${{ matrix.groups == 'command' }}
run: sudo apt update && sudo apt install xdg-utils
- name: Run Matrix Tests
env:
GOTEST_GROUP: ${{matrix.groups}}

View File

@@ -1,11 +1,12 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
//go:build !darwin || !arm64 || !cgo
//go:build !darwin
package fingerprint
import (
"runtime"
"strconv"
"testing"
@@ -38,12 +39,17 @@ func TestCPUFingerprint_Classic(t *testing.T) {
attributes := response.Attributes
must.NotNil(t, attributes)
must.MapContainsKey(t, attributes, "cpu.numcores")
must.MapContainsKey(t, attributes, "cpu.modelname")
must.MapContainsKey(t, attributes, "cpu.totalcompute")
must.Positive(t, response.NodeResources.Processors.Topology.UsableCompute())
must.Positive(t, response.NodeResources.Processors.Topology.NumCores())
must.NotEmpty(t, response.NodeResources.Processors.Topology.UsableCores())
// The library we use does not populate arm64 CPU model names and I don't
// believe this is easily possible anyway.
if runtime.GOARCH == "amd64" {
must.MapContainsKey(t, attributes, "cpu.modelname")
}
_, frequencyPresent := attributes["cpu.frequency"]
_, performancePresent := attributes["cpu.frequency.performance"]
_, efficiencyPresent := attributes["cpu.frequency.efficiency"]

View File

@@ -160,7 +160,7 @@ func dockerSetup(t *testing.T, task *drivers.TaskConfig, driverCfg map[string]in
driver := dockerDriverHarness(t, driverCfg)
cleanup := driver.MkAllocDir(task, loggingIsEnabled(&DriverConfig{}, task))
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err := driver.StartTask(task)
must.NoError(t, err)
@@ -270,7 +270,7 @@ func TestDockerDriver_Start_Wait(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -304,7 +304,7 @@ func TestDockerDriver_Start_WaitFinish(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -345,7 +345,7 @@ func TestDockerDriver_Start_StoppedContainer(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
client := newTestDockerClient(t)
@@ -410,7 +410,7 @@ func TestDockerDriver_ContainerAlreadyExists(t *testing.T) {
driver := dockerDriverHarness(t, nil)
cleanup := driver.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
d, ok := driver.Impl().(*Driver)
must.True(t, ok)
@@ -460,7 +460,7 @@ func TestDockerDriver_Start_LoadImage(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -585,7 +585,7 @@ func TestDockerDriver_Start_Wait_AllocDir(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -633,7 +633,7 @@ func TestDockerDriver_Start_Kill_Wait(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -684,7 +684,7 @@ func TestDockerDriver_Start_KillTimeout(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -720,7 +720,7 @@ func TestDockerDriver_StartN(t *testing.T) {
}
testutil.DockerCompatible(t)
task1, _, _ := dockerTask(t)
task1, taskCfg, _ := dockerTask(t)
task2, _, _ := dockerTask(t)
task3, _, _ := dockerTask(t)
@@ -733,7 +733,7 @@ func TestDockerDriver_StartN(t *testing.T) {
for _, task := range taskList {
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -763,8 +763,8 @@ func TestDockerDriver_StartN(t *testing.T) {
func TestDockerDriver_StartNVersions(t *testing.T) {
ci.Parallel(t)
if runtime.GOOS == "windows" {
t.Skip("Skipped on windows, we don't have image variants available")
if runtime.GOOS == "windows" || runtime.GOARCH == "arm64" {
t.Skip("Skipped on windows or arm64, we don't have image variants available")
}
testutil.DockerCompatible(t)
@@ -798,7 +798,7 @@ func TestDockerDriver_StartNVersions(t *testing.T) {
for _, task := range taskList {
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), "busybox_linux_amd64.tar")
copyImage(t, task.TaskDir(), "busybox_musl.tar")
copyImage(t, task.TaskDir(), "busybox_glibc.tar")
_, _, err := d.StartTask(task)
@@ -997,7 +997,6 @@ func TestDockerDriver_ForcePull_RepoDigest(t *testing.T) {
cfg.LoadImage = ""
cfg.Image = "library/busybox@sha256:58ac43b2cc92c687a32c8be6278e50a063579655fe3090125dcb2af0ff9e1a64"
localDigest := "sha256:8ac48589692a53a9b8c2d1ceaa6b402665aa7fe667ba51ccc03002300856d8c7"
cfg.ForcePull = true
cfg.Command = busyboxLongRunningCmd[0]
cfg.Args = busyboxLongRunningCmd[1:]
@@ -1009,7 +1008,15 @@ func TestDockerDriver_ForcePull_RepoDigest(t *testing.T) {
container, err := client.ContainerInspect(context.Background(), handle.containerID)
must.NoError(t, err)
must.Eq(t, localDigest, container.Image)
switch runtime.GOARCH {
case "amd64":
must.Eq(t, "sha256:8ac48589692a53a9b8c2d1ceaa6b402665aa7fe667ba51ccc03002300856d8c7", container.Image)
case "arm64":
must.Eq(t, "sha256:ba3a78826904c625e65a2eed1f247bbab59898f043490e7113e88907bf7c6b3b", container.Image)
default:
t.Fatalf("unsupported test architecture: %s", runtime.GOARCH)
}
}
func TestDockerDriver_SecurityOptUnconfined(t *testing.T) {
@@ -1599,7 +1606,7 @@ func TestDockerDriver_Capabilities(t *testing.T) {
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
_, _, err := d.StartTask(task)
defer d.DestroyTask(task.ID, true)
@@ -2029,7 +2036,7 @@ func TestDockerDriver_EnableImageGC(t *testing.T) {
cleanSlate(client, cfg.Image)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
_, _, err := driver.StartTask(task)
must.NoError(t, err)
@@ -2097,7 +2104,7 @@ func TestDockerDriver_DisableImageGC(t *testing.T) {
cleanSlate(client, cfg.Image)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
_, _, err := driver.StartTask(task)
must.NoError(t, err)
@@ -2162,7 +2169,7 @@ func TestDockerDriver_MissingContainer_Cleanup(t *testing.T) {
cleanSlate(client, cfg.Image)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
_, _, err := driver.StartTask(task)
must.NoError(t, err)
@@ -2282,7 +2289,7 @@ func setupDockerVolumes(t *testing.T, cfg map[string]interface{}, hostpath strin
d := dockerDriverHarness(t, cfg)
cleanup := d.MkAllocDir(task, true)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
return task, d, &taskCfg, hostfile, cleanup
}
@@ -2449,7 +2456,7 @@ func TestDockerDriver_Mounts(t *testing.T) {
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
_, _, err := d.StartTask(task)
defer d.DestroyTask(task.ID, true)
@@ -2593,7 +2600,7 @@ func TestDockerDriver_OOMKilled(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -2647,7 +2654,7 @@ func TestDockerDriver_Devices_IsInvalidConfig(t *testing.T) {
must.NoError(t, task.EncodeConcreteDriverConfig(cfg))
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
defer cleanup()
_, _, err := d.StartTask(task)
@@ -2823,7 +2830,7 @@ func TestDockerDriver_AdvertiseIPv6Address(t *testing.T) {
driver := dockerDriverHarness(t, nil)
cleanup := driver.MkAllocDir(task, true)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
defer cleanup()
_, network, err := driver.StartTask(task)
@@ -2902,7 +2909,7 @@ func TestDockerDriver_CreationIdempotent(t *testing.T) {
cleanup := driver.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), cfg.LoadImage)
d, ok := driver.Impl().(*Driver)
must.True(t, ok)
@@ -3085,8 +3092,8 @@ func TestDockerDriver_parseSignal(t *testing.T) {
func TestDockerDriver_StopSignal(t *testing.T) {
ci.Parallel(t)
testutil.DockerCompatible(t)
if runtime.GOOS == "windows" {
t.Skip("Skipped on windows, we don't have image variants available")
if runtime.GOOS == "windows" || runtime.GOARCH == "arm64" {
t.Skip("Skipped on windows or arm64, we don't have image variants available")
}
cases := []struct {
@@ -3141,7 +3148,7 @@ func TestDockerDriver_StopSignal(t *testing.T) {
if c.variant == "stopsignal" {
copyImage(t, task.TaskDir(), "busybox_stopsignal.tar") // Default busybox image with STOPSIGNAL 19 added
} else {
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
}
client := newTestDockerClient(t)
@@ -3232,7 +3239,7 @@ func TestDockerDriver_CollectStats(t *testing.T) {
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), taskCfg.LoadImage)
_, _, err := d.StartTask(task)
must.NoError(t, err)

View File

@@ -46,7 +46,7 @@ func TestDockerDriver_User(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err := d.StartTask(task)
if err == nil {
@@ -91,7 +91,7 @@ func TestDockerDriver_NetworkAliases_Bridge(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err = d.StartTask(task)
must.NoError(t, err)
@@ -127,7 +127,7 @@ func TestDockerDriver_NetworkMode_Host(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err := d.StartTask(task)
must.NoError(t, err)
@@ -258,7 +258,7 @@ func TestDockerDriver_Sysctl_Ulimit_Errors(t *testing.T) {
d := dockerDriverHarness(t, nil)
cleanup := d.MkAllocDir(task, true)
t.Cleanup(cleanup)
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err := d.StartTask(task)
must.ErrorContains(t, err, tc.err.Error())
@@ -743,11 +743,20 @@ func TestDockerDriver_Start_Image_HTTPS(t *testing.T) {
}
func newTaskConfig(variant string, command []string) TaskConfig {
// busyboxImageID is the ID stored in busybox.tar
busyboxImageID := "busybox:1.29.3"
var busyboxImageID, loadImage string
switch runtime.GOARCH {
case "arm64":
busyboxImageID = "busybox:1.37.0"
loadImage = "busybox_linux_arm64.tar"
default:
busyboxImageID = "busybox:1.29.3"
loadImage = "busybox_linux_amd64.tar"
}
image := busyboxImageID
loadImage := "busybox.tar"
if variant != "" {
image = fmt.Sprintf("%s-%s", busyboxImageID, variant)
loadImage = fmt.Sprintf("busybox_%s.tar", variant)
@@ -807,7 +816,7 @@ func TestDocker_ExecTaskStreaming(t *testing.T) {
harness := dockerDriverHarness(t, nil)
cleanup := harness.MkAllocDir(task, true)
defer cleanup()
copyImage(t, task.TaskDir(), "busybox.tar")
copyImage(t, task.TaskDir(), fmt.Sprintf("busybox_linux_%s.tar", runtime.GOARCH))
_, _, err := harness.StartTask(task)
must.NoError(t, err)

View File

@@ -10,6 +10,7 @@ import (
"os/exec"
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
"syscall"
@@ -37,7 +38,11 @@ import (
)
func init() {
executorFactories["LibcontainerExecutor"] = libcontainerFactory
// There are no busybox arm64 images to download. These tests will need to
// be reworked, or a custom build performed.
if runtime.GOARCH == "amd64" {
executorFactories["LibcontainerExecutor"] = libcontainerFactory
}
}
var libcontainerFactory = executorFactory{