/* * SPDX-FileCopyrightText: Copyright (c) 2022 Atalaya Tech. Inc * 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. * Modifications Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES */ package controller import ( "context" "fmt" "path/filepath" "runtime" "testing" "github.com/ai-dynamo/dynamo/deploy/cloud/operator/api/v1alpha1" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" appsv1 "k8s.io/api/apps/v1" autoscalingv2 "k8s.io/api/autoscaling/v2" corev1 "k8s.io/api/core/v1" networkingv1 "k8s.io/api/networking/v1" k8sruntime "k8s.io/apimachinery/pkg/runtime" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" batchv1 "k8s.io/api/batch/v1" rbacv1 "k8s.io/api/rbac/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" vcbatchv1alpha1 "volcano.sh/apis/pkg/apis/batch/v1alpha1" volcanov1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1" "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" //+kubebuilder:scaffold:imports ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to // http://onsi.github.io/ginkgo/ to learn more about Ginkgo. var cfg *rest.Config var k8sClient client.Client var testEnv *envtest.Environment var ctx context.Context var cancel context.CancelFunc func TestControllers(t *testing.T) { RegisterFailHandler(Fail) RunSpecs(t, "Controller Suite") } var _ = BeforeSuite(func() { logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) ctx, cancel = context.WithCancel(context.TODO()) By("bootstrapping test environment") testEnv = &envtest.Environment{ CRDDirectoryPaths: []string{ filepath.Join("..", "..", "config", "crd", "bases"), filepath.Join(".", "testing", "prometheus"), filepath.Join(".", "testing", "volcano.sh"), filepath.Join(".", "testing", "run.ai"), filepath.Join(".", "testing", "nvidia"), }, ErrorIfCRDPathMissing: true, // The BinaryAssetsDirectory is only required if you want to run the tests directly // without call the makefile target test. If not informed it will look for the // default path defined in controller-runtime which is /usr/local/kubebuilder/. // Note that you must have the required binaries setup under the bin directory to perform // the tests directly. When we run make test it will be setup and used automatically. BinaryAssetsDirectory: filepath.Join("..", "..", "bin", "k8s", fmt.Sprintf("1.29.0-%s-%s", runtime.GOOS, runtime.GOARCH)), } var err error // cfg is defined in this file globally. cfg, err = testEnv.Start() Expect(err).NotTo(HaveOccurred()) Expect(cfg).NotTo(BeNil()) scheme := k8sruntime.NewScheme() //+kubebuilder:scaffold:scheme err = v1alpha1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = corev1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = autoscalingv2.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = networkingv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = appsv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = monitoringv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = admissionregistrationv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = batchv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = rbacv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = apiextensionsv1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = volcanov1beta1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) err = vcbatchv1alpha1.AddToScheme(scheme) Expect(err).NotTo(HaveOccurred()) k8sClient, err = client.New(cfg, client.Options{Scheme: scheme}) Expect(err).NotTo(HaveOccurred()) Expect(k8sClient).NotTo(BeNil()) k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ Scheme: scheme, }) Expect(err).NotTo(HaveOccurred()) go func() { defer GinkgoRecover() err = k8sManager.Start(ctx) Expect(err).NotTo(HaveOccurred()) }() }) var _ = AfterSuite(func() { cancel() By("tearing down the test environment") err := testEnv.Stop() Expect(err).NotTo(HaveOccurred()) })