2020import static com .datastax .oss .driver .Assertions .assertThat ;
2121import static com .datastax .oss .driver .Assertions .assertThatStage ;
2222import static org .awaitility .Awaitility .await ;
23+ import static org .mockito .ArgumentMatchers .anyBoolean ;
2324import static org .mockito .Mockito .mock ;
2425import static org .mockito .Mockito .timeout ;
2526import static org .mockito .Mockito .verify ;
3334import com .datastax .oss .driver .internal .core .context .EventBus ;
3435import com .datastax .oss .driver .internal .core .context .InternalDriverContext ;
3536import com .datastax .oss .driver .internal .core .context .NettyOptions ;
37+ import com .datastax .oss .driver .internal .core .control .ControlConnection ;
3638import com .datastax .oss .driver .internal .core .metadata .schema .parsing .SchemaParserFactory ;
3739import com .datastax .oss .driver .internal .core .metadata .schema .queries .SchemaQueriesFactory ;
3840import com .datastax .oss .driver .internal .core .metrics .MetricsFactory ;
@@ -64,6 +66,7 @@ public class MetadataManagerTest {
6466
6567 @ Mock private InternalDriverContext context ;
6668 @ Mock private NettyOptions nettyOptions ;
69+ @ Mock private ControlConnection controlConnection ;
6770 @ Mock private TopologyMonitor topologyMonitor ;
6871 @ Mock private DriverConfig config ;
6972 @ Mock private DriverExecutionProfile defaultProfile ;
@@ -85,6 +88,7 @@ public void setup() {
8588 when (context .getNettyOptions ()).thenReturn (nettyOptions );
8689
8790 when (context .getTopologyMonitor ()).thenReturn (topologyMonitor );
91+ when (context .getControlConnection ()).thenReturn (controlConnection );
8892
8993 when (defaultProfile .getDuration (DefaultDriverOption .METADATA_SCHEMA_WINDOW ))
9094 .thenReturn (Duration .ZERO );
@@ -286,6 +290,25 @@ public void should_remove_node() {
286290 assertThat (refresh .broadcastRpcAddressToRemove ).isEqualTo (broadcastRpcAddress2 );
287291 }
288292
293+ @ Test
294+ public void refreshSchema_should_work () {
295+ // Given
296+ IllegalStateException expectedException = new IllegalStateException ("Error we're testing" );
297+ when (schemaQueriesFactory .newInstance ()).thenThrow (expectedException );
298+ when (topologyMonitor .refreshNodeList ()).thenReturn (CompletableFuture .completedFuture (ImmutableList .of (mock (NodeInfo .class ))));
299+ when (topologyMonitor .checkSchemaAgreement ()).thenReturn (CompletableFuture .completedFuture (Boolean .TRUE ));
300+ when (controlConnection .init (anyBoolean (), anyBoolean (), anyBoolean ())).thenReturn (CompletableFuture .completedFuture (null ));
301+ metadataManager .refreshNodes (); // required internal state setup for this
302+ waitForPendingAdminTasks (() -> metadataManager .refreshes .size () == 1 ); // sanity check
303+
304+ // When
305+ CompletionStage <MetadataManager .RefreshSchemaResult > result = metadataManager .refreshSchema ("foo" , true , true );
306+
307+ // Then
308+ waitForPendingAdminTasks (() -> result .toCompletableFuture ().isDone ());
309+ assertThatStage (result ).isFailed (t -> assertThat (t ).isEqualTo (expectedException ));
310+ }
311+
289312 private static class TestMetadataManager extends MetadataManager {
290313
291314 private List <MetadataRefresh > refreshes = new CopyOnWriteArrayList <>();
0 commit comments