github-code-scanning[bot] commented on code in PR #15015:
URL: https://github.com/apache/druid/pull/15015#discussion_r1330806247
##########
server/src/test/java/org/apache/druid/server/http/RulesResourceTest.java:
##########
@@ -151,6 +166,280 @@
EasyMock.verify(auditManager);
}
+ @Test
+ public void testSetDatasourceRulesWithEffectivelyNoRule()
+ {
+ EasyMock.expect(databaseRuleManager.overrideRule(EasyMock.anyObject(),
EasyMock.anyObject(), EasyMock.anyObject()))
+ .andReturn(true).times(2);
+ EasyMock.replay(databaseRuleManager);
+
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ Response resp1 = rulesResource.setDatasourceRules("dataSource1", null,
null, null, EasyMock.createMock(HttpServletRequest.class));
+ Assert.assertEquals(200, resp1.getStatus());
+
+ 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);
+
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
+
+ IntervalLoadRule loadInterval1 = new IntervalLoadRule(
+ Intervals.of("2023-07-29T01:00:00Z/2023-12-30T01:00:00Z"),
+ null,
+ null
+ );
+ IntervalLoadRule loadInterval2 = new IntervalLoadRule(
+ Intervals.of("2023-09-29T01:00:00Z/2023-10-30T01:00:00Z"),
+ null,
+ null
+ );
+ PeriodLoadRule loadPT1H = new PeriodLoadRule(new Period("PT1H"), null,
null, null);
+ PeriodLoadRule loadP3M = new PeriodLoadRule(new Period("P3M"), null, null,
null);
+ PeriodLoadRule loadP6M = new PeriodLoadRule(new Period("P6M"), null, null,
null);
+ 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(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);
+
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
+
+ PeriodDropBeforeRule dropBeforeP3M = new PeriodDropBeforeRule(new
Period("P3M"));
+ PeriodDropBeforeRule dropBeforeP6M = new PeriodDropBeforeRule(new
Period("P6M"));
+ PeriodDropRule dropByP1M = new PeriodDropRule(new Period("P1M"), true);
+ PeriodDropRule dropByP2M = new PeriodDropRule(new Period("P2M"), true);
+ 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);
+
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
+
+ ForeverBroadcastDistributionRule broadcastForever = new
ForeverBroadcastDistributionRule();
+ PeriodBroadcastDistributionRule broadcastPeriodPT1H = new
PeriodBroadcastDistributionRule(new Period("PT1H"), true);
+ PeriodBroadcastDistributionRule broadcastPeriodPT2H = new
PeriodBroadcastDistributionRule(new Period("PT2H"), true);
+ IntervalBroadcastDistributionRule broadcastInterval1 = new
IntervalBroadcastDistributionRule(
+ Intervals.of("2000-09-29T01:00:00Z/2050-10-30T01:00:00Z")
+ );
+ IntervalBroadcastDistributionRule broadcastInterval2 = new
IntervalBroadcastDistributionRule(
+ Intervals.of("2010-09-29T01:00:00Z/2020-10-30T01:00:00Z")
+ );
+
+ final List<Rule> rules = new ArrayList<>();
+ rules.add(broadcastInterval1);
+ rules.add(broadcastInterval2);
+ rules.add(broadcastForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", broadcastInterval1, broadcastInterval2)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+ rules.clear();
+ rules.add(broadcastPeriodPT2H);
+ rules.add(broadcastPeriodPT1H);
+ rules.add(broadcastForever);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", broadcastPeriodPT2H, broadcastPeriodPT1H)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+
+
+ rules.clear();
+ rules.add(broadcastPeriodPT1H);
+ rules.add(broadcastPeriodPT2H);
+ rules.add(broadcastInterval2);
+ rules.add(broadcastForever);
+ rules.add(broadcastInterval1);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", broadcastForever, broadcastInterval1)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+ }
+
+ @Test
+ public void testSetDatasourceRulesWithDifferentInvalidRules()
+ {
+ EasyMock.replay(auditManager);
+
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+ HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
+
+ IntervalLoadRule loadLargeInteval = new IntervalLoadRule(
+ Intervals.of("1980-07-29T01:00:00Z/2050-12-30T01:00:00Z"),
+ null,
+ null
+ );
+ IntervalLoadRule loadSmallInterval = new IntervalLoadRule(
+ Intervals.of("2020-09-29T01:00:00Z/2025-10-30T01:00:00Z"),
+ null,
+ null
+ );
+ PeriodLoadRule periodPT1H = new PeriodLoadRule(new Period("PT1H"), null,
null, null);
+ PeriodLoadRule periodP3M = new PeriodLoadRule(new Period("P3M"), null,
null, null);
+ PeriodLoadRule periodP6M = new PeriodLoadRule(new Period("P6M"), null,
null, null);
+ ForeverLoadRule foreverLoadRule = new ForeverLoadRule(null, null);
+ ForeverDropRule foreverDropRule = new ForeverDropRule();
+ PeriodBroadcastDistributionRule broadcastPeriodPT15m = new
PeriodBroadcastDistributionRule(new Period("PT15m"), true);
+
+ List<Rule> rules = new ArrayList<>();
+ rules.add(loadSmallInterval);
+ rules.add(loadLargeInteval);
+ rules.add(broadcastPeriodPT15m);
+ rules.add(periodPT1H);
+ rules.add(periodP3M);
+ rules.add(periodP6M);
+ rules.add(foreverLoadRule);
+ rules.add(foreverDropRule);
+
+ DruidExceptionMatcher.invalidInput().expectMessageContains(
+ StringUtils.format("Rule[%s] has an interval that contains interval
for rule[%s].", foreverLoadRule, foreverDropRule)
+ ).assertThrowsAndMatches(() ->
rulesResource.setDatasourceRules("dataSource1", rules, null, null, req));
+ }
+
+ @Test
+ public void testSetDatasourceRulesWithValidRules()
+ {
+ EasyMock.expect(databaseRuleManager.overrideRule(EasyMock.anyObject(),
EasyMock.anyObject(), EasyMock.anyObject()))
+ .andReturn(true).anyTimes();
+ EasyMock.replay(databaseRuleManager);
+ RulesResource rulesResource = new RulesResource(databaseRuleManager,
auditManager);
+
+ IntervalLoadRule loadLargeInteval = new IntervalLoadRule(
+ Intervals.of("1980-07-29T01:00:00Z/2050-12-30T01:00:00Z"),
+ null,
+ null
+ );
+ IntervalLoadRule loadSmallInterval = new IntervalLoadRule(
+ Intervals.of("2020-09-29T01:00:00Z/2025-10-30T01:00:00Z"),
+ null,
+ null
+ );
+ PeriodLoadRule periodPT1H = new PeriodLoadRule(new Period("PT1H"), null,
null, null);
+ PeriodLoadRule periodP3M = new PeriodLoadRule(new Period("P3M"), null,
null, null);
+ PeriodLoadRule periodP6M = new PeriodLoadRule(new Period("P6M"), null,
null, null);
+ ForeverLoadRule foreverLoadRule = new ForeverLoadRule(null, null);
+ ForeverDropRule foreverDropRule = new ForeverDropRule();
Review Comment:
## Unread local variable
Variable 'ForeverDropRule foreverDropRule' is never read.
[Show more
details](https://github.com/apache/druid/security/code-scanning/5801)
--
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]