Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

121 changes: 121 additions & 0 deletions cmd/thv-operator/test-integration/mcp-external-auth/suite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
// Package controllers contains integration tests for the MCPExternalAuthConfig controller
package controllers

import (
"context"
"path/filepath"
"testing"
"time"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"go.uber.org/zap/zapcore"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
"k8s.io/client-go/kubernetes/scheme"
"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"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"

mcpv1alpha1 "github.com/stacklok/toolhive/cmd/thv-operator/api/v1alpha1"
"github.com/stacklok/toolhive/cmd/thv-operator/controllers"
ctrlutil "github.com/stacklok/toolhive/cmd/thv-operator/pkg/controllerutil"
)

var (
cfg *rest.Config
k8sClient client.Client
testEnv *envtest.Environment
ctx context.Context
cancel context.CancelFunc
)

func TestControllers(t *testing.T) {
t.Parallel()
RegisterFailHandler(Fail)
RunSpecs(t, "MCPExternalAuthConfig Controller Suite")
}

var _ = BeforeSuite(func() {
logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true), zap.Level(zapcore.DebugLevel)))

ctx, cancel = context.WithCancel(context.TODO())

By("bootstrapping test environment")
testEnv = &envtest.Environment{
CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "..", "deploy", "charts", "operator-crds", "crds")},
ErrorIfCRDPathMissing: true,
}

var err error
// cfg is defined in this file globally.
cfg, err = testEnv.Start()
Expect(err).NotTo(HaveOccurred())
Expect(cfg).NotTo(BeNil())

err = mcpv1alpha1.AddToScheme(scheme.Scheme)
Expect(err).NotTo(HaveOccurred())

// Add other schemes that the controllers use
err = appsv1.AddToScheme(scheme.Scheme)
Expect(err).NotTo(HaveOccurred())

err = corev1.AddToScheme(scheme.Scheme)
Expect(err).NotTo(HaveOccurred())

err = rbacv1.AddToScheme(scheme.Scheme)
Expect(err).NotTo(HaveOccurred())

//+kubebuilder:scaffold:scheme

k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
Expect(err).NotTo(HaveOccurred())
Expect(k8sClient).NotTo(BeNil())

// Start the controller manager
k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{
Scheme: scheme.Scheme,
Metrics: metricsserver.Options{
BindAddress: "0", // Disable metrics server for tests to avoid port conflicts
},
HealthProbeBindAddress: "0", // Disable health probe for tests
})
Expect(err).ToNot(HaveOccurred())

// Register the MCPExternalAuthConfig controller
err = (&controllers.MCPExternalAuthConfigReconciler{
Client: k8sManager.GetClient(),
Scheme: k8sManager.GetScheme(),
}).SetupWithManager(k8sManager)
Expect(err).ToNot(HaveOccurred())

// Register the MCPServer controller (needed for testing integration)
err = (&controllers.MCPServerReconciler{
Client: k8sManager.GetClient(),
Scheme: k8sManager.GetScheme(),
PlatformDetector: ctrlutil.NewSharedPlatformDetector(),
}).SetupWithManager(k8sManager)
Expect(err).ToNot(HaveOccurred())

// Start the manager in a goroutine
go func() {
defer GinkgoRecover()
err = k8sManager.Start(ctx)
Expect(err).ToNot(HaveOccurred(), "failed to run manager")
}()

})

var _ = AfterSuite(func() {
By("tearing down the test environment")
cancel()
// Give it some time to shut down gracefully
time.Sleep(100 * time.Millisecond)
err := testEnv.Stop()
Expect(err).NotTo(HaveOccurred())
})

This file was deleted.

This file was deleted.

Loading
Loading