🧪 test: add operator reconcile coverage

This commit is contained in:
2026-08-13 02:45:40 +07:00
parent 8a73e50e2c
commit 6fedbeedde
15 changed files with 1543 additions and 61 deletions
@@ -0,0 +1,103 @@
package controller
import (
"testing"
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"
"k8s.io/apimachinery/pkg/types"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
v1alpha1 "github.com/YuzuZensai/Minikura/operator/api/v1alpha1"
)
func testScheme(t *testing.T) *runtime.Scheme {
t.Helper()
s := runtime.NewScheme()
if err := clientgoscheme.AddToScheme(s); err != nil {
t.Fatalf("add client-go scheme: %v", err)
}
if err := v1alpha1.AddToScheme(s); err != nil {
t.Fatalf("add v1alpha1 scheme: %v", err)
}
return s
}
func newFakeClient(t *testing.T, objs ...client.Object) client.Client {
t.Helper()
return newInterceptedClient(t, interceptor.Funcs{}, objs...)
}
func newInterceptedClient(t *testing.T, funcs interceptor.Funcs, objs ...client.Object) client.Client {
t.Helper()
return fake.NewClientBuilder().
WithScheme(testScheme(t)).
WithStatusSubresource(
&v1alpha1.MinecraftServer{},
&v1alpha1.ReverseProxyServer{},
&appsv1.Deployment{},
&appsv1.StatefulSet{},
&corev1.Service{},
).
WithObjects(objs...).
WithInterceptorFuncs(funcs).
Build()
}
func requestFor(obj client.Object) reconcile.Request {
return reconcile.Request{NamespacedName: types.NamespacedName{
Name: obj.GetName(),
Namespace: obj.GetNamespace(),
}}
}
func testMinecraft(name string, kind v1alpha1.ServerKind) *v1alpha1.MinecraftServer {
return &v1alpha1.MinecraftServer{
TypeMeta: metav1.TypeMeta{
APIVersion: v1alpha1.GroupVersion.String(),
Kind: "MinecraftServer",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: "minikura",
UID: types.UID("uid-" + name),
Generation: 1,
},
Spec: v1alpha1.MinecraftServerSpec{
Type: kind,
ListenPort: 25565,
ServiceType: v1alpha1.ExposureClusterIP,
JarType: "PAPER",
MinecraftVersion: "1.20.4",
StorageSize: "10Gi",
},
}
}
func testProxy(name string, kind v1alpha1.ProxyKind) *v1alpha1.ReverseProxyServer {
return &v1alpha1.ReverseProxyServer{
TypeMeta: metav1.TypeMeta{
APIVersion: v1alpha1.GroupVersion.String(),
Kind: "ReverseProxyServer",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: "minikura",
UID: types.UID("uid-" + name),
Generation: 1,
},
Spec: v1alpha1.ReverseProxyServerSpec{
Type: kind,
ExternalAddress: "play.example.com",
ExternalPort: 25565,
ListenPort: 25577,
ServiceType: v1alpha1.ExposureLoadBalancer,
},
}
}