nvidia-container-toolkit/tests/e2e/e2e_test.go
Carlos Eduardo Arango Gutierrez 9defe37fa2
Some checks failed
CI Pipeline / code-scanning (push) Has been cancelled
CI Pipeline / variables (push) Has been cancelled
CI Pipeline / golang (push) Has been cancelled
CI Pipeline / image (push) Has been cancelled
CI Pipeline / e2e-test (push) Has been cancelled
[no-relnote] Update Github Actions E2E
Signed-off-by: Carlos Eduardo Arango Gutierrez <eduardoa@nvidia.com>
2025-05-06 19:39:07 +02:00

154 lines
3.3 KiB
Go

/*
* 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.
*/
package e2e
import (
"context"
"errors"
"os"
"path/filepath"
"runtime"
"strconv"
"testing"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
// Test context
var (
ctx context.Context
installCTK bool
ImageRepo string
ImageTag string
sshKey string
sshUser string
host string
sshPort string
cwd string
packagePath string
runner Runner
)
func TestMain(t *testing.T) {
suiteName := "E2E NVIDIA Container Toolkit"
RegisterFailHandler(Fail)
ctx = context.Background()
getTestEnv()
RunSpecs(t,
suiteName,
)
}
// BeforeSuite runs before the test suite
var _ = BeforeSuite(func() {
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())
}
})
// getTestEnv gets the test environment variables
func getTestEnv() {
defer GinkgoRecover()
var err error
_, thisFile, _, _ := runtime.Caller(0)
packagePath = filepath.Dir(thisFile)
installCTK = getEnvVarOrDefault("E2E_INSTALL_CTK", true)
if installCTK {
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("E2E_SSH_KEY")
Expect(sshKey).NotTo(BeEmpty(), "E2E_SSH_KEY environment variable must be set")
sshUser = os.Getenv("E2E_SSH_USER")
Expect(sshUser).NotTo(BeEmpty(), "E2E_SSH_USER environment variable must be set")
host = os.Getenv("E2E_SSH_HOST")
Expect(host).NotTo(BeEmpty(), "E2E_SSH_HOST environment variable must be set")
sshPort = getEnvVarOrDefault("E2E_SSH_PORT", "22")
// Get current working directory
cwd, err = os.Getwd()
Expect(err).NotTo(HaveOccurred())
}
func getEnvVarAs[T any](key string) (T, error) {
var zero T
value := os.Getenv(key)
if value == "" {
return zero, errors.New("env var not set")
}
switch any(zero).(type) {
case bool:
v, err := strconv.ParseBool(value)
if err != nil {
return zero, err
}
return any(v).(T), nil
case int:
v, err := strconv.Atoi(value)
if err != nil {
return zero, err
}
return any(v).(T), nil
case string:
return any(value).(T), nil
default:
return zero, errors.New("unsupported type")
}
}
func getEnvVarOrDefault[T any](key string, defaultValue T) T {
val, err := getEnvVarAs[T](key)
if err != nil {
return defaultValue
}
return val
}