Skip to content

Commit

Permalink
Fix HPC tests
Browse files Browse the repository at this point in the history
Signed-off-by: Kirtana Ashok <[email protected]>
  • Loading branch information
kiashok committed Jul 18, 2024
1 parent c28c0b2 commit 3a7333e
Show file tree
Hide file tree
Showing 17 changed files with 117 additions and 140 deletions.
171 changes: 95 additions & 76 deletions test/cri-containerd/jobcontainer_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//go:build windows && functional
// +build windows,functional

package cri_containerd
package azcri_containerd

import (
"context"
Expand All @@ -14,14 +14,13 @@ import (
"testing"
"time"

runtime "dev.azure.com/msazure/ContainerPlatform/_git/azcri.git/api/azcri/v1"
"github.com/Microsoft/go-winio/vhd"
runtime "k8s.io/cri-api/pkg/apis/runtime/v1"

"github.com/Microsoft/hcsshim/hcn"
"github.com/Microsoft/hcsshim/osversion"
"github.com/Microsoft/hcsshim/pkg/annotations"
"github.com/Microsoft/hcsshim/test/pkg/definitions/winapi"
"github.com/Microsoft/hcsshim/test/pkg/require"
)

func getJobContainerPodRequestWCOW(t *testing.T) *runtime.RunPodSandboxRequest {
Expand Down Expand Up @@ -262,7 +261,7 @@ func Test_RunContainer_HNS_JobContainer_WCOW(t *testing.T) {
// 2. If it did work we need to delete it.
network, err := hcn.GetNetworkByName(networkName)
if err != nil {
if _, ok := err.(hcn.NetworkNotFoundError); ok { //nolint:errorlint
if _, ok := err.(hcn.NetworkNotFoundError); ok {
t.Fatalf("no network/switch with name %q found: %s", networkName, err)
}
t.Fatalf("failed to get network/switch with name %q: %s", networkName, err)
Expand Down Expand Up @@ -419,10 +418,9 @@ func Test_RunContainer_HostVolumes_JobContainer_WCOW(t *testing.T) {
}

func Test_RunContainer_JobContainer_VolumeMount(t *testing.T) {
requireFeatures(t, featureWCOWProcess, featureHostProcess)
client := newTestRuntimeClient(t)
require.ExactBuild(t, osversion.RS5)

client := newTestRuntimeClient(t)
dir := t.TempDir()

tmpfn := filepath.Join(dir, "tmpfile")
Expand Down Expand Up @@ -452,43 +450,49 @@ func Test_RunContainer_JobContainer_VolumeMount(t *testing.T) {
}

type config struct {
name string
containerName string
sandboxImage string
containerImage string
exec []string
mounts []*runtime.Mount
name string
containerName string
requiredFeatures []string
sandboxImage string
containerImage string
exec []string
mounts []*runtime.Mount
}

tests := []config{
{
name: "JobContainer_VolumeMount_DriveLetter",
containerName: t.Name() + "-Container-DriveLetter",
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountDriveLetter,
exec: []string{"cmd", "/c", "dir", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\tmpfile"},
name: "JobContainer_VolumeMount_DriveLetter",
containerName: t.Name() + "-Container-DriveLetter",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountDriveLetter,
exec: []string{"cmd", "/c", "dir", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\tmpfile"},
},
{
name: "JobContainer_VolumeMount_NoDriveLetter",
containerName: t.Name() + "-Container-NoDriveLetter",
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountNoDriveLetter,
exec: []string{"cmd", "/c", "dir", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\tmpfile"},
name: "JobContainer_VolumeMount_NoDriveLetter",
containerName: t.Name() + "-Container-NoDriveLetter",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountNoDriveLetter,
exec: []string{"cmd", "/c", "dir", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\tmpfile"},
},
{
name: "JobContainer_VolumeMount_SingleFile",
containerName: t.Name() + "-Container-SingleFile",
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountSingleFile,
exec: []string{"cmd", "/c", "type", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\testfile"},
name: "JobContainer_VolumeMount_SingleFile",
containerName: t.Name() + "-Container-SingleFile",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
mounts: mountSingleFile,
exec: []string{"cmd", "/c", "type", "%CONTAINER_SANDBOX_MOUNT_POINT%\\path\\in\\container\\testfile"},
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
requireFeatures(t, test.requiredFeatures...)

requiredImages := []string{test.sandboxImage, test.containerImage}
pullRequiredImages(t, requiredImages)

Expand Down Expand Up @@ -520,48 +524,54 @@ func Test_RunContainer_JobContainer_VolumeMount(t *testing.T) {
}

func Test_RunContainer_JobContainer_Environment(t *testing.T) {
requireFeatures(t, featureWCOWProcess, featureHostProcess)

client := newTestRuntimeClient(t)

type config struct {
name string
containerName string
sandboxImage string
containerImage string
env []*runtime.KeyValue
exec []string
name string
containerName string
requiredFeatures []string
sandboxImage string
containerImage string
env []*runtime.KeyValue
exec []string
expectedExecResult string
}

tests := []config{
{
name: "JobContainer_Env_NoMountPoint",
containerName: t.Name() + "-Container-WithNoMountPoint",
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
name: "JobContainer_Env_NoMountPoint",
containerName: t.Name() + "-Container-WithNoMountPoint",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
env: []*runtime.KeyValue{
{
Key: "PATH", Value: "C:\\Windows\\system32;C:\\Windows",
},
},
exec: []string{"cmd", "/c", "IF", "%PATH%", "==", "C:\\Windows\\system32;C:\\Windows", "( exit 0 )", "ELSE", "(exit -1)"},
exec: []string{"cmd", "/c", "echo %PATH%"},
expectedExecResult: "C:\\Windows\\system32;C:\\Windows;C:\\hpc\\;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\Wbem",
},
{
name: "JobContainer_VolumeMount_WithMountPoint",
containerName: t.Name() + "-Container-WithMountPoint",
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
name: "JobContainer_VolumeMount_WithMountPoint",
containerName: t.Name() + "-Container-WithMountPoint",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageWindowsNanoserver,
env: []*runtime.KeyValue{
{
Key: "PATH", Value: "%CONTAINER_SANDBOX_MOUNT_POINT%\\apps\\vim\\;C:\\Windows\\system32;C:\\Windows",
},
},
exec: []string{"cmd", "/c", "IF", "%PATH%", "==", "%CONTAINER_SANDBOX_MOUNT_POINT%\\apps\\vim\\;C:\\Windows\\system32;C:\\Windows", "( exit -1 )", "ELSE", "(exit 0)"},
exec: []string{"cmd", "/c", "echo %PATH%"},
expectedExecResult: `C:\hpc\apps\vim\;C:\Windows\system32;C:\Windows;C:\hpc\;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\Wbem`,
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
requireFeatures(t, test.requiredFeatures...)

requiredImages := []string{test.sandboxImage, test.containerImage}
pullRequiredImages(t, requiredImages)

Expand Down Expand Up @@ -589,57 +599,66 @@ func Test_RunContainer_JobContainer_Environment(t *testing.T) {
if r.ExitCode != 0 {
t.Fatalf("failed with exit code %d checking for job container mount: %s", r.ExitCode, string(r.Stderr))
}
stdout := strings.TrimSpace(string(r.Stdout))
if stdout != test.expectedExecResult {
t.Fatalf("PATH does not match. Expected: %v Actual: %v", test.expectedExecResult, stdout)
}
})
}
}

func Test_RunContainer_WorkingDirectory_JobContainer_WCOW(t *testing.T) {
requireFeatures(t, featureWCOWProcess, featureHostProcess)
require.ExactBuild(t, osversion.RS5)

client := newTestRuntimeClient(t)
require.ExactBuild(t, osversion.RS5)

type config struct {
name string
containerName string //nolint:unused // may be used in future tests
workDir string
sandboxImage string
containerImage string
cmd []string
name string
containerName string //nolint:unused // may be used in future tests
workDir string
requiredFeatures []string
sandboxImage string
containerImage string
cmd []string
}

tests := []config{
{
name: "JobContainer_WorkDir_DriveLetter",
workDir: "C:\\go\\",
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"src\\workdir\\workdir.exe"},
name: "JobContainer_WorkDir_DriveLetter",
workDir: "C:\\go\\",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"src\\workdir\\workdir.exe"},
},
{
name: "JobContainer_WorkDir_NoDriveLetter",
workDir: "/go",
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"src/workdir/workdir.exe"},
name: "JobContainer_WorkDir_NoDriveLetter",
workDir: "/go",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"src/workdir/workdir.exe"},
},
{
name: "JobContainer_WorkDir_Default", // Just use the workdir from the image, which is C:\\go\\src\\workdir
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"workdir.exe"},
name: "JobContainer_WorkDir_Default", // Just use the workdir from the image, which is C:\\go\\src\\workdir
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"workdir.exe"},
},
{
name: "JobContainer_WorkDir_EnvVar", // Test that putting the envvar in the workdir functions.
workDir: "$env:CONTAINER_SANDBOX_MOUNT_POINT\\go\\src\\workdir\\",
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"workdir.exe"},
name: "JobContainer_WorkDir_EnvVar", // Test that putting the envvar in the workdir functions.
workDir: "$env:CONTAINER_SANDBOX_MOUNT_POINT\\go\\src\\workdir\\",
requiredFeatures: []string{featureWCOWProcess, featureHostProcess},
sandboxImage: imageWindowsNanoserver,
containerImage: imageJobContainerWorkDir,
cmd: []string{"workdir.exe"},
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
requireFeatures(t, test.requiredFeatures...)

requiredImages := []string{test.sandboxImage, test.containerImage}
pullRequiredImages(t, requiredImages)

Expand Down
5 changes: 5 additions & 0 deletions test/cri-containerd/test-images/hpc_cmdline/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022

USER containeradministrator

COPY ./cmdline.exe /
6 changes: 6 additions & 0 deletions test/cri-containerd/test-images/hpc_etw/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022

USER containeradministrator

COPY ./etw.exe /
COPY test.wprp /
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ func main() {
os.Exit(1)
}

path := filepath.Join(filepath.Dir(os.Args[0]), "Test.wprp")
path := filepath.Join(filepath.Dir(os.Args[0]), "test.wprp")
if _, err := os.Stat(path); os.IsNotExist(err) {
log.Fatalf("failed to find wprp file %v: %s", path, err)
}

if err := exec.Command("wpr", "-start", path).Run(); err != nil {
log.Fatalf("failed to wpr start: %s", err)
}
Expand Down
2 changes: 2 additions & 0 deletions test/cri-containerd/test-images/hpc_hns/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
COPY ./hns.exe /
2 changes: 2 additions & 0 deletions test/cri-containerd/test-images/hpc_vhd/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
COPY ./vhd.exe /
2 changes: 2 additions & 0 deletions test/cri-containerd/test-images/hpc_workdir/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
COPY ./hpc_workdir.exe /
11 changes: 0 additions & 11 deletions test/cri-containerd/test-images/jobcontainer_cmdline/dockerfile

This file was deleted.

11 changes: 0 additions & 11 deletions test/cri-containerd/test-images/jobcontainer_createvhd/Dockerfile

This file was deleted.

11 changes: 0 additions & 11 deletions test/cri-containerd/test-images/jobcontainer_etw/Dockerfile

This file was deleted.

15 changes: 0 additions & 15 deletions test/cri-containerd/test-images/jobcontainer_hns/Dockerfile

This file was deleted.

15 changes: 0 additions & 15 deletions test/cri-containerd/test-images/jobcontainer_workdir/Dockerfile

This file was deleted.

0 comments on commit 3a7333e

Please sign in to comment.