bugfix - rule sync issues when engine redeployed
[holmes/rule-management.git] / rulemgt / src / test / java / org / onap / holmes / rulemgt / wrapper / RuleMgtWrapperTest.java
index 2a8357c..626b91d 100644 (file)
-/**\r
- * Copyright 2017 ZTE Corporation.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-package org.onap.holmes.rulemgt.wrapper;\r
-\r
-\r
-import org.easymock.EasyMock;\r
-import org.junit.Before;\r
-import org.junit.Rule;\r
-import org.junit.Test;\r
-import org.junit.rules.ExpectedException;\r
-import org.junit.runner.RunWith;\r
-import org.onap.holmes.common.api.entity.CorrelationRule;\r
-import org.onap.holmes.common.exception.CorrelationException;\r
-import org.onap.holmes.common.utils.DbDaoUtil;\r
-import org.onap.holmes.rulemgt.bean.request.*;\r
-import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
-import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
-import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;\r
-import org.onap.holmes.rulemgt.db.CorrelationRuleDao;\r
-import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;\r
-import org.onap.holmes.rulemgt.tools.EngineTools;\r
-import org.powermock.api.easymock.PowerMock;\r
-import org.powermock.modules.junit4.PowerMockRunner;\r
-import org.powermock.reflect.Whitebox;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.List;\r
-\r
-import static org.hamcrest.MatcherAssert.assertThat;\r
-import static org.hamcrest.Matchers.equalTo;\r
-import static org.hamcrest.Matchers.is;\r
-\r
-@RunWith(PowerMockRunner.class)\r
-public class RuleMgtWrapperTest {\r
-\r
-    @Rule\r
-    public ExpectedException thrown = ExpectedException.none();\r
-\r
-    private RuleMgtWrapper ruleMgtWrapper;\r
-\r
-    private EngineWrapper engineWrapperMock;\r
-\r
-    private DbDaoUtil dbDaoUtilMock;\r
-\r
-    private CorrelationRuleQueryDao correlationRuleQueryDaoMock;\r
-\r
-    private CorrelationRuleDao correlationRuleDaoMock;\r
-\r
-    private EngineTools engineToolsMock;\r
-\r
-    private static final String USER_NAME = "admin";\r
-\r
-    @Before\r
-    public void setUp() throws Exception {\r
-\r
-        ruleMgtWrapper = new RuleMgtWrapper();\r
-\r
-        engineWrapperMock = PowerMock.createMock(EngineWrapper.class);\r
-        correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);\r
-        dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
-        correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);\r
-        engineToolsMock = PowerMock.createMock(EngineTools.class);\r
-\r
-        Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);\r
-        Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);\r
-        Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);\r
-        Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);\r
-        Whitebox.setInternalState(ruleMgtWrapper,"engineTools", engineToolsMock);\r
-\r
-        PowerMock.resetAll();\r
-    }\r
-\r
-    @Test\r
-    public void initDaoUtil_normal() {\r
-        ruleMgtWrapper.initDaoUtil();\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_name_is_null() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The name of the rule can not be empty.");\r
-\r
-        ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",\r
-                "Mocked contents.", 0));\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_request_null() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The request object can not be empty!");\r
-\r
-        ruleMgtWrapper.addCorrelationRule(USER_NAME, null);\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_name_is_empty() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The name of the rule can not be empty.");\r
-\r
-        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",\r
-                "Mocked contents.", 0));\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_content_is_empty() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The contents of the rule can not be empty!");\r
-\r
-        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",\r
-                "", 0));\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_enabled_is_off_limit() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");\r
-\r
-        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",\r
-                "Mocked contents.", 3));\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_duplicated_rule() throws Exception {\r
-\r
-        final String ruleName = "Rule-001";\r
-\r
-        RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",\r
-                "Mocked contents.", 0);\r
-        CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);\r
-\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("A rule with the same name already exists.");\r
-\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);\r
-\r
-        PowerMock.verifyAll();\r
-    }\r
-\r
-    @Test\r
-    public void addCorrelationRule_normal() throws Exception {\r
-        final String ruleName = "Rule-001";\r
-\r
-        RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",\r
-                "Mocked contents.", 1);\r
-        ruleCreateRequest.setLoopControlName("loopName");\r
-\r
-        CorrelationRule correlationRuleRet = new CorrelationRule();\r
-        correlationRuleRet.setRid("rule_" + System.currentTimeMillis());\r
-\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(null);\r
-        EasyMock.expect(engineToolsMock.getEngineWithLeastRules()).andReturn("127.0.0.1");\r
-        EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)\r
-                , EasyMock.anyObject(String.class)))\r
-                .andReturn(true);\r
-        EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)\r
-                , EasyMock.anyObject(String.class)))\r
-                .andReturn("package-001");\r
-        EasyMock.expect(correlationRuleDaoMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))\r
-                .andReturn(correlationRuleRet);\r
-\r
-        PowerMock.replayAll();\r
-\r
-        RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);\r
-        PowerMock.verifyAll();\r
-\r
-        assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));\r
-    }\r
-\r
-    @Test\r
-    public void updateCorrelationRule_param_null() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The request object can not be empty!");\r
-\r
-        ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);\r
-    }\r
-\r
-    @Test\r
-    public void updateCorrelationRule_normal() throws Exception {\r
-        CorrelationRule oldCorrelationRule = new CorrelationRule();\r
-        oldCorrelationRule.setRid("rule_1");\r
-        oldCorrelationRule.setName("name");\r
-        oldCorrelationRule.setDescription("des1");\r
-        oldCorrelationRule.setContent("content");\r
-        oldCorrelationRule.setPackageName("testName");\r
-        oldCorrelationRule.setEnabled(1);\r
-        oldCorrelationRule.setClosedControlLoopName("cl-name");\r
-        oldCorrelationRule.setEngineInstance("127.0.0.1");\r
-        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);\r
-\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
-        EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "127.0.0.1")).andReturn(true);\r
-        correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));\r
-        EasyMock.expectLastCall();\r
-        EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)\r
-                , EasyMock.anyObject(String.class)))\r
-                .andReturn(true);\r
-        EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)\r
-                , EasyMock.anyObject(String.class)))\r
-                .andReturn("packageName1");\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
-\r
-        PowerMock.verifyAll();\r
-\r
-        assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
-    }\r
-\r
-    @Test\r
-    public void updateCorrelationRule_param_no_change() throws Exception {\r
-        CorrelationRule oldCorrelationRule = new CorrelationRule();\r
-        oldCorrelationRule.setRid("rule_1");\r
-        oldCorrelationRule.setName("name");\r
-        oldCorrelationRule.setDescription("des1");\r
-        oldCorrelationRule.setContent("content");\r
-        oldCorrelationRule.setPackageName("testName");\r
-        oldCorrelationRule.setEnabled(1);\r
-        oldCorrelationRule.setClosedControlLoopName("cl-name");\r
-        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);\r
-\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
-\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
-\r
-        PowerMock.verifyAll();\r
-\r
-        assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
-    }\r
-\r
-    @Test\r
-    public void updateCorrelationRule_rule_not_exist() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("You're trying to update a rule which does not exist in the system.");\r
-\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);\r
-\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());\r
-\r
-        PowerMock.verifyAll();\r
-    }\r
-\r
-    @Test\r
-    public void deleteCorrelationRule_request_null() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("The request object can not be empty!");\r
-\r
-        ruleMgtWrapper.deleteCorrelationRule(null);\r
-    }\r
-\r
-    @Test\r
-    public void deleteCorrelationRule_rule_not_exit() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");\r
-\r
-        RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
-\r
-        EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(\r
-                correlationRuleDaoMock).anyTimes();\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
-                .andReturn(null);\r
-\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
-\r
-        PowerMock.verifyAll();\r
-    }\r
-\r
-    @Test\r
-    public void deleteCorrelationRule_normal() throws Exception {\r
-        RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
-        CorrelationRule correlationRule = new CorrelationRule();\r
-        correlationRule.setEnabled(1);\r
-        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
-                .andReturn(correlationRule);\r
-        EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)\r
-                , EasyMock.anyObject(String.class))).andReturn(true);\r
-        correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));\r
-        EasyMock.expectLastCall();\r
-        PowerMock.replayAll();\r
-\r
-        ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
-\r
-        PowerMock.verifyAll();\r
-    }\r
-\r
-    @Test\r
-    public void getCorrelationRuleByCondition_data_format_exception() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("An error occurred while building the query SQL.");\r
-\r
-        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
-                RuleQueryCondition.class)))\r
-                .andThrow(new CorrelationException("An error occurred while building the query SQL."));\r
-\r
-        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-\r
-        ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
-\r
-        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-    }\r
-\r
-    @Test\r
-    public void getCorrelationRuleByCondition_db_exception() throws Exception {\r
-        thrown.expect(CorrelationException.class);\r
-        thrown.expectMessage("Failed to query the rule.");\r
-\r
-        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
-                RuleQueryCondition.class)))\r
-                .andThrow(new CorrelationException("Failed to query the rule."));\r
-\r
-        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-\r
-        ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
-\r
-        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-    }\r
-\r
-    @Test\r
-    public void getCorrelationRuleByCondition_normal() throws Exception {\r
-        List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);\r
-        for (int i = 0; i < 10; ++i) {\r
-            CorrelationRule correlationRule = new CorrelationRule();\r
-            correlationRule.setContent("content" + i);\r
-            correlationRule.setName("name" + i);\r
-            correlationRule.setRid("rule_" + i);\r
-            correlationRule.setEngineType("engineType" + (i % 2 + 1));\r
-            correlationRule.setEngineID("engineId" + i);\r
-            correlationRule.setCreateTime(new Date());\r
-            correlationRule.setCreator(USER_NAME);\r
-            correlationRule.setDescription("description" + i);\r
-            correlationRule.setPackageName("package" + i);\r
-            correlationRuleList.add(correlationRule);\r
-        }\r
-\r
-        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
-                RuleQueryCondition.class))).andReturn(correlationRuleList);\r
-\r
-        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-\r
-        RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
-\r
-        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
-\r
-        assertThat(response.getTotalCount(), is(10));\r
-\r
-        for (int i = 0; i < 10; ++i) {\r
-            assertThat(response.getCorrelationRules().get(i).getRuleId(),\r
-                    equalTo(correlationRuleList.get(i).getRid()));\r
-        }\r
-    }\r
-\r
-    private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,\r
-            int enabled) {\r
-        RuleCreateRequest rcr;\r
-        rcr = new RuleCreateRequest();\r
-        rcr.setRuleName(ruleName);\r
-        rcr.setDescription(description);\r
-        rcr.setContent(content);\r
-        rcr.setEnabled(enabled);\r
-        return rcr;\r
-    }\r
-\r
-    private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,\r
-            String content, int enabled) {\r
-        RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();\r
-        ruleUpdateRequest.setRuleId(ruleId);\r
-        ruleUpdateRequest.setDescription(description);\r
-        ruleUpdateRequest.setContent(content);\r
-        ruleUpdateRequest.setEnabled(enabled);\r
-        ruleUpdateRequest.setLoopControlName(clName);\r
-        return ruleUpdateRequest;\r
-    }\r
-\r
-    private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {\r
-        RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();\r
-        ruleDeleteRequest.setRuleId(ruleId);\r
-        return ruleDeleteRequest;\r
-    }\r
-\r
-    private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {\r
-        CorrelationRule correlationRule = new CorrelationRule();\r
-        correlationRule.setContent(ruleCreateRequest.getContent());\r
-        correlationRule.setDescription(ruleCreateRequest.getDescription());\r
-        correlationRule.setName(ruleCreateRequest.getRuleName());\r
-        correlationRule.setCreator(USER_NAME);\r
-        correlationRule.setModifier(USER_NAME);\r
-        correlationRule.setEnabled(ruleCreateRequest.getEnabled());\r
-        return correlationRule;\r
-    }\r
-\r
-    private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {\r
-        CorrelationRule correlationRule = new CorrelationRule();\r
-        correlationRule.setRid(ruleUpdateRequest.getRuleId());\r
-        correlationRule.setContent(ruleUpdateRequest.getContent());\r
-        correlationRule.setDescription(ruleUpdateRequest.getDescription());\r
-        correlationRule.setEnabled(ruleUpdateRequest.getEnabled());\r
-        correlationRule.setUpdateTime(new Date());\r
-        correlationRule.setModifier(USER_NAME);\r
-        return correlationRule;\r
-    }\r
+/**
+ * Copyright 2017 ZTE Corporation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.rulemgt.wrapper;
+
+
+import org.easymock.EasyMock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.onap.holmes.common.api.entity.CorrelationRule;
+import org.onap.holmes.common.exception.CorrelationException;
+import org.onap.holmes.common.utils.DbDaoUtil;
+import org.onap.holmes.rulemgt.bean.request.*;
+import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;
+import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
+import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
+import org.onap.holmes.rulemgt.db.CorrelationRuleDao;
+import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;
+import org.onap.holmes.rulemgt.tools.EngineTools;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+@RunWith(PowerMockRunner.class)
+public class RuleMgtWrapperTest {
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    private RuleMgtWrapper ruleMgtWrapper;
+
+    private EngineWrapper engineWrapperMock;
+
+    private DbDaoUtil dbDaoUtilMock;
+
+    private CorrelationRuleQueryDao correlationRuleQueryDaoMock;
+
+    private CorrelationRuleDao correlationRuleDaoMock;
+
+    private EngineTools engineToolsMock;
+
+    private static final String USER_NAME = "admin";
+
+    @Before
+    public void setUp() throws Exception {
+
+        ruleMgtWrapper = new RuleMgtWrapper();
+
+        engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
+        correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);
+        dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);
+        correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);
+        engineToolsMock = PowerMock.createMock(EngineTools.class);
+
+        Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);
+        Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);
+        Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);
+        Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);
+        Whitebox.setInternalState(ruleMgtWrapper,"engineTools", engineToolsMock);
+
+        PowerMock.resetAll();
+    }
+
+    @Test
+    public void initDaoUtil_normal() {
+        ruleMgtWrapper.initDaoUtil();
+    }
+
+    @Test
+    public void addCorrelationRule_name_is_null() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The name of the rule can not be empty.");
+
+        ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",
+                "Mocked contents.", 0));
+    }
+
+    @Test
+    public void addCorrelationRule_request_null() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The request object can not be empty!");
+
+        ruleMgtWrapper.addCorrelationRule(USER_NAME, null);
+    }
+
+    @Test
+    public void addCorrelationRule_name_is_empty() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The name of the rule can not be empty.");
+
+        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",
+                "Mocked contents.", 0));
+    }
+
+    @Test
+    public void addCorrelationRule_content_is_empty() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The contents of the rule can not be empty!");
+
+        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
+                "", 0));
+    }
+
+    @Test
+    public void addCorrelationRule_enabled_is_off_limit() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");
+
+        ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
+                "Mocked contents.", 3));
+    }
+
+    @Test
+    public void addCorrelationRule_duplicated_rule() throws Exception {
+
+        final String ruleName = "Rule-001";
+
+        RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
+                "Mocked contents.", 0);
+        CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);
+
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("A rule with the same name already exists.");
+
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
+
+        PowerMock.verifyAll();
+    }
+
+    @Test
+    public void addCorrelationRule_normal() throws Exception {
+        final String ruleName = "Rule-001";
+
+        RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
+                "Mocked contents.", 1);
+        ruleCreateRequest.setLoopControlName("loopName");
+
+        CorrelationRule correlationRuleRet = new CorrelationRule();
+        correlationRuleRet.setRid("rule_" + System.currentTimeMillis());
+
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(null);
+        EasyMock.expect(engineToolsMock.getEngineWithLeastRules()).andReturn("127.0.0.1");
+        EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
+                , EasyMock.anyObject(String.class)))
+                .andReturn(true);
+        EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
+                , EasyMock.anyObject(String.class)))
+                .andReturn("package-001");
+        EasyMock.expect(correlationRuleDaoMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))
+                .andReturn(correlationRuleRet);
+
+        PowerMock.replayAll();
+
+        RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
+        PowerMock.verifyAll();
+
+        assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));
+    }
+
+    @Test
+    public void updateCorrelationRule_param_null() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The request object can not be empty!");
+
+        ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);
+    }
+
+    @Test
+    public void updateCorrelationRule_normal() throws Exception {
+        CorrelationRule oldCorrelationRule = new CorrelationRule();
+        oldCorrelationRule.setRid("rule_1");
+        oldCorrelationRule.setName("name");
+        oldCorrelationRule.setDescription("des1");
+        oldCorrelationRule.setContent("content");
+        oldCorrelationRule.setPackageName("testName");
+        oldCorrelationRule.setEnabled(1);
+        oldCorrelationRule.setClosedControlLoopName("cl-name");
+        oldCorrelationRule.setEngineInstance("127.0.0.1");
+        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);
+
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
+        EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2")).times(2);
+        EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "127.0.0.1")).andReturn(true);
+        correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));
+        EasyMock.expectLastCall();
+        EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
+                , EasyMock.anyObject(String.class)))
+                .andReturn(true);
+        EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
+                , EasyMock.anyObject(String.class)))
+                .andReturn("packageName1");
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
+
+        PowerMock.verifyAll();
+
+        assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
+    }
+
+    @Test
+    public void updateCorrelationRule_param_no_change() throws Exception {
+        CorrelationRule oldCorrelationRule = new CorrelationRule();
+        oldCorrelationRule.setRid("rule_1");
+        oldCorrelationRule.setName("name");
+        oldCorrelationRule.setDescription("des1");
+        oldCorrelationRule.setContent("content");
+        oldCorrelationRule.setPackageName("testName");
+        oldCorrelationRule.setEnabled(1);
+        oldCorrelationRule.setClosedControlLoopName("cl-name");
+        oldCorrelationRule.setEngineInstance("127.0.0.1");
+        RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);
+
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
+        EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2"));
+
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
+
+        PowerMock.verifyAll();
+
+        assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
+    }
+
+    @Test
+    public void updateCorrelationRule_rule_not_exist() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("You're trying to update a rule which does not exist in the system.");
+
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);
+
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());
+
+        PowerMock.verifyAll();
+    }
+
+    @Test
+    public void deleteCorrelationRule_request_null() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("The request object can not be empty!");
+
+        ruleMgtWrapper.deleteCorrelationRule(null);
+    }
+
+    @Test
+    public void deleteCorrelationRule_rule_not_exit() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");
+
+        RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
+
+        EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(
+                correlationRuleDaoMock).anyTimes();
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
+                .andReturn(null);
+
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
+
+        PowerMock.verifyAll();
+    }
+
+    @Test
+    public void deleteCorrelationRule_normal() throws Exception {
+        RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
+        CorrelationRule correlationRule = new CorrelationRule();
+        correlationRule.setEnabled(1);
+        EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
+                .andReturn(correlationRule);
+        EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)
+                , EasyMock.anyObject(String.class))).andReturn(true);
+        correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));
+        EasyMock.expectLastCall();
+        PowerMock.replayAll();
+
+        ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
+
+        PowerMock.verifyAll();
+    }
+
+    @Test
+    public void getCorrelationRuleByCondition_data_format_exception() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("An error occurred while building the query SQL.");
+
+        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
+                RuleQueryCondition.class)))
+                .andThrow(new CorrelationException("An error occurred while building the query SQL."));
+
+        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+
+        ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
+
+        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+    }
+
+    @Test
+    public void getCorrelationRuleByCondition_db_exception() throws Exception {
+        thrown.expect(CorrelationException.class);
+        thrown.expectMessage("Failed to query the rule.");
+
+        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
+                RuleQueryCondition.class)))
+                .andThrow(new CorrelationException("Failed to query the rule."));
+
+        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+
+        ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
+
+        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+    }
+
+    @Test
+    public void getCorrelationRuleByCondition_normal() throws Exception {
+        List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);
+        for (int i = 0; i < 10; ++i) {
+            CorrelationRule correlationRule = new CorrelationRule();
+            correlationRule.setContent("content" + i);
+            correlationRule.setName("name" + i);
+            correlationRule.setRid("rule_" + i);
+            correlationRule.setEngineType("engineType" + (i % 2 + 1));
+            correlationRule.setEngineID("engineId" + i);
+            correlationRule.setCreateTime(new Date());
+            correlationRule.setCreator(USER_NAME);
+            correlationRule.setDescription("description" + i);
+            correlationRule.setPackageName("package" + i);
+            correlationRuleList.add(correlationRule);
+        }
+
+        EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
+                RuleQueryCondition.class))).andReturn(correlationRuleList);
+
+        PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+
+        RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
+
+        PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
+
+        assertThat(response.getTotalCount(), is(10));
+
+        for (int i = 0; i < 10; ++i) {
+            assertThat(response.getCorrelationRules().get(i).getRuleId(),
+                    equalTo(correlationRuleList.get(i).getRid()));
+        }
+    }
+
+    private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,
+            int enabled) {
+        RuleCreateRequest rcr;
+        rcr = new RuleCreateRequest();
+        rcr.setRuleName(ruleName);
+        rcr.setDescription(description);
+        rcr.setContent(content);
+        rcr.setEnabled(enabled);
+        return rcr;
+    }
+
+    private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,
+            String content, int enabled) {
+        RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();
+        ruleUpdateRequest.setRuleId(ruleId);
+        ruleUpdateRequest.setDescription(description);
+        ruleUpdateRequest.setContent(content);
+        ruleUpdateRequest.setEnabled(enabled);
+        ruleUpdateRequest.setLoopControlName(clName);
+        return ruleUpdateRequest;
+    }
+
+    private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {
+        RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();
+        ruleDeleteRequest.setRuleId(ruleId);
+        return ruleDeleteRequest;
+    }
+
+    private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {
+        CorrelationRule correlationRule = new CorrelationRule();
+        correlationRule.setContent(ruleCreateRequest.getContent());
+        correlationRule.setDescription(ruleCreateRequest.getDescription());
+        correlationRule.setName(ruleCreateRequest.getRuleName());
+        correlationRule.setCreator(USER_NAME);
+        correlationRule.setModifier(USER_NAME);
+        correlationRule.setEnabled(ruleCreateRequest.getEnabled());
+        return correlationRule;
+    }
+
+    private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {
+        CorrelationRule correlationRule = new CorrelationRule();
+        correlationRule.setRid(ruleUpdateRequest.getRuleId());
+        correlationRule.setContent(ruleUpdateRequest.getContent());
+        correlationRule.setDescription(ruleUpdateRequest.getDescription());
+        correlationRule.setEnabled(ruleUpdateRequest.getEnabled());
+        correlationRule.setUpdateTime(new Date());
+        correlationRule.setModifier(USER_NAME);
+        return correlationRule;
+    }
 }
\ No newline at end of file