1
2 package couchctl
3
4 import (
5 "fmt"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9 "gotest.tools/v3/assert"
10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11 "sigs.k8s.io/controller-runtime/pkg/client"
12
13 "edge-infra.dev/pkg/edge/constants/api/cluster"
14 "edge-infra.dev/pkg/edge/constants/api/fleet"
15 dsapi "edge-infra.dev/pkg/edge/datasync/apis/v1alpha1"
16 "edge-infra.dev/pkg/edge/datasync/couchdb"
17 "edge-infra.dev/test/f2"
18 "edge-infra.dev/test/f2/x/ktest"
19 )
20
21 func TestDatabaseReconciler(t *testing.T) {
22 fin := f2.NewFeature("CouchDatabaseReconciler").
23 WithLabel(_fleetType, fleet.Store, fleet.CouchDB).
24 WithLabel(_clusterType, cluster.Generic, cluster.DSDS, cluster.GKE).
25 Setup("CouchDBDatabase Created", func(ctx f2.Context, t *testing.T) f2.Context {
26 k := ktest.FromContextT(ctx, t)
27 k.WaitOn(t, k.ObjExists(couchDBServer))
28 assert.NilError(t, client.IgnoreAlreadyExists(k.Client.Create(ctx, couchDBDatabase)))
29 return ctx
30 }).
31 Test("CouchDBServer Ready", testReady(couchDBServer)).
32 Test("CouchDBDatabase Ready", testReady(couchDBDatabase)).
33 Test("CouchDBDatabase Created", func(ctx f2.Context, t *testing.T) f2.Context {
34 k := ktest.FromContextT(ctx, t)
35 cc, err := couchdbServerClient(ctx, k.Client, couchDBServer)
36 require.NoError(t, err)
37
38 exists, err := cc.CheckIfDBExists(ctx, couchDBDatabase.Name)
39 require.NoError(t, err)
40 require.True(t, exists)
41 return ctx
42 }).
43 Test("Couchdb Database Security Exist", func(ctx f2.Context, t *testing.T) f2.Context {
44 k := ktest.FromContextT(ctx, t)
45 cc, err := couchdbServerClient(ctx, k.Client, couchDBServer)
46 require.NoError(t, err)
47
48 security := couchdbSecurity(couchDBDatabase)
49 exists, err := cc.CheckDBUsersAndRoles(ctx, security, couchDBDatabase.Name)
50 require.NoError(t, err)
51 require.True(t, exists)
52 return ctx
53 }).
54 Feature()
55
56 f.Test(t, fin)
57 }
58
59 func newCouchDBDatabase(dbName string, server *dsapi.CouchDBServer) *dsapi.CouchDBDatabase {
60 return &dsapi.CouchDBDatabase{
61 TypeMeta: metav1.TypeMeta{
62 APIVersion: dsapi.GroupVersion.String(),
63 Kind: "CouchDBDatabase",
64 },
65 ObjectMeta: metav1.ObjectMeta{
66 Name: dbName,
67 Namespace: server.Namespace,
68 },
69 Spec: dsapi.CouchDBDatabaseSpec{
70 Name: dbName,
71 ServerRef: server.ServerRef(),
72 Security: dsapi.Security{
73 Admins: dsapi.NameRole{
74 Names: []string{fmt.Sprintf("%s-user", dbName)},
75 Roles: []string{couchdb.ReadOnlyUser},
76 },
77 },
78 },
79 }
80 }
81
View as plain text