...
1 package cushion
2
3 import (
4 "context"
5 "testing"
6
7 corev1 "k8s.io/api/core/v1"
8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9 "k8s.io/apimachinery/pkg/runtime"
10 "k8s.io/apimachinery/pkg/types"
11 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
12 "sigs.k8s.io/controller-runtime/pkg/client"
13 "sigs.k8s.io/controller-runtime/pkg/client/fake"
14
15 dsapi "edge-infra.dev/pkg/edge/datasync/apis/v1alpha1"
16 "edge-infra.dev/pkg/edge/datasync/couchdb"
17 )
18
19 type namePair struct {
20 DBName string
21 K8sDBName string
22 }
23
24 var (
25 namePairs = []namePair{
26 {"db_1", "db-1"},
27 {"DB-2", "db-2"},
28 }
29 )
30
31 func TestResourceMigration(t *testing.T) {
32 ctx := context.Background()
33 scheme := runtime.NewScheme()
34 utilruntime.Must(corev1.AddToScheme(scheme))
35 utilruntime.Must(dsapi.AddToScheme(scheme))
36
37 cl := fake.NewClientBuilder().
38 WithScheme(scheme).
39 WithRuntimeObjects(&corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: cushionNamespace}}).
40 Build()
41
42 for _, np := range namePairs {
43 nn := types.NamespacedName{Name: np.K8sDBName, Namespace: cushionNamespace}
44 k8sDB := newCouchDBDatabase(nn, normalizeDBName(np.DBName), couchdb.Namespace)
45 k8sDB.SetLabels(map[string]string{})
46 err := cl.Create(ctx, k8sDB)
47 if err != nil {
48 t.Errorf("Error creating k8s db %s: %v", k8sDB.Name, err)
49 }
50 }
51
52 k8sDBs := &dsapi.CouchDBDatabaseList{}
53 err := cl.List(ctx, k8sDBs, &client.ListOptions{Namespace: cushionNamespace})
54 if err != nil {
55 t.Errorf("Error listing k8s dbs: %v", err)
56 }
57 err = migrateCushionK8sDBs(ctx, cl)
58 if err != nil {
59 t.Errorf("Error migrating cushion k8s dbs: %v", err)
60 }
61 for _, np := range namePairs {
62 k8sDB := &dsapi.CouchDBDatabase{}
63 nn := types.NamespacedName{Name: K8sDBName(np.DBName), Namespace: cushionNamespace}
64 err = cl.Get(ctx, nn, k8sDB)
65 if err != nil {
66 t.Errorf("Error getting k8s db %s: %s, %v", k8sDB.Name, nn, err)
67 }
68 if _, ok := k8sDB.Labels[componentLabel]; !ok {
69 t.Errorf("Component label not found on k8s db %s", k8sDB.Name)
70 }
71 }
72 }
73
View as plain text