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]

Reply via email to