public static boolean isValidRule(DegradeRule rule) {
        boolean baseValid = rule != null && !StringUtil.isBlank(rule.getResource())
            && rule.getCount() >= 0 && rule.getTimeWindow() > 0;
        if (!baseValid) {
            return false;
        }
        if (rule.getMinRequestAmount() <= 0 || rule.getStatIntervalMs() <= 0) {
            return false;
        }
        if (!RuleManager.checkRegexResourceField(rule)) {
            return false;
        }
        switch (rule.getGrade()) {
            case RuleConstant.DEGRADE_GRADE_RT:
                return rule.getSlowRatioThreshold() >= 0 && rule.getSlowRatioThreshold() <= 1;
            case RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO:
                return rule.getCount() <= 1;
            case RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT:
                return true;
            default:
                return false;
        }
    }
@Test
    public void testIsValidRule() {
        DegradeRule rule1 = new DegradeRule("abc");
        DegradeRule rule2 = new DegradeRule("cde")
            .setCount(100)
            .setGrade(RuleConstant.DEGRADE_GRADE_RT)
            .setTimeWindow(-1);
        DegradeRule rule3 = new DegradeRule("xx")
            .setCount(1.1)
            .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
            .setTimeWindow(2);
        DegradeRule rule4 = new DegradeRule("yy")
            .setCount(-3)
            .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
            .setTimeWindow(2);
        DegradeRule rule5 = new DegradeRule("Sentinel")
            .setCount(97)
            .setGrade(RuleConstant.DEGRADE_GRADE_RT)
            .setSlowRatioThreshold(15)
            .setTimeWindow(15);
        DegradeRule rule6 = new DegradeRule("Sentinel")
            .setCount(0.93d)
            .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
            .setTimeWindow(20)
            .setMinRequestAmount(0);
        DegradeRule rule7 = new DegradeRule("Sentinel")
            .setCount(100)
            .setSlowRatioThreshold(0.8d)
            .setTimeWindow(10)
            .setStatIntervalMs(0)
            .setMinRequestAmount(20);
        assertFalse(DegradeRuleManager.isValidRule(rule1));
        assertFalse(DegradeRuleManager.isValidRule(rule2));
        assertFalse(DegradeRuleManager.isValidRule(rule3));
        assertTrue(DegradeRuleManager.isValidRule(rule3.setCount(1.0d)));
        assertTrue(DegradeRuleManager.isValidRule(rule3.setCount(0.0d)));
        assertFalse(DegradeRuleManager.isValidRule(rule4));
        assertFalse(DegradeRuleManager.isValidRule(rule5));
        assertFalse(DegradeRuleManager.isValidRule(rule6));
        assertFalse(DegradeRuleManager.isValidRule(rule7));
    }