alievmirza commented on code in PR #1902:
URL: https://github.com/apache/ignite-3/pull/1902#discussion_r1158525929


##########
modules/distribution-zones/src/test/java/org/apache/ignite/internal/distributionzones/DistributionZoneManagerTest.java:
##########
@@ -755,17 +740,118 @@ public void testTryDropDefaultZone() {
         );
     }
 
-    private void bindZoneToTable(String zoneName) {
-        int zoneId = distributionZoneManager.getZoneId(zoneName);
+    @Test
+    public void testCreateZoneWithFilter() throws Exception {
+        String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+        distributionZoneManager.createZone(
+                        new 
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                                .filter(expectedFilter).build()
+                )
+                .get(5, TimeUnit.SECONDS);
+
+        DistributionZoneConfiguration zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertEquals(expectedFilter, zone1.filter().value());
+
+        distributionZoneManager.dropZone(ZONE_NAME).get(5, TimeUnit.SECONDS);
+
+        zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertNull(zone1, "Zone was not dropped.");
+    }
+
+    @Test
+    public void testAlterZoneWithFilter() throws Exception {
+        String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+        distributionZoneManager.createZone(
+                        new 
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                                .filter(expectedFilter).build()
+                )
+                .get(5, TimeUnit.SECONDS);
 
-        NamedConfigurationTree<TableConfiguration, TableView, TableChange> 
tables = mock(NamedConfigurationTree.class, RETURNS_DEEP_STUBS);
+        DistributionZoneConfiguration zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertEquals(expectedFilter, zone1.filter().value());
+
+        String newExpectedFilter = "['nodeAttributes'][?(@.['storage'] == 
'SSD')]";
+
+        distributionZoneManager.alterZone(
+                        ZONE_NAME,
+                        new 
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                                .filter(newExpectedFilter).build())
+                .get(5, TimeUnit.SECONDS);
+
+        zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertEquals(newExpectedFilter, zone1.filter().value());
+
+        distributionZoneManager.dropZone(ZONE_NAME).get(5, TimeUnit.SECONDS);
+
+        zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertNull(zone1, "Zone was not dropped.");
+    }
+
+    @Test
+    @SuppressWarnings("ThrowableNotThrown")
+    public void testCreateZoneWithNotValidFilter() {
+        assertThrowsWithCause(
+                () -> distributionZoneManager.createZone(
+                        new 
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                                .filter("['nodeAttributes'[?(@.['region'] == 
'EU')]").build()
+                )
+                .get(5, TimeUnit.SECONDS),
+                ConfigurationValidationException.class
+        );
+    }
 
-        when(tablesConfiguration.tables()).thenReturn(tables);
+    @Test
+    @SuppressWarnings("ThrowableNotThrown")
+    public void testAlterZoneWithNotValidFilter() throws Exception {
+        String expectedFilter = "['nodeAttributes'][?(@.['region'] == 'EU')]";
+
+        distributionZoneManager.createZone(
+                new DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                        .filter(expectedFilter).build()
+                )
+                .get(5, TimeUnit.SECONDS);
 
-        TableView tableView = mock(TableView.class);
+        DistributionZoneConfiguration zone1 = 
registry.getConfiguration(DistributionZonesConfiguration.KEY).distributionZones()
+                .get(ZONE_NAME);
+
+        assertEquals(expectedFilter, zone1.filter().value());
+
+        String notValidFilter = "['nodeAttributes[?(@.['region'] == 'EU')]";
+
+        assertThrowsWithCause(
+                () -> distributionZoneManager.alterZone(
+                        ZONE_NAME,
+                        new 
DistributionZoneConfigurationParameters.Builder(ZONE_NAME)
+                                .filter(notValidFilter).build()
+                        )
+                        .get(5, TimeUnit.SECONDS),
+                ConfigurationValidationException.class

Review Comment:
   done



##########
modules/distribution-zones/src/main/java/org/apache/ignite/internal/distributionzones/DistributionZonesUtil.java:
##########
@@ -347,4 +349,20 @@ public static DistributionZoneConfiguration 
getZoneById(DistributionZonesConfigu
 
         throw new DistributionZoneNotFoundException(zoneId);
     }
+
+    /**
+     * Check if a passed filter is a valid {@link JsonPath} query.
+     *
+     * @param filter Filter.
+     * @return {@code true} if the passed filter is a valid filter, {@code 
false} otherwise.
+     */
+    public static boolean validate(String filter) {
+        try {
+            JsonPath.compile(filter);
+        } catch (InvalidPathException ignored) {

Review Comment:
   added



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to