...

Source file src/edge-infra.dev/pkg/edge/datasync/controllers/couchctl/database_controller_test.go

Documentation: edge-infra.dev/pkg/edge/datasync/controllers/couchctl

     1  //nolint:dupl
     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) { //nolint:dupl
    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