diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java index 88d61123677255356a0f915723ed5adb36d2b750..4c08a05e468438741dc29f1cd2a03fe7b983cdc1 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/JythonDropboxRecoveryTest.java @@ -106,7 +106,7 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest testCase.registrationCheckResult = RegistrationCheckResult.CHECK_FAILED; testCase.recoveryResult = RecoveryResult.RETRY_AT_CANT_CHECK_REGISTRATION_STATUS; testCases.add(testCase); - + testCase = new RecoveryTestCase("retry if storage failed"); testCase.shouldMakeFilesystemUnavailable = true; testCase.recoveryResult = RecoveryResult.RETRY_AT_STORAGE_FAILURE; @@ -712,7 +712,7 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest } // INFO: the test that checks the retry mechanism - + @DataProvider(name = "retryDP") public Object[][] retryCounters() { @@ -797,9 +797,32 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest checkEntityOperationsSucceeded(EntityOperationsState.NO_OPERATION); } } - - @Test(dataProvider = "retryDP") - public void testRetryRegistrationSucceeded(Integer retryCount) + + enum RetrySuccessMethod + { + /** + * perform entity operations executed successfully + */ + OPERATIONS_SUCCEDED, + /** + * the later check if the operations succeeded has succeeded + */ + CHECK_SUCCEEDED + } + + @DataProvider(name = "retrySuccessDP") + public Object[][] retrySuccessDP() + { + return new Object[][] + { + { 1, RetrySuccessMethod.OPERATIONS_SUCCEDED }, + { 1, RetrySuccessMethod.CHECK_SUCCEEDED }, + { 5, RetrySuccessMethod.OPERATIONS_SUCCEDED }, + { 15, RetrySuccessMethod.CHECK_SUCCEEDED } }; + } + + @Test(dataProvider = "retrySuccessDP") + public void testRetryRegistrationSucceeded(Integer retryCount, RetrySuccessMethod rsm) { RecoveryTestCase testCase = new RecoveryTestCase("No name"); @@ -821,15 +844,14 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest new RecordingMatcher<ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails>(); // create expectations - context.checking(new RetryRegistrationSucceeded(atomicatOperationDetails, retryCount)); + context.checking(new RetryRegistrationSucceeded(atomicatOperationDetails, retryCount, rsm)); handler.handle(markerFile); - // the rollback has happened JythonHookTestTool.assertMessagesInWorkingDirectory(workingDirectory, "pre_metadata_registration", "post_metadata_registration", "post_storage"); - + assertStorageProcess(atomicatOperationDetails.getRecordedObjects().get(0), DATA_SET_CODE, "sub_data_set_1", 0); @@ -839,17 +861,19 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest assertDirEmpty(precommitDirectory); } - class RetryRegistrationSucceeded extends AbstractExpectations { private final int retryCount; + private final RetrySuccessMethod retrySuccessMethod; + public RetryRegistrationSucceeded( final RecordingMatcher<AtomicEntityOperationDetails> atomicatOperationDetails, - int retryCount) + int retryCount, RetrySuccessMethod retrySuccessMethod) { super(atomicatOperationDetails); this.retryCount = retryCount; + this.retrySuccessMethod = retrySuccessMethod; prepareExpecatations(); } @@ -861,13 +885,25 @@ public class JythonDropboxRecoveryTest extends AbstractJythonDataSetHandlerTest { registerDataSetsAndThrow(true, false, EntityOperationsState.NO_OPERATION); } - performEntityOperations(); - setStorageConfirmed(false); + + if (retrySuccessMethod == RetrySuccessMethod.OPERATIONS_SUCCEDED) + { + performEntityOperations(); + } else if (retrySuccessMethod == RetrySuccessMethod.CHECK_SUCCEEDED) + { + registerDataSetsAndThrow(true, false, EntityOperationsState.IN_PROGRESS); + + for (int i = 0; i < 40; i++) + { + checkEntityOperationsSucceeded(EntityOperationsState.IN_PROGRESS); + } + checkEntityOperationsSucceeded(EntityOperationsState.OPERATION_SUCCEEDED); + } + + setStorageConfirmed(false); } } - - - + // INFO: the test that checks all possible recovery points one by one in single registration @DataProvider(name = "multipleCheckpointsDataProvider") public Object[][] multipleCheckpointsData()