abhishekrb19 commented on code in PR #15015:
URL: https://github.com/apache/druid/pull/15015#discussion_r1338049588
##########
server/src/test/java/org/apache/druid/server/http/RulesResourceTest.java:
##########
@@ -151,6 +166,286 @@ public void testGetDatasourceRuleHistoryWithWrongCount()
EasyMock.verify(auditManager);
}
+ @Test
+ public void testSetDatasourceRulesWithEffectivelyNoRule()
+ {
+ EasyMock.expect(databaseRuleManager.overrideRule(EasyMock.anyObject(),
EasyMock.anyObject(), EasyMock.anyObject()))
+ .andReturn(true).times(2);
+ EasyMock.replay(databaseRuleManager);
+
+ final RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ final Response resp1 = rulesResource.setDatasourceRules("dataSource1",
null, null, null, EasyMock.createMock(HttpServletRequest.class));
+ Assert.assertEquals(200, resp1.getStatus());
+
+ final Response resp2 = rulesResource.setDatasourceRules("dataSource1", new
ArrayList<>(), null, null, EasyMock.createMock(HttpServletRequest.class));
+ Assert.assertEquals(200, resp2.getStatus());
+ EasyMock.verify(databaseRuleManager);
+ }
+
+ @Test
+ public void testSetDatasourceRulesWithInvalidLoadRules()
+ {
+ EasyMock.replay(auditManager);
+
+ final RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ final HttpServletRequest req =
EasyMock.createMock(HttpServletRequest.class);
+
+ final IntervalLoadRule loadInterval1 = new IntervalLoadRule(
+ Intervals.of("2023-07-29T01:00:00Z/2023-12-30T01:00:00Z"),
+ null,
+ null
+ );
+ final IntervalLoadRule loadInterval2 = new IntervalLoadRule(
+ Intervals.of("2023-09-29T01:00:00Z/2023-10-30T01:00:00Z"),
+ null,
+ null
+ );
+ final PeriodLoadRule loadPT1H = new PeriodLoadRule(new Period("PT1H"),
null, null, null);
+ final PeriodLoadRule loadP3M = new PeriodLoadRule(new Period("P3M"), null,
null, null);
+ final PeriodLoadRule loadP6M = new PeriodLoadRule(new Period("P6M"), null,
null, null);
+ final ForeverLoadRule loadForever = new ForeverLoadRule(null, null);
+
+ final List<Rule> rules = new ArrayList<>();
+ rules.add(loadP6M);
+ rules.add(loadP3M);
+ rules.add(loadForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadP6M, loadP3M)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(loadP3M);
+ rules.add(loadForever);
+ rules.add(loadP6M);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadForever, loadP6M)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(loadForever);
+ rules.add(loadPT1H);
+ rules.add(loadInterval2);
+ rules.add(loadP6M);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadForever, loadPT1H)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(loadPT1H);
+ rules.add(loadPT1H);
+ rules.add(loadP6M);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadPT1H, loadPT1H)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(loadInterval1);
+ rules.add(loadInterval2);
+ rules.add(loadP6M);
+ rules.add(loadForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadInterval1, loadInterval2)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(loadP6M);
+ rules.add(loadInterval1);
+ rules.add(loadForever);
+ rules.add(loadInterval2);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", loadForever, loadInterval2)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+ }
+
+ @Test
+ public void testDatasourceRulesWithInvalidDropRules()
+ {
+ EasyMock.replay(auditManager);
+
+ final RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ final HttpServletRequest req =
EasyMock.createMock(HttpServletRequest.class);
+
+ final PeriodDropBeforeRule dropBeforeP3M = new PeriodDropBeforeRule(new
Period("P3M"));
+ final PeriodDropBeforeRule dropBeforeP6M = new PeriodDropBeforeRule(new
Period("P6M"));
+ final PeriodDropRule dropByP1M = new PeriodDropRule(new Period("P1M"),
true);
+ final PeriodDropRule dropByP2M = new PeriodDropRule(new Period("P2M"),
true);
+ final ForeverDropRule dropForever = new ForeverDropRule();
+
+ final List<Rule> rules = new ArrayList<>();
+ rules.add(dropBeforeP3M);
+ rules.add(dropBeforeP6M);
+ rules.add(dropByP1M);
+ rules.add(dropForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", dropBeforeP3M, dropBeforeP6M)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(dropByP2M);
+ rules.add(dropByP1M);
+ rules.add(dropForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", dropByP2M, dropByP1M)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(dropForever);
+ rules.add(dropByP1M);
+ rules.add(dropByP2M);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", dropForever, dropByP1M)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+ }
+
+ @Test
+ public void testDatasourceRulesWithInvalidBroadcastRules()
+ {
+ EasyMock.replay(auditManager);
Review Comment:
Thanks. Added parameterized tests.
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]