Skip to content

Commit 951cd45

Browse files
committed
Test boilerplate
1 parent 648b815 commit 951cd45

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

api/v1/mdb/mongodb_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ type MongoDbSpec struct {
443443
// +kubebuilder:pruning:PreserveUnknownFields
444444
// +optional
445445
MemberConfig []automationconfig.MemberOptions `json:"memberConfig,omitempty"`
446+
447+
ClusterSpecList ClusterSpecList `json:"clusterSpecList,omitempty"`
446448
}
447449

448450
func (m *MongoDbSpec) GetExternalDomain() *string {

api/v1/mdb/mongodbbuilder.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ func NewDefaultReplicaSetBuilder() *MongoDBBuilder {
2323
return defaultMongoDB(ReplicaSet)
2424
}
2525

26+
func NewDefaultMultiReplicaSetBuilder() *MongoDBBuilder {
27+
return defaultMongoDB(ReplicaSet).
28+
SetMultiClusterTopology().
29+
SetDefaultClusterSpecList()
30+
}
31+
2632
func NewDefaultShardedClusterBuilder() *MongoDBBuilder {
2733
return defaultMongoDB(ShardedCluster).
2834
SetShardCountSpec(3).
@@ -264,6 +270,24 @@ func (b *MongoDBBuilder) AddDummyOpsManagerConfig() *MongoDBBuilder {
264270
return b
265271
}
266272

273+
func (b *MongoDBBuilder) SetDefaultClusterSpecList() *MongoDBBuilder {
274+
b.mdb.Spec.ClusterSpecList = ClusterSpecList{
275+
{
276+
ClusterName: "test-cluster-0",
277+
Members: 1,
278+
},
279+
{
280+
ClusterName: "test-cluster-1",
281+
Members: 1,
282+
},
283+
{
284+
ClusterName: "test-cluster-2",
285+
Members: 1,
286+
},
287+
}
288+
return b
289+
}
290+
267291
func (b *MongoDBBuilder) SetAllClusterSpecLists(clusterSpecList ClusterSpecList) *MongoDBBuilder {
268292
b.mdb.Spec.ShardSpec.ClusterSpecList = clusterSpecList
269293
b.mdb.Spec.ConfigSrvSpec.ClusterSpecList = clusterSpecList
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package operator
2+
3+
import (
4+
"context"
5+
mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb"
6+
"github.com/mongodb/mongodb-kubernetes/controllers/om"
7+
"github.com/mongodb/mongodb-kubernetes/controllers/operator/mock"
8+
kubernetesClient "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/client"
9+
"github.com/mongodb/mongodb-kubernetes/pkg/images"
10+
"github.com/mongodb/mongodb-kubernetes/pkg/kube"
11+
"github.com/mongodb/mongodb-kubernetes/pkg/util"
12+
"github.com/stretchr/testify/assert"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
14+
"sigs.k8s.io/controller-runtime/pkg/reconcile"
15+
"testing"
16+
)
17+
18+
// NedDefaultMultiReplicaSetBuilder
19+
20+
func TestCreateMultiClusterReplicaSet(t *testing.T) {
21+
ctx := context.Background()
22+
rs := mdbv1.NewDefaultMultiReplicaSetBuilder().Build()
23+
24+
reconciler, client, _, _ := defaultMultiClusterReplicaSetReconciler(ctx, nil, "", "", mrs)
25+
checkMultiReplicaSetReconcileSuccessful(ctx, t, reconciler, rs, client, false)
26+
}
27+
28+
func checkMultiReplicaSetReconcileSuccessful(ctx context.Context, t *testing.T, reconciler reconcile.Reconciler, m *mdbv1.MongoDB, client client.Client, shouldRequeue bool) {
29+
err := client.Update(ctx, m)
30+
assert.NoError(t, err)
31+
32+
result, e := reconciler.Reconcile(ctx, requestFromObject(m))
33+
assert.NoError(t, e)
34+
if shouldRequeue {
35+
assert.True(t, result.Requeue || result.RequeueAfter > 0)
36+
} else {
37+
assert.Equal(t, reconcile.Result{RequeueAfter: util.TWENTY_FOUR_HOURS}, result)
38+
}
39+
40+
// fetch the last updates as the reconciliation loop can update the mdb resource.
41+
err = client.Get(ctx, kube.ObjectKey(m.Namespace, m.Name), m)
42+
assert.NoError(t, err)
43+
}
44+
45+
func multiClusterReplicaSetReconciler(ctx context.Context, imageUrls images.ImageUrls, initDatabaseNonStaticImageVersion, databaseNonStaticImageVersion string, m *mdbv1.MongoDB) (*ReconcileMongoDbReplicaSet, kubernetesClient.Client, map[string]client.Client, *om.CachedOMConnectionFactory) {
46+
kubeClient, omConnectionFactory := mock.NewDefaultFakeClient(m)
47+
memberClusterMap := getFakeMultiClusterMap(omConnectionFactory)
48+
return newReplicaSetReconciler(ctx, kubeClient, imageUrls, initDatabaseNonStaticImageVersion, databaseNonStaticImageVersion, false, false, memberClusterMap, omConnectionFactory.GetConnectionFunc), kubeClient, memberClusterMap, omConnectionFactory
49+
}
50+
51+
func defaultMultiClusterReplicaSetReconciler(ctx context.Context, imageUrls images.ImageUrls, initDatabaseNonStaticImageVersion, databaseNonStaticImageVersion string, rs *mdbv1.MongoDB) (*ReconcileMongoDbReplicaSet, kubernetesClient.Client, map[string]client.Client, *om.CachedOMConnectionFactory) {
52+
multiReplicaSetController, client, clusterMap, omConnectionFactory := multiClusterReplicaSetReconciler(ctx, imageUrls, initDatabaseNonStaticImageVersion, databaseNonStaticImageVersion, rs)
53+
omConnectionFactory.SetPostCreateHook(func(connection om.Connection) {
54+
connection.(*om.MockedOmConnection).Hostnames = calculateHostNamesForExternalDomains(rs)
55+
})
56+
57+
return multiReplicaSetController, client, clusterMap, omConnectionFactory
58+
}

0 commit comments

Comments
 (0)