api/controller/cleanup_cache_readiness_test.go
Rama main · réplica de lectura del repositorio original.
package controller
import (
"context"
"testing"
"github.com/goodrain/rainbond/db/model"
guard "github.com/goodrain/rainbond/pkg/cleanup"
"github.com/goodrain/rainbond/pkg/cleanup/kubeidentity"
"github.com/jinzhu/gorm"
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/client-go/kubernetes/fake"
ktesting "k8s.io/client-go/testing"
)
func configureCacheCoverageFixture(t *testing.T, database *gorm.DB, kube *fake.Clientset, binding guard.StorageRegistration, request guard.CoordinationRequest) {
t.Helper()
ctx := context.Background()
if err := database.AutoMigrate(&model.CleanupParticipant{}).Error; err != nil {
t.Fatal(err)
}
source, err := kube.CoreV1().Pods("system").Get(ctx, "chaos", metav1.GetOptions{})
if err != nil {
t.Fatal(err)
}
yes := true
source.OwnerReferences = []metav1.OwnerReference{{APIVersion: "apps/v1", Kind: "DaemonSet", Name: "chaos-owner", UID: "daemon-uid", Controller: &yes}}
if _, err := kube.CoreV1().Pods("system").Update(ctx, source, metav1.UpdateOptions{}); err != nil {
t.Fatal(err)
}
daemon := &appsv1.DaemonSet{ObjectMeta: metav1.ObjectMeta{Name: "chaos-owner", Namespace: "system", UID: "daemon-uid", ResourceVersion: "1", Generation: 1}, Spec: appsv1.DaemonSetSpec{Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"name": "rbd-chaos"}}, Template: corev1.PodTemplateSpec{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"name": "rbd-chaos"}}, Spec: *source.Spec.DeepCopy()}}, Status: appsv1.DaemonSetStatus{ObservedGeneration: 1, DesiredNumberScheduled: 1, CurrentNumberScheduled: 1, UpdatedNumberScheduled: 1, NumberReady: 1, NumberAvailable: 1}}
if _, err := kube.AppsV1().DaemonSets("system").Create(ctx, daemon, metav1.CreateOptions{}); err != nil {
t.Fatal(err)
}
kube.PrependReactor("list", "pods", func(action ktesting.Action) (bool, runtime.Object, error) {
obj, err := kube.Tracker().List(corev1.SchemeGroupVersion.WithResource("pods"), corev1.SchemeGroupVersion.WithKind("Pod"), action.GetNamespace())
if err != nil {
return true, nil, err
}
obj.(*corev1.PodList).ResourceVersion = "snapshot"
return true, obj, nil
})
member, err := kubeidentity.InspectCacheBuilder(ctx, kube, "system", "chaos", string(source.UID), binding)
if err != nil {
t.Fatal(err)
}
if err := guard.RegisterParticipant(database, member); err != nil {
t.Fatal(err)
}
_, ready, err := guard.CertifyManagedCacheWriters(database, binding, &request, func() ([]guard.ParticipantRegistration, error) {
return kubeidentity.InspectCacheWriterCoverage(ctx, kube, "system", binding)
})
if err != nil || !ready {
t.Fatal("fixture coverage not certified", err)
}
}