Olares/framework/app-service/controllers/appmgr_controller_test.go
dkeven af9e1993d1
refactor: integrate app service into main repo (#2156)
* refactor: integrate app service into main repo

* Delete framework/app-service/LICENSE.md

* fix(manifest): remove unused manager deploy file

* refactor: change the output dir of CRDs to the standard path

---------

Co-authored-by: Peng Peng <billpengpeng@gmail.com>
2025-12-05 11:21:36 +08:00

344 lines
10 KiB
Go

package controllers
//
//import (
// "bytetrade.io/web3os/app-service/pkg/appinstaller"
// "bytetrade.io/web3os/app-service/pkg/kubesphere"
// "context"
// "encoding/json"
// "github.com/agiledragon/gomonkey/v2"
// . "github.com/onsi/ginkgo/v2"
// . "github.com/onsi/gomega"
// "k8s.io/apimachinery/pkg/types"
// "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/client/fake"
// "sigs.k8s.io/controller-runtime/pkg/reconcile"
//
// appv1alpha1 "bytetrade.io/web3os/app-service/api/app.bytetrade.io/v1alpha1"
// appsv1 "k8s.io/api/apps/v1"
// corev1 "k8s.io/api/core/v1"
// metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
// "k8s.io/apimachinery/pkg/runtime"
//)
//
//type mockImageManager struct{}
//
//func (m *mockImageManager) UpdateStatus(ctx context.Context, name, state, message string) error {
// return nil
//}
//
//func (m *mockImageManager) Create(ctx context.Context, am *appv1alpha1.ApplicationManager, refs []appv1alpha1.Ref) error {
// return nil
//}
//
//func (m *mockImageManager) PollDownloadProgress(ctx context.Context, am *appv1alpha1.ApplicationManager) error {
// return nil
//}
//
//var _ = Describe("ApplicationManagerController", func() {
// var (
// ctx context.Context
// cancel context.CancelFunc
// k8sClient client.Client
// controller *ApplicationManagerController
// testScheme *runtime.Scheme
// mockImgClient *mockImageManager
// )
// var patchForgetUsername *gomonkey.Patches
// var patchForHandleDownloading *gomonkey.Patches
// var patchForhandleDownloading *gomonkey.Patches
//
// var patchForHandleInstalling *gomonkey.Patches
// var patchForHandleInitializing *gomonkey.Patches
//
// BeforeEach(func() {
// ctx, cancel = context.WithCancel(context.Background())
//
// testScheme = runtime.NewScheme()
// Expect(scheme.AddToScheme(testScheme)).To(Succeed())
// Expect(appv1alpha1.AddToScheme(testScheme)).To(Succeed())
// Expect(corev1.AddToScheme(testScheme)).To(Succeed())
// Expect(appsv1.AddToScheme(testScheme)).To(Succeed())
//
// // 创建一个模拟的 K8s 客户端
// k8sClient = fake.NewClientBuilder().WithScheme(testScheme).Build()
//
// patchForgetUsername = gomonkey.ApplyFunc(kubesphere.GetAdminUsername, func(_ context.Context, _ *rest.Config) (string, error) {
// return "admin", nil
// })
//
// // 创建模拟的 ImageManager
// mockImgClient = &mockImageManager{}
//
// // 创建控制器
// controller = &ApplicationManagerController{
// Client: k8sClient,
// KubeConfig: &rest.Config{},
// ImageClient: mockImgClient,
// }
// patchForHandleDownloading = gomonkey.ApplyFunc(controller.HandleDownloading, func(_ context.Context, _ *appv1alpha1.ApplicationManager) error {
// return nil
// })
// patchForhandleDownloading = gomonkey.ApplyFunc(controller.handleDownloading, func(_ context.Context, _ *appv1alpha1.ApplicationManager) error {
// return nil
// })
//
// patchForHandleInstalling = gomonkey.ApplyFunc(controller.HandleInstalling, func(_ context.Context, _ *appv1alpha1.ApplicationManager) error {
// return nil
// })
// patchForHandleInitializing = gomonkey.ApplyFunc(controller.HandleInitializing, func(_ context.Context, _ *appv1alpha1.ApplicationManager) error {
// return nil
// })
// })
//
// AfterEach(func() {
// cancel()
// patchForgetUsername.Reset()
// patchForHandleDownloading.Reset()
// patchForhandleDownloading.Reset()
// patchForHandleInstalling.Reset()
// patchForHandleInitializing.Reset()
// })
//
// Context("Reconcile", func() {
// It("should handle non-existent ApplicationManager", func() {
// req := reconcile.Request{
// NamespacedName: types.NamespacedName{
// Name: "non-existent",
// },
// }
//
// result, err := controller.Reconcile(ctx, req)
// Expect(err).NotTo(HaveOccurred())
// Expect(result).To(Equal(ctrl.Result{}))
// })
//
// It("should handle ApplicationManager in Pending state", func() {
// am := &appv1alpha1.ApplicationManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ApplicationManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Type: appv1alpha1.App,
// Config: `{"chartsName": "../testdata/windows"}`,
// },
// Status: appv1alpha1.ApplicationManagerStatus{
// State: appv1alpha1.Pending,
// },
// }
// Expect(k8sClient.Create(ctx, am)).To(Succeed())
//
// node := &corev1.Node{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-node",
// },
// Status: corev1.NodeStatus{
// Conditions: []corev1.NodeCondition{
// {
// Type: corev1.NodeReady,
// Status: corev1.ConditionTrue,
// },
// },
// },
// }
// Expect(k8sClient.Create(ctx, node)).To(Succeed())
//
// req := reconcile.Request{
// NamespacedName: types.NamespacedName{
// Name: "test-app",
// },
// }
//
// result, err := controller.Reconcile(ctx, req)
// Expect(err).NotTo(HaveOccurred())
// Expect(result).To(Equal(ctrl.Result{}))
//
// updatedAm := &appv1alpha1.ApplicationManager{}
// Expect(k8sClient.Get(ctx, types.NamespacedName{Name: "test-app"}, updatedAm)).To(Succeed())
// Expect(updatedAm.Status.State).To(Equal(appv1alpha1.Downloading))
// })
// })
//
// Context("handleDownloading", func() {
// It("should handle downloading state", func() {
// appConfig := &appinstaller.ApplicationConfig{
// AppName: "test-app",
// Namespace: "default",
// OwnerName: "test-owner",
// ChartsName: "test-chart",
// }
// configBytes, err := json.Marshal(appConfig)
// Expect(err).NotTo(HaveOccurred())
//
// am := &appv1alpha1.ApplicationManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ApplicationManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Type: appv1alpha1.App,
// Config: string(configBytes),
// },
// Status: appv1alpha1.ApplicationManagerStatus{
// State: appv1alpha1.Downloading,
// },
// }
//
// node := &corev1.Node{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-node",
// },
// Status: corev1.NodeStatus{
// Conditions: []corev1.NodeCondition{
// {
// Type: corev1.NodeReady,
// Status: corev1.ConditionTrue,
// },
// },
// },
// }
// Expect(k8sClient.Create(ctx, node)).To(Succeed())
//
// im := &appv1alpha1.ImageManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ImageManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Nodes: []string{"test-node"},
// },
// Status: appv1alpha1.ImageManagerStatus{
// State: "completed",
// Message: "success",
// Conditions: map[string]map[string]map[string]string{},
// },
// }
// Expect(k8sClient.Create(ctx, im)).To(Succeed())
//
// err = controller.HandleDownloading(ctx, am)
// if err != nil {
// Expect(err.Error()).To(ContainSubstring("failed to get image refs"))
// }
//
// Expect(am.Status.State).To(Equal(appv1alpha1.Installing))
// })
// })
//
// Context("handleInstalling", func() {
// It("should handle installing state", func() {
// appConfig := &appinstaller.ApplicationConfig{
// AppName: "test-app",
// Namespace: "default",
// OwnerName: "test-owner",
// ChartsName: "test-chart",
// }
// configBytes, err := json.Marshal(appConfig)
// Expect(err).NotTo(HaveOccurred())
//
// am := &appv1alpha1.ApplicationManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ApplicationManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Type: appv1alpha1.App,
// Config: string(configBytes),
// },
// Status: appv1alpha1.ApplicationManagerStatus{
// State: appv1alpha1.Installing,
// Payload: map[string]string{
// "token": "test-token",
// },
// },
// }
//
// err = controller.HandleInstalling(ctx, am)
// if err != nil {
// Expect(err.Error()).To(ContainSubstring("failed to create helm ops"))
// }
//
//
// Expect(am.Status.State).To(Equal(appv1alpha1.Initializing))
// })
// })
//
// Context("handleInitializing", func() {
// It("should handle initializing state", func() {
// appConfig := &appinstaller.ApplicationConfig{
// AppName: "test-app",
// Namespace: "default",
// OwnerName: "test-owner",
// ChartsName: "test-chart",
// }
// configBytes, err := json.Marshal(appConfig)
// Expect(err).NotTo(HaveOccurred())
//
// am := &appv1alpha1.ApplicationManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ApplicationManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Type: appv1alpha1.App,
// Config: string(configBytes),
// },
// Status: appv1alpha1.ApplicationManagerStatus{
// State: appv1alpha1.Initializing,
// Payload: map[string]string{
// "token": "test-token",
// },
// },
// }
//
// err = controller.HandleInitializing(ctx, am)
// if err != nil {
// Expect(err.Error()).To(ContainSubstring("failed to create helm ops"))
// }
//
// Expect(am.Status.State).To(Equal(appv1alpha1.Running))
// })
// })
//
// Context("handleUninstalling", func() {
// It("should handle uninstalling state", func() {
// am := &appv1alpha1.ApplicationManager{
// ObjectMeta: metav1.ObjectMeta{
// Name: "test-app",
// },
// Spec: appv1alpha1.ApplicationManagerSpec{
// AppName: "test-app",
// AppNamespace: "default",
// AppOwner: "test-owner",
// Type: appv1alpha1.App,
// },
// Status: appv1alpha1.ApplicationManagerStatus{
// State: appv1alpha1.Uninstalling,
// Payload: map[string]string{
// "token": "test-token",
// },
// },
// }
//
// err := controller.HandleUninstalling(ctx, am)
// if err != nil {
// Expect(err.Error()).To(ContainSubstring("failed to create helm ops"))
// }
//
// Expect(am.Status.State).To(Equal(appv1alpha1.Uninstalled))
// })
// })
//})