@@ -640,6 +640,47 @@ public void createTable_WhenMetadataTableExists_ShouldCreateOnlyTable()
640640 .isInstanceOf (IllegalArgumentException .class );
641641 }
642642
643+ @ Test
644+ public void createTable_WhenActualMetadataTableCreationIsDelayed_ShouldFailAfterRetries () {
645+ // Arrange
646+ // prepare tableIsActiveResponse
647+ TableDescription tableDescription = mock (TableDescription .class );
648+ when (tableIsActiveResponse .table ()).thenReturn (tableDescription );
649+ when (tableDescription .tableStatus ()).thenReturn (TableStatus .ACTIVE );
650+ when (client .describeTable (any (DescribeTableRequest .class ))).thenReturn (tableIsActiveResponse );
651+ // prepare backupIsEnabledResponse
652+ DescribeContinuousBackupsResponse backupIsEnabledResponse =
653+ mock (DescribeContinuousBackupsResponse .class );
654+ when (client .describeContinuousBackups (any (DescribeContinuousBackupsRequest .class )))
655+ .thenReturn (backupIsEnabledResponse );
656+ ContinuousBackupsDescription continuousBackupsDescription =
657+ mock (ContinuousBackupsDescription .class );
658+ when (backupIsEnabledResponse .continuousBackupsDescription ())
659+ .thenReturn (continuousBackupsDescription );
660+ when (continuousBackupsDescription .continuousBackupsStatus ())
661+ .thenReturn (ContinuousBackupsStatus .ENABLED );
662+ when (client .putItem (any (PutItemRequest .class ))).thenThrow (ResourceNotFoundException .class );
663+ TableMetadata metadata =
664+ TableMetadata .newBuilder ()
665+ .addPartitionKey ("c1" )
666+ .addClusteringKey ("c2" , Order .DESC )
667+ .addClusteringKey ("c3" , Order .ASC )
668+ .addColumn ("c1" , DataType .TEXT )
669+ .addColumn ("c2" , DataType .BIGINT )
670+ .addColumn ("c3" , DataType .BOOLEAN )
671+ .addColumn ("c4" , DataType .INT )
672+ .addColumn ("c5" , DataType .BLOB )
673+ .addColumn ("c6" , DataType .DOUBLE )
674+ .addColumn ("c7" , DataType .FLOAT )
675+ .addSecondaryIndex ("c4" )
676+ .build ();
677+
678+ // Act Assert
679+ assertThatThrownBy (() -> admin .createTable (NAMESPACE , TABLE , metadata ))
680+ .isInstanceOf (ExecutionException .class );
681+ verify (client , times (DynamoAdmin .MAX_RETRY_COUNT + 1 )).putItem (any (PutItemRequest .class ));
682+ }
683+
643684 @ Test
644685 public void dropTable_WithNoMetadataLeft_ShouldDropTableAndDeleteMetadata ()
645686 throws ExecutionException {
0 commit comments