From bf29e724f847a87ff03727aaa042319fd72ef13c Mon Sep 17 00:00:00 2001 From: Carlos Eduardo Arango Gutierrez Date: Thu, 24 Apr 2025 20:48:37 +0200 Subject: [PATCH] [no-relnote] Update E2E suite Signed-off-by: Carlos Eduardo Arango Gutierrez --- tests/e2e/Makefile | 39 ++---- tests/e2e/e2e_test.go | 136 ++++++++++++++++----- tests/e2e/installer.go | 28 ++--- tests/e2e/nvidia-container-toolkit_test.go | 99 +++++++-------- tests/e2e/runner.go | 27 ++-- tests/go.mod | 4 +- 6 files changed, 186 insertions(+), 147 deletions(-) diff --git a/tests/e2e/Makefile b/tests/e2e/Makefile index cc11366e..c67c5574 100644 --- a/tests/e2e/Makefile +++ b/tests/e2e/Makefile @@ -1,4 +1,5 @@ -# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,34 +13,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -GO_CMD ?= go +.PHONY: test-e2e ginkgo -include $(CURDIR)/versions.mk +GINKGO_ARGS ?= +LOG_ARTIFACTS_DIR ?= $(CURDIR)/e2e_logs -E2E_RUNTIME ?= docker +ginkgo: + mkdir -p $(CURDIR)/bin + GOBIN=$(CURDIR)/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest -E2E_INSTALL_CTK ?= false - -ifeq ($($(DIST)),) -DIST ?= ubuntu20.04 -endif -IMAGE_TAG ?= $(VERSION)-$(DIST) -IMAGE = $(IMAGE_NAME):$(IMAGE_TAG) - -E2E_SSH_KEY ?= -E2E_SSH_USER ?= -E2E_SSH_HOST ?= -E2E_SSH_PORT ?= 22 - -.PHONY: test -test: - cd $(CURDIR)/tests/e2e && $(GO_CMD) test -v . -args \ - -ginkgo.focus="$(E2E_RUNTIME)" \ - -test.timeout=1h \ - -ginkgo.v \ - -install-ctk=$(E2E_INSTALL_CTK) \ - -toolkit-image=$(IMAGE) \ - -ssh-key=$(E2E_SSH_KEY) \ - -ssh-user=$(E2E_SSH_USER) \ - -remote-host=$(E2E_SSH_HOST) \ - -remote-port=$(E2E_SSH_PORT) +test-e2e: ginkgo + $(CURDIR)/bin/ginkgo $(GINKGO_ARGS) -v --json-report ginkgo.json ./tests/e2e/... diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index e31a88f0..3d16bf26 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -1,24 +1,28 @@ /* -* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package e2e import ( "context" - "flag" + "os" + "path/filepath" + "runtime" + "strconv" "testing" . "github.com/onsi/ginkgo/v2" @@ -31,27 +35,27 @@ var ( installCTK bool - image string + ImageRepo string + ImageTag string - sshKey string - sshUser string - host string - sshPort string + sshKey string + sshUser string + host string + sshPort string + cwd string + packagePath string + + runner Runner ) -func init() { - flag.BoolVar(&installCTK, "install-ctk", false, "Install the NVIDIA Container Toolkit") - flag.StringVar(&image, "toolkit-image", "", "Repository of the image to test") - flag.StringVar(&sshKey, "ssh-key", "", "SSH key to use for remote login") - flag.StringVar(&sshUser, "ssh-user", "", "SSH user to use for remote login") - flag.StringVar(&host, "remote-host", "", "Hostname of the remote machine") - flag.StringVar(&sshPort, "remote-port", "22", "SSH port to use for remote login") -} - func TestMain(t *testing.T) { - suiteName := "NVIDIA Container Toolkit E2E" + suiteName := "E2E NVIDIA Container Toolkit" RegisterFailHandler(Fail) + + ctx = context.Background() + getTestEnv() + RunSpecs(t, suiteName, ) @@ -59,5 +63,77 @@ func TestMain(t *testing.T) { // BeforeSuite runs before the test suite var _ = BeforeSuite(func() { - ctx = context.Background() + runner = NewRunner( + WithHost(host), + WithPort(sshPort), + WithSshKey(sshKey), + WithSshUser(sshUser), + ) + + if installCTK { + installer, err := NewToolkitInstaller( + WithRunner(runner), + WithImage(ImageRepo+":"+ImageTag), + WithTemplate(dockerInstallTemplate), + ) + Expect(err).ToNot(HaveOccurred()) + + err = installer.Install() + Expect(err).ToNot(HaveOccurred()) + } + + _, _, err := runner.Run("docker pull ubuntu") + Expect(err).ToNot(HaveOccurred()) + + _, _, err = runner.Run("docker pull nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") + Expect(err).ToNot(HaveOccurred()) + + _, _, err = runner.Run("docker pull nvcr.io/nvidia/cuda:12.8.0-base-ubi8") + Expect(err).ToNot(HaveOccurred()) }) + +// getTestEnv gets the test environment variables +func getTestEnv() { + defer GinkgoRecover() + var err error + + _, thisFile, _, _ := runtime.Caller(0) + packagePath = filepath.Dir(thisFile) + + installCTK = getBoolEnvVar("INSTALL_CTK", false) + + ImageRepo = os.Getenv("E2E_IMAGE_REPO") + Expect(ImageRepo).NotTo(BeEmpty(), "E2E_IMAGE_REPO environment variable must be set") + + ImageTag = os.Getenv("E2E_IMAGE_TAG") + Expect(ImageTag).NotTo(BeEmpty(), "E2E_IMAGE_TAG environment variable must be set") + + sshKey = os.Getenv("SSH_KEY") + Expect(sshKey).NotTo(BeEmpty(), "SSH_KEY environment variable must be set") + + sshUser = os.Getenv("SSH_USER") + Expect(sshUser).NotTo(BeEmpty(), "SSH_USER environment variable must be set") + + host = os.Getenv("REMOTE_HOST") + Expect(host).NotTo(BeEmpty(), "REMOTE_HOST environment variable must be set") + + sshPort = os.Getenv("REMOTE_PORT") + Expect(sshPort).NotTo(BeEmpty(), "REMOTE_PORT environment variable must be set") + + // Get current working directory + cwd, err = os.Getwd() + Expect(err).NotTo(HaveOccurred()) +} + +// getBoolEnvVar returns the boolean value of the environment variable or the default value if not set. +func getBoolEnvVar(key string, defaultValue bool) bool { + value := os.Getenv(key) + if value == "" { + return defaultValue + } + boolValue, err := strconv.ParseBool(value) + if err != nil { + return defaultValue + } + return boolValue +} diff --git a/tests/e2e/installer.go b/tests/e2e/installer.go index 4bd2552b..9d8afd54 100644 --- a/tests/e2e/installer.go +++ b/tests/e2e/installer.go @@ -1,19 +1,19 @@ /* -* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ - package e2e import ( diff --git a/tests/e2e/nvidia-container-toolkit_test.go b/tests/e2e/nvidia-container-toolkit_test.go index 5948014b..310bbade 100644 --- a/tests/e2e/nvidia-container-toolkit_test.go +++ b/tests/e2e/nvidia-container-toolkit_test.go @@ -1,5 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,69 +28,50 @@ import ( // Integration tests for Docker runtime var _ = Describe("docker", Ordered, ContinueOnFailure, func() { - var r Runner - - // Install the NVIDIA Container Toolkit - BeforeAll(func(ctx context.Context) { - r = NewRunner( - WithHost(host), - WithPort(sshPort), - WithSshKey(sshKey), - WithSshUser(sshUser), - ) - if installCTK { - installer, err := NewToolkitInstaller( - WithRunner(r), - WithImage(image), - WithTemplate(dockerInstallTemplate), - ) - Expect(err).ToNot(HaveOccurred()) - err = installer.Install() - Expect(err).ToNot(HaveOccurred()) - } - }) - // GPUs are accessible in a container: Running nvidia-smi -L inside the // container shows the same output inside the container as outside the // container. This means that the following commands must all produce // the same output When("running nvidia-smi -L", Ordered, func() { var hostOutput string + var err error BeforeAll(func(ctx context.Context) { - _, _, err := r.Run("docker pull ubuntu") - Expect(err).ToNot(HaveOccurred()) - - hostOutput, _, err = r.Run("nvidia-smi -L") + hostOutput, _, err = runner.Run("nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) }) It("should support NVIDIA_VISIBLE_DEVICES", func(ctx context.Context) { - containerOutput, _, err := r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all ubuntu nvidia-smi -L") + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all") + containerOutput, _, err := runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all ubuntu nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) Expect(containerOutput).To(Equal(hostOutput)) }) It("should support automatic CDI spec generation", func(ctx context.Context) { - containerOutput, _, err := r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all ubuntu nvidia-smi -L") + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all") + containerOutput, _, err := runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all ubuntu nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) Expect(containerOutput).To(Equal(hostOutput)) }) It("should support automatic CDI spec generation with the --gpus flag", func(ctx context.Context) { - containerOutput, _, err := r.Run("docker run --rm -i --gpus=all --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all ubuntu nvidia-smi -L") + By("Running docker run with --gpus=all --runtime=nvidia --gpus all") + containerOutput, _, err := runner.Run("docker run --rm -i --gpus=all --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all ubuntu nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) Expect(containerOutput).To(Equal(hostOutput)) }) It("should support the --gpus flag using the nvidia-container-runtime", func(ctx context.Context) { - containerOutput, _, err := r.Run("docker run --rm -i --runtime=nvidia --gpus all ubuntu nvidia-smi -L") + By("Running docker run with --runtime=nvidia --gpus all") + containerOutput, _, err := runner.Run("docker run --rm -i --runtime=nvidia --gpus all ubuntu nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) Expect(containerOutput).To(Equal(hostOutput)) }) It("should support the --gpus flag using the nvidia-container-runtime-hook", func(ctx context.Context) { - containerOutput, _, err := r.Run("docker run --rm -i --gpus all ubuntu nvidia-smi -L") + By("Running docker run with --gpus all") + containerOutput, _, err := runner.Run("docker run --rm -i --gpus all ubuntu nvidia-smi -L") Expect(err).ToNot(HaveOccurred()) Expect(containerOutput).To(Equal(hostOutput)) }) @@ -98,35 +80,34 @@ var _ = Describe("docker", Ordered, ContinueOnFailure, func() { // A vectorAdd sample runs in a container with access to all GPUs. // The following should all produce the same result. When("Running the cuda-vectorAdd sample", Ordered, func() { - BeforeAll(func(ctx context.Context) { - _, _, err := r.Run("docker pull nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") - Expect(err).ToNot(HaveOccurred()) - }) - var referenceOutput string It("should support NVIDIA_VISIBLE_DEVICES", func(ctx context.Context) { + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all") var err error - referenceOutput, _, err = r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") + referenceOutput, _, err = runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(ContainSubstring("Test PASSED")) }) It("should support automatic CDI spec generation", func(ctx context.Context) { - out2, _, err := r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all") + out2, _, err := runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out2)) }) It("should support the --gpus flag using the nvidia-container-runtime", func(ctx context.Context) { - out3, _, err := r.Run("docker run --rm -i --runtime=nvidia --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") + By("Running docker run with --runtime=nvidia --gpus all") + out3, _, err := runner.Run("docker run --rm -i --runtime=nvidia --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out3)) }) It("should support the --gpus flag using the nvidia-container-runtime-hook", func(ctx context.Context) { - out4, _, err := r.Run("docker run --rm -i --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") + By("Running docker run with --gpus all") + out4, _, err := runner.Run("docker run --rm -i --gpus all nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out4)) }) @@ -136,53 +117,52 @@ var _ = Describe("docker", Ordered, ContinueOnFailure, func() { // The following should all produce the same result. When("Running the cuda-deviceQuery sample", Ordered, func() { BeforeAll(func(ctx context.Context) { - _, _, err := r.Run("docker pull nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") + _, _, err := runner.Run("docker pull nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) }) var referenceOutput string It("should support NVIDIA_VISIBLE_DEVICES", func(ctx context.Context) { + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all") var err error - referenceOutput, _, err = r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") + referenceOutput, _, err = runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) - Expect(referenceOutput).To(ContainSubstring("Result = PASS")) }) It("should support automatic CDI spec generation", func(ctx context.Context) { - out2, _, err := r.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") + By("Running docker run with --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all") + out2, _, err := runner.Run("docker run --rm -i --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out2)) }) It("should support the --gpus flag using the nvidia-container-runtime", func(ctx context.Context) { - out3, _, err := r.Run("docker run --rm -i --runtime=nvidia --gpus all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") + By("Running docker run with --runtime=nvidia --gpus all") + out3, _, err := runner.Run("docker run --rm -i --runtime=nvidia --gpus all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out3)) }) It("should support the --gpus flag using the nvidia-container-runtime-hook", func(ctx context.Context) { - out4, _, err := r.Run("docker run --rm -i --gpus all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") + By("Running docker run with --gpus all") + out4, _, err := runner.Run("docker run --rm -i --gpus all nvcr.io/nvidia/k8s/cuda-sample:devicequery-cuda12.5.0") Expect(err).ToNot(HaveOccurred()) Expect(referenceOutput).To(Equal(out4)) }) }) - Describe("CUDA Forward compatibility", Ordered, func() { + When("Testing CUDA Forward compatibility", Ordered, func() { BeforeAll(func(ctx context.Context) { - _, _, err := r.Run("docker pull nvcr.io/nvidia/cuda:12.8.0-base-ubi8") - Expect(err).ToNot(HaveOccurred()) - }) - - BeforeAll(func(ctx context.Context) { - compatOutput, _, err := r.Run("docker run --rm -i -e NVIDIA_VISIBLE_DEVICES=void nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ls /usr/local/cuda/compat/libcuda.*.*\"") + compatOutput, _, err := runner.Run("docker run --rm -i -e NVIDIA_VISIBLE_DEVICES=void nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ls /usr/local/cuda/compat/libcuda.*.*\"") Expect(err).ToNot(HaveOccurred()) Expect(compatOutput).ToNot(BeEmpty()) + compatDriverVersion := strings.TrimPrefix(filepath.Base(compatOutput), "libcuda.so.") compatMajor := strings.SplitN(compatDriverVersion, ".", 2)[0] - driverOutput, _, err := r.Run("nvidia-smi -q | grep \"Driver Version\"") + driverOutput, _, err := runner.Run("nvidia-smi -q | grep \"Driver Version\"") Expect(err).ToNot(HaveOccurred()) parts := strings.SplitN(driverOutput, ":", 2) Expect(parts).To(HaveLen(2)) @@ -198,19 +178,22 @@ var _ = Describe("docker", Ordered, ContinueOnFailure, func() { }) It("should work with the nvidia runtime in legacy mode", func(ctx context.Context) { - ldconfigOut, _, err := r.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") + By("Running docker run with -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all") + ldconfigOut, _, err := runner.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") Expect(err).ToNot(HaveOccurred()) Expect(ldconfigOut).To(ContainSubstring("/usr/local/cuda/compat")) }) It("should work with the nvidia runtime in CDI mode", func(ctx context.Context) { - ldconfigOut, _, err := r.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") + By("Running docker run with -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all") + ldconfigOut, _, err := runner.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=runtime.nvidia.com/gpu=all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") Expect(err).ToNot(HaveOccurred()) Expect(ldconfigOut).To(ContainSubstring("/usr/local/cuda/compat")) }) It("should NOT work with nvidia-container-runtime-hook", func(ctx context.Context) { - ldconfigOut, _, err := r.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=runc --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") + By("Running docker run with -e NVIDIA_DISABLE_REQUIRE=true --gpus all") + ldconfigOut, _, err := runner.Run("docker run --rm -i -e NVIDIA_DISABLE_REQUIRE=true --runtime=runc --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubi8 bash -c \"ldconfig -p | grep libcuda.so.1\"") Expect(err).ToNot(HaveOccurred()) Expect(ldconfigOut).To(ContainSubstring("/usr/lib64")) }) diff --git a/tests/e2e/runner.go b/tests/e2e/runner.go index e1a75d26..1afb4226 100644 --- a/tests/e2e/runner.go +++ b/tests/e2e/runner.go @@ -1,17 +1,18 @@ /* -* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package e2e diff --git a/tests/go.mod b/tests/go.mod index 3c28ebc9..eafdaab0 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -1,8 +1,6 @@ module github.com/NVIDIA/nvidia-container-toolkit/tests -go 1.23.2 - -toolchain go1.24.1 +go 1.24.1 require ( github.com/onsi/ginkgo/v2 v2.23.4