Initial Phoenix Sankofa Cloud setup
- Complete project structure with Next.js frontend - GraphQL API backend with Apollo Server - Portal application with NextAuth - Crossplane Proxmox provider - GitOps configurations - CI/CD pipelines - Testing infrastructure (Vitest, Jest, Go tests) - Error handling and monitoring - Security hardening - UI component library - Documentation
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
package virtualmachine
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
|
||||
proxmoxv1alpha1 "github.com/yourorg/crossplane-provider-proxmox/apis/v1alpha1"
|
||||
)
|
||||
|
||||
func TestProxmoxVMReconciler_Reconcile(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
vm *proxmoxv1alpha1.ProxmoxVM
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "valid VM",
|
||||
vm: &proxmoxv1alpha1.ProxmoxVM{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test-vm",
|
||||
Namespace: "default",
|
||||
},
|
||||
Spec: proxmoxv1alpha1.ProxmoxVMSpec{
|
||||
ForProvider: proxmoxv1alpha1.ProxmoxVMParameters{
|
||||
Node: "pve1",
|
||||
Name: "test-vm",
|
||||
CPU: 2,
|
||||
Memory: "4Gi",
|
||||
Disk: "50Gi",
|
||||
Storage: "local-lvm",
|
||||
Network: "vmbr0",
|
||||
Image: "ubuntu-22.04-cloud",
|
||||
Site: "us-east-1",
|
||||
},
|
||||
ProviderConfigReference: proxmoxv1alpha1.ProviderConfigReference{
|
||||
Name: "test-provider-config",
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
scheme := runtime.NewScheme()
|
||||
_ = proxmoxv1alpha1.AddToScheme(scheme)
|
||||
|
||||
fakeClient := fake.NewClientBuilder().
|
||||
WithScheme(scheme).
|
||||
WithObjects(tt.vm).
|
||||
Build()
|
||||
|
||||
r := &ProxmoxVMReconciler{
|
||||
Client: fakeClient,
|
||||
Scheme: scheme,
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
req := ctrl.Request{
|
||||
NamespacedName: client.ObjectKeyFromObject(tt.vm),
|
||||
}
|
||||
|
||||
_, err := r.Reconcile(ctx, req)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("Reconcile() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestProxmoxVMReconciler_getCredentials(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
providerConfig *proxmoxv1alpha1.ProviderConfig
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "missing secret reference",
|
||||
providerConfig: &proxmoxv1alpha1.ProviderConfig{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test-config",
|
||||
},
|
||||
Spec: proxmoxv1alpha1.ProviderConfigSpec{
|
||||
Credentials: proxmoxv1alpha1.ProviderCredentials{
|
||||
Source: proxmoxv1alpha1.CredentialsSourceSecret,
|
||||
},
|
||||
},
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
scheme := runtime.NewScheme()
|
||||
_ = proxmoxv1alpha1.AddToScheme(scheme)
|
||||
|
||||
fakeClient := fake.NewClientBuilder().
|
||||
WithScheme(scheme).
|
||||
Build()
|
||||
|
||||
r := &ProxmoxVMReconciler{
|
||||
Client: fakeClient,
|
||||
Scheme: scheme,
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
_, err := r.getCredentials(ctx, tt.providerConfig)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("getCredentials() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user