Skip to content

Commit

Permalink
Add UTs - sharding-driver (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
shashankrnr32 committed Apr 14, 2023
1 parent d65b74f commit 50437fb
Show file tree
Hide file tree
Showing 9 changed files with 816 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.alpha.mongodb.sharding.core.client;

import com.alpha.mongodb.sharding.core.configuration.CollectionShardingOptions;
import com.alpha.mongodb.sharding.core.database.CollectionShardedReactiveMongoDatabase;
import com.mongodb.ClientSessionOptions;
import com.mongodb.connection.ClusterDescription;
import com.mongodb.reactivestreams.client.ChangeStreamPublisher;
Expand All @@ -14,6 +15,11 @@

import java.util.List;

/**
* Collection Sharded Reactive Mongo Client
*
* @author Shashank Sharma
*/
public class CollectionShardedReactiveMongoClient implements ShardedReactiveMongoClient {
private final CollectionShardingOptions shardingOptions;

Expand All @@ -28,7 +34,7 @@ public CollectionShardedReactiveMongoClient(MongoClient mongoClient,

@Override
public MongoDatabase getDatabase(String s) {
return delegatedMongoClient.getDatabase(s);
return new CollectionShardedReactiveMongoDatabase(delegatedMongoClient.getDatabase(s), shardingOptions);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.alpha.mongodb.sharding.core.client;

import com.alpha.mongodb.sharding.core.configuration.CompositeShardingOptions;
import com.mongodb.reactivestreams.client.MongoClient;

import java.util.Map;
import java.util.stream.Collectors;

/**
* Composite Sharded Reactive Mongo Client
*
* @author Shashank Sharma
*/
public class CompositeShardedReactiveMongoClient extends DatabaseShardedReactiveMongoClient {

public CompositeShardedReactiveMongoClient(Map<String, MongoClient> delegatedMongoClientMap, CompositeShardingOptions shardingOptions) {
super(delegatedMongoClientMap.entrySet().stream().collect(
Collectors.toMap(Map.Entry::getKey, v -> new CollectionShardedReactiveMongoClient(
v.getValue(), shardingOptions.getDelegatedCollectionShardingOptions()))), shardingOptions);
}

public CompositeShardedReactiveMongoClient(MongoClient delegatedMongoClient, CompositeShardingOptions shardingOptions) {
this(shardingOptions.getDefaultDatabaseHintsSet().stream().collect(Collectors.toMap(h -> h, h -> delegatedMongoClient)), shardingOptions);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public MongoCollection<Document> getCollection(String s) {

@Override
public <T> MongoCollection<T> getCollection(String s, Class<T> aClass) {
return delegatedMongoDatabase.getCollection(s, aClass);
return delegatedMongoDatabase.getCollection(resolveCollectionName(s), aClass);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ public Publisher<String> listCollectionNames() {

@Override
public Publisher<String> listCollectionNames(ClientSession clientSession) {
return delegatedMongoDatabase.listCollectionNames();
return delegatedMongoDatabase.listCollectionNames(clientSession);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package com.alpha.mongodb.sharding.core.client;

import com.alpha.mongodb.sharding.core.configuration.CollectionShardingOptions;
import com.alpha.mongodb.sharding.core.database.CollectionShardedReactiveMongoDatabase;
import com.alpha.mongodb.sharding.core.fixture.TestEntity1;
import com.mongodb.ClientSessionOptions;
import com.mongodb.reactivestreams.client.ClientSession;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoDatabase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

import java.util.ArrayList;
import java.util.stream.IntStream;

import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class CollectionShardedReactiveMongoClientTest {

CollectionShardingOptions collectionShardingOptions =
CollectionShardingOptions.withIntegerStreamHints(IntStream.range(0, 3));

MongoClient mockMongoClient = mock(MongoClient.class);

ClientSessionOptions mockClientSessionOptions = mock(ClientSessionOptions.class);
ClientSession mockClientSession = mock(ClientSession.class);

@Test
public void testGetDatabase() {
MongoDatabase mockMongoDatabase = mock(MongoDatabase.class);
when(mockMongoClient.getDatabase("TEST")).thenReturn(mockMongoDatabase);
MongoDatabase database = getFixture().getDatabase("TEST");
verify(mockMongoClient).getDatabase("TEST");
assertTrue(database instanceof CollectionShardedReactiveMongoDatabase);
}

@Test
public void testStartSession() {
getFixture().startSession();
verify(mockMongoClient).startSession();
}

@Test
public void testStartSessionWithClientSessionOptions() {
getFixture().startSession(mockClientSessionOptions);
verify(mockMongoClient).startSession(mockClientSessionOptions);
}

@Test
public void testClose() {
getFixture().close();
verify(mockMongoClient).close();
}

@Test
public void testListDatabaseNames() {
getFixture().listDatabaseNames();
verify(mockMongoClient).listDatabaseNames();
}

@Test
public void testListDatabaseNamesWithClientSession() {
getFixture().listDatabaseNames(mockClientSession);
verify(mockMongoClient).listDatabaseNames(mockClientSession);
}

@Test
public void testListDatabases() {
getFixture().listDatabases();
verify(mockMongoClient).listDatabases();
}

@Test
public void testListDatabasesWithEntity() {
getFixture().listDatabases(TestEntity1.class);
verify(mockMongoClient).listDatabases(TestEntity1.class);
}

@Test
public void testListDatabasesWithClientSession() {
getFixture().listDatabases(mockClientSession);
verify(mockMongoClient).listDatabases(mockClientSession);

}

@Test
public void testListDatabasesWithClientSessionAndEntityClass() {
getFixture().listDatabases(mockClientSession, TestEntity1.class);
verify(mockMongoClient).listDatabases(mockClientSession, TestEntity1.class);
}

@Test
public void testWatch() {
getFixture().watch();
verify(mockMongoClient).watch();
}

@Test
public void testWatchWithEntityClass() {
getFixture().watch(TestEntity1.class);
verify(mockMongoClient).watch(TestEntity1.class);
}

@Test
public void testWatchWithClientSession() {
getFixture().watch(mockClientSession);
verify(mockMongoClient).watch(mockClientSession);
}

@Test
public void testWatchWithList() {
getFixture().watch(new ArrayList<>());
verify(mockMongoClient).watch(anyList());
}

@Test
public void testWatchWithListAndEntityCLass() {
getFixture().watch(new ArrayList<>(), TestEntity1.class);
verify(mockMongoClient).watch(anyList(), eq(TestEntity1.class));
}

@Test
public void testWatchWithClientSessionAndEntityClass() {
getFixture().watch(mockClientSession, TestEntity1.class);
verify(mockMongoClient).watch(mockClientSession, TestEntity1.class);
}

@Test
public void testWatchWithClientSessionAndList() {
getFixture().watch(mockClientSession, new ArrayList<>());
verify(mockMongoClient).watch(eq(mockClientSession), anyList());
}

@Test
public void testWatchWithCLientSessionAndListAndEntityClass() {
getFixture().watch(mockClientSession, new ArrayList<>(), TestEntity1.class);
verify(mockMongoClient).watch(eq(mockClientSession), anyList(), eq(TestEntity1.class));
}

@Test
public void getClusterDescription() {
getFixture().getClusterDescription();
verify(mockMongoClient).getClusterDescription();
}

public MongoClient getFixture() {
return new CollectionShardedReactiveMongoClient(mockMongoClient, collectionShardingOptions);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.alpha.mongodb.sharding.core.client;

import com.alpha.mongodb.sharding.core.configuration.CompositeShardingOptions;
import com.mongodb.reactivestreams.client.MongoClient;
import org.junit.Test;

import java.util.stream.IntStream;

import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;

public class CompositeShardedReactiveMongoClientTest {

CompositeShardingOptions compositeShardingOptions =
CompositeShardingOptions.withIntegerStreamHints(IntStream.range(0, 3), IntStream.range(0, 3));

MongoClient mongoClient = mock(MongoClient.class);

@Test
public void testConstructor() {
assertNotNull(new CompositeShardedReactiveMongoClient(mongoClient, compositeShardingOptions));
}

}
Loading

0 comments on commit 50437fb

Please sign in to comment.