Fix policy status issue

Change the initial status of policy from SENT_AND_DEPLOYED to NOT_SENT.

Issue-ID: CLAMP-533
Change-Id: I5daec8e5d02c4db48005fbf25e642ec73df5a20c
Signed-off-by: xuegao <xg353y@intl.att.com>
diff --git a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
index 9321423..13ccea5 100644
--- a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
+++ b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
@@ -62,7 +62,7 @@
          * on by one, each time we increase the level we can't decrease it anymore.
          * That's why it starts with the lowest one SENT_AND_DEPLOYED.
          */
-        super(SENT_AND_DEPLOYED);
+        super(NOT_SENT);
     }
 
     @Override
diff --git a/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java
new file mode 100644
index 0000000..73bd7f9
--- /dev/null
+++ b/src/test/java/org/onap/clamp/loop/PolicyComponentTest.java
@@ -0,0 +1,239 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.clamp.loop.components.external.ExternalComponentState;
+import org.onap.clamp.loop.components.external.PolicyComponent;
+
+
+public class PolicyComponentTest {
+
+     /**
+     * Test the computeState method. 
+     * oldState           newState        expectedFinalState
+     * NOT_SENT      SENT_AND_DEPLOYED          NOT_SENT
+     * NOT_SENT             SENT                NOT_SENT
+     * NOT_SENT           NOT_SENT              NOT_SENT
+     * NOT_SENT           IN_ERROR              IN_ERROR
+     */
+    @Test
+    public void computeStateTestOriginalStateNotSent() {
+         Exchange exchange = Mockito.mock(Exchange.class);
+         Message message = Mockito.mock(Message.class);
+         Exchange exchange2 = Mockito.mock(Exchange.class);
+         Mockito.when(exchange.getIn()).thenReturn(message);
+         Mockito.when(message.getExchange()).thenReturn(exchange2);
+
+         // policy found + deployed 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+
+         PolicyComponent policy = new PolicyComponent ();
+         ExternalComponentState state = policy.computeState(exchange);
+
+         assertThat(state.getStateName()).isEqualTo("NOT_SENT");
+
+         // policy found + not deployed 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state2 = policy.computeState(exchange);
+
+         assertThat(state2.getStateName()).isEqualTo("NOT_SENT");
+
+         // policy not found + not deployed
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state4 = policy.computeState(exchange);
+
+         assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+
+         // policy not found + deployed
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state3 = policy.computeState(exchange);
+
+         assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+
+    }
+
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * SENT                 SENT                SENT
+    * SENT          SENT_AND_DEPLOYED          SENT
+    * SENT              IN_ERROR              IN_ERROR
+    * SENT              NOT_SENT              NOT_SENT
+    */
+    @Test
+    public void computeStateTestOriginalStateSent() throws IOException {
+         Exchange exchange = Mockito.mock(Exchange.class);
+         Message message = Mockito.mock(Message.class);
+         Exchange exchange2 = Mockito.mock(Exchange.class);
+         Mockito.when(exchange.getIn()).thenReturn(message);
+         Mockito.when(message.getExchange()).thenReturn(exchange2);
+
+         PolicyComponent policy = new PolicyComponent ();
+         ExternalComponentState SENT = new ExternalComponentState("SENT",
+                 "The policies defined have been created but NOT deployed on the policy engine", 50);
+         policy.setState(SENT);
+
+         // new policy state SENT 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state = policy.computeState(exchange);
+
+         assertThat(state.getStateName()).isEqualTo("SENT");
+
+         // new policy state SENT_AND_DEPLOYED 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state2 = policy.computeState(exchange);
+
+         assertThat(state2.getStateName()).isEqualTo("SENT");
+
+         // new policy state IN_ERROR 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state3 = policy.computeState(exchange);
+
+         assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+
+         // new policy state NOT_SENT
+         policy.setState(SENT);
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state4 = policy.computeState(exchange);
+
+         assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+    }
+
+    /**
+    * Test the computeState method. 
+    * oldState                   newState        expectedFinalState
+    * SENT_AND_DEPLOYED     SENT_AND_DEPLOYED    SENT_AND_DEPLOYED
+    * SENT_AND_DEPLOYED            SENT                SENT
+    * SENT_AND_DEPLOYED          IN_ERROR            IN_ERROR
+    * SENT_AND_DEPLOYED          NOT_SENT            NOT_SENT
+    */
+    @Test
+    public void computeStateTestOriginalStateSentAndDeployed() throws IOException {
+         Exchange exchange = Mockito.mock(Exchange.class);
+         Message message = Mockito.mock(Message.class);
+         Exchange exchange2 = Mockito.mock(Exchange.class);
+         Mockito.when(exchange.getIn()).thenReturn(message);
+         Mockito.when(message.getExchange()).thenReturn(exchange2);
+
+         PolicyComponent policy = new PolicyComponent ();
+         ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED",
+                 "The policies defined have been created and deployed on the policy engine", 10);
+         policy.setState(SENT_AND_DEPLOYED);
+
+         // new policy state SENT_AND_DEPLOYED 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state = policy.computeState(exchange);
+
+         assertThat(state.getStateName()).isEqualTo("SENT_AND_DEPLOYED");
+
+         // new policy state SENT 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state2 = policy.computeState(exchange);
+
+         assertThat(state2.getStateName()).isEqualTo("SENT");
+
+         // new policy state IN_ERROR 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state3 = policy.computeState(exchange);
+
+         assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+
+         // new policy state NOT_SENT
+         policy.setState(SENT_AND_DEPLOYED);
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state4 = policy.computeState(exchange);
+
+         assertThat(state4.getStateName()).isEqualTo("NOT_SENT");
+    }
+
+    /**
+    * Test the computeState method. 
+    * oldState           newState        expectedFinalState
+    * IN_ERROR     SENT_AND_DEPLOYED         IN_ERROR
+    * IN_ERROR            SENT               IN_ERROR
+    * IN_ERROR          IN_ERROR             IN_ERROR
+    * IN_ERROR          NOT_SENT             IN_ERROR
+    */
+    @Test
+    public void computeStateTestOriginalStateInError() throws IOException {
+         Exchange exchange = Mockito.mock(Exchange.class);
+         Message message = Mockito.mock(Message.class);
+         Exchange exchange2 = Mockito.mock(Exchange.class);
+         Mockito.when(exchange.getIn()).thenReturn(message);
+         Mockito.when(message.getExchange()).thenReturn(exchange2);
+
+         PolicyComponent policy = new PolicyComponent ();
+         ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
+                 "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent", 100);
+         policy.setState(IN_ERROR);
+
+         // new policy state SENT_AND_DEPLOYED 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state = policy.computeState(exchange);
+
+         assertThat(state.getStateName()).isEqualTo("IN_ERROR");
+
+         // new policy state SENT 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(true);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state2 = policy.computeState(exchange);
+
+         assertThat(state2.getStateName()).isEqualTo("IN_ERROR");
+
+         // new policy state IN_ERROR 
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(true);
+         ExternalComponentState state3 = policy.computeState(exchange);
+
+         assertThat(state3.getStateName()).isEqualTo("IN_ERROR");
+
+         // new policy state NOT_SENT
+         Mockito.when(exchange2.getProperty("policyFound")).thenReturn(false);
+         Mockito.when(exchange2.getProperty("policyDeployed")).thenReturn(false);
+         ExternalComponentState state4 = policy.computeState(exchange);
+
+         assertThat(state4.getStateName()).isEqualTo("IN_ERROR");
+    }
+}