@@ -656,6 +656,51 @@ public void createTable_WhenMetadataTableExists_ShouldCreateOnlyTable()
656656 .isInstanceOf (IllegalArgumentException .class );
657657 }
658658
659+ @ Test
660+ public void createTable_WhenActualMetadataTableCreationIsDelayed_ShouldFailAfterRetries () {
661+ // Arrange
662+ // prepare tableIsActiveResponse
663+ TableDescription tableDescription = mock (TableDescription .class );
664+ when (tableIsActiveResponse .table ()).thenReturn (tableDescription );
665+ when (tableDescription .tableStatus ()).thenReturn (TableStatus .ACTIVE );
666+ when (client .describeTable (any (DescribeTableRequest .class ))).thenReturn (tableIsActiveResponse );
667+ // prepare backupIsEnabledResponse
668+ DescribeContinuousBackupsResponse backupIsEnabledResponse =
669+ mock (DescribeContinuousBackupsResponse .class );
670+ when (client .describeContinuousBackups (any (DescribeContinuousBackupsRequest .class )))
671+ .thenReturn (backupIsEnabledResponse );
672+ ContinuousBackupsDescription continuousBackupsDescription =
673+ mock (ContinuousBackupsDescription .class );
674+ when (backupIsEnabledResponse .continuousBackupsDescription ())
675+ .thenReturn (continuousBackupsDescription );
676+ when (continuousBackupsDescription .continuousBackupsStatus ())
677+ .thenReturn (ContinuousBackupsStatus .ENABLED );
678+ when (client .putItem (any (PutItemRequest .class ))).thenThrow (ResourceNotFoundException .class );
679+ TableMetadata metadata =
680+ TableMetadata .newBuilder ()
681+ .addPartitionKey ("c1" )
682+ .addClusteringKey ("c2" , Order .DESC )
683+ .addClusteringKey ("c3" , Order .ASC )
684+ .addColumn ("c1" , DataType .TEXT )
685+ .addColumn ("c2" , DataType .BIGINT )
686+ .addColumn ("c3" , DataType .BOOLEAN )
687+ .addColumn ("c4" , DataType .INT )
688+ .addColumn ("c5" , DataType .BLOB )
689+ .addColumn ("c6" , DataType .DOUBLE )
690+ .addColumn ("c7" , DataType .FLOAT )
691+ .addColumn ("c8" , DataType .DATE )
692+ .addColumn ("c9" , DataType .TIME )
693+ .addColumn ("c10" , DataType .TIMESTAMP )
694+ .addColumn ("c11" , DataType .TIMESTAMPTZ )
695+ .addSecondaryIndex ("c4" )
696+ .build ();
697+
698+ // Act Assert
699+ assertThatThrownBy (() -> admin .createTable (NAMESPACE , TABLE , metadata ))
700+ .isInstanceOf (ExecutionException .class );
701+ verify (client , times (DynamoAdmin .MAX_RETRY_COUNT + 1 )).putItem (any (PutItemRequest .class ));
702+ }
703+
659704 @ Test
660705 public void dropTable_WithNoMetadataLeft_ShouldDropTableAndDeleteMetadata ()
661706 throws ExecutionException {
0 commit comments