@@ -1033,6 +1033,7 @@ void purgeInstanceId() throws TimeoutException {
10331033 }
10341034
10351035 @ RetryingTest
1036+ @ Disabled ("Test is disabled as is not supported by the sidecar" )
10361037 void purgeInstanceFilter () throws TimeoutException {
10371038 final String orchestratorName = "PurgeInstance" ;
10381039 final String plusOne = "PlusOne" ;
@@ -1064,21 +1065,71 @@ void purgeInstanceFilter() throws TimeoutException {
10641065
10651066 DurableTaskClient client = new DurableTaskGrpcClientBuilder ().build ();
10661067 try (worker ; client ) {
1068+ client .createTaskHub (true );
1069+ Instant startTime = Instant .now ();
10671070
10681071 String instanceId = client .scheduleNewOrchestrationInstance (orchestratorName , 0 );
10691072 OrchestrationMetadata metadata = client .waitForInstanceCompletion (instanceId , defaultTimeout , true );
10701073 assertNotNull (metadata );
10711074 assertEquals (OrchestrationRuntimeStatus .COMPLETED , metadata .getRuntimeStatus ());
10721075 assertEquals (1 , metadata .readOutputAs (int .class ));
10731076
1077+ // Test CreatedTimeFrom
1078+ PurgeInstanceCriteria criteria = new PurgeInstanceCriteria ();
1079+ criteria .setCreatedTimeFrom (startTime .minus (Duration .ofSeconds (1 )));
10741080
1075- PurgeResult result = client .purgeInstance ( instanceId );
1081+ PurgeResult result = client .purgeInstances ( criteria );
10761082 assertEquals (1 , result .getDeletedInstanceCount ());
10771083 metadata = client .getInstanceMetadata (instanceId , true );
10781084 assertFalse (metadata .isInstanceFound ());
1085+
1086+ // Test CreatedTimeTo
1087+ criteria .setCreatedTimeTo (Instant .now ());
1088+
1089+ result = client .purgeInstances (criteria );
1090+ assertEquals (0 , result .getDeletedInstanceCount ());
1091+ metadata = client .getInstanceMetadata (instanceId , true );
1092+ assertFalse (metadata .isInstanceFound ());
1093+
1094+ // Test CreatedTimeFrom, CreatedTimeTo, and RuntimeStatus
1095+ String instanceId1 = client .scheduleNewOrchestrationInstance (plusOne , 0 );
1096+ metadata = client .waitForInstanceCompletion (instanceId1 , defaultTimeout , true );
1097+ assertNotNull (metadata );
1098+ assertEquals (OrchestrationRuntimeStatus .COMPLETED , metadata .getRuntimeStatus ());
1099+ assertEquals (1 , metadata .readOutputAs (int .class ));
1100+
1101+ String instanceId2 = client .scheduleNewOrchestrationInstance (plusTwo , 10 );
1102+ metadata = client .waitForInstanceCompletion (instanceId2 , defaultTimeout , true );
1103+ assertNotNull (metadata );
1104+ assertEquals (OrchestrationRuntimeStatus .COMPLETED , metadata .getRuntimeStatus ());
1105+ assertEquals (12 , metadata .readOutputAs (int .class ));
1106+
1107+ String instanceId3 = client .scheduleNewOrchestrationInstance (terminate );
1108+ client .terminate (instanceId3 , terminate );
1109+ metadata = client .waitForInstanceCompletion (instanceId3 , defaultTimeout , true );
1110+ assertNotNull (metadata );
1111+ assertEquals (OrchestrationRuntimeStatus .TERMINATED , metadata .getRuntimeStatus ());
1112+ assertEquals (terminate , metadata .readOutputAs (String .class ));
1113+
1114+ HashSet <OrchestrationRuntimeStatus > runtimeStatusFilters = Stream .of (
1115+ OrchestrationRuntimeStatus .TERMINATED ,
1116+ OrchestrationRuntimeStatus .COMPLETED
1117+ ).collect (Collectors .toCollection (HashSet ::new ));
1118+
1119+ criteria .setCreatedTimeTo (Instant .now ());
1120+ criteria .setRuntimeStatusList (new ArrayList <>(runtimeStatusFilters ));
1121+ result = client .purgeInstances (criteria );
1122+
1123+ assertEquals (3 , result .getDeletedInstanceCount ());
1124+ metadata = client .getInstanceMetadata (instanceId1 , true );
1125+ assertFalse (metadata .isInstanceFound ());
1126+ metadata = client .getInstanceMetadata (instanceId2 , true );
1127+ assertFalse (metadata .isInstanceFound ());
1128+ metadata = client .getInstanceMetadata (instanceId3 , true );
1129+ assertFalse (metadata .isInstanceFound ());
10791130 }
10801131 }
1081-
1132+
10821133 @ RetryingTest
10831134 void purgeInstanceFilterTimeout () throws TimeoutException {
10841135 final String orchestratorName = "PurgeInstance" ;
0 commit comments