//nolint:dupl package couchctl import ( "fmt" "testing" "github.com/stretchr/testify/require" "gotest.tools/v3/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/edge/constants/api/cluster" "edge-infra.dev/pkg/edge/constants/api/fleet" dsapi "edge-infra.dev/pkg/edge/datasync/apis/v1alpha1" "edge-infra.dev/pkg/edge/datasync/couchdb" "edge-infra.dev/test/f2" "edge-infra.dev/test/f2/x/ktest" ) func TestDatabaseReconciler(t *testing.T) { //nolint:dupl fin := f2.NewFeature("CouchDatabaseReconciler"). WithLabel(_fleetType, fleet.Store, fleet.CouchDB). WithLabel(_clusterType, cluster.Generic, cluster.DSDS, cluster.GKE). Setup("CouchDBDatabase Created", func(ctx f2.Context, t *testing.T) f2.Context { k := ktest.FromContextT(ctx, t) k.WaitOn(t, k.ObjExists(couchDBServer)) assert.NilError(t, client.IgnoreAlreadyExists(k.Client.Create(ctx, couchDBDatabase))) return ctx }). Test("CouchDBServer Ready", testReady(couchDBServer)). Test("CouchDBDatabase Ready", testReady(couchDBDatabase)). Test("CouchDBDatabase Created", func(ctx f2.Context, t *testing.T) f2.Context { k := ktest.FromContextT(ctx, t) cc, err := couchdbServerClient(ctx, k.Client, couchDBServer) require.NoError(t, err) exists, err := cc.CheckIfDBExists(ctx, couchDBDatabase.Name) require.NoError(t, err) require.True(t, exists) return ctx }). Test("Couchdb Database Security Exist", func(ctx f2.Context, t *testing.T) f2.Context { k := ktest.FromContextT(ctx, t) cc, err := couchdbServerClient(ctx, k.Client, couchDBServer) require.NoError(t, err) security := couchdbSecurity(couchDBDatabase) exists, err := cc.CheckDBUsersAndRoles(ctx, security, couchDBDatabase.Name) require.NoError(t, err) require.True(t, exists) return ctx }). Feature() f.Test(t, fin) } func newCouchDBDatabase(dbName string, server *dsapi.CouchDBServer) *dsapi.CouchDBDatabase { return &dsapi.CouchDBDatabase{ TypeMeta: metav1.TypeMeta{ APIVersion: dsapi.GroupVersion.String(), Kind: "CouchDBDatabase", }, ObjectMeta: metav1.ObjectMeta{ Name: dbName, Namespace: server.Namespace, }, Spec: dsapi.CouchDBDatabaseSpec{ Name: dbName, ServerRef: server.ServerRef(), Security: dsapi.Security{ Admins: dsapi.NameRole{ Names: []string{fmt.Sprintf("%s-user", dbName)}, Roles: []string{couchdb.ReadOnlyUser}, }, }, }, } }