BGP flow spec configuration system test issue fix.

Change-Id: Ia912fdb15f584b477ead748aed87e3c4fa003d29
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
index dac1ee8..8bb05df 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpCfg.java
@@ -44,6 +44,29 @@
         IP_AS_CONFIGURED
     }
 
+    enum FlowSpec {
+
+        /**
+         * Signifies that peer support IPV4 flow specification.
+         */
+        IPV4,
+
+        /**
+         *  Signifies that peer support VPNV4 flow specification.
+         */
+        VPNV4,
+
+        /**
+         *  Signifies that peer support IPV4 and VPNV4 flow specification.
+         */
+        IPV4_VPNV4,
+
+        /**
+         * Signifies that peer flow specification capability disabled.
+         */
+        NONE
+    }
+
     /**
      * Returns the status of the configuration based on this state certain operations like connection is handled.
      *
@@ -294,4 +317,18 @@
      * @return state information
      */
     BgpPeerCfg.State getPeerConnState(String routerid);
+
+    /**
+     * Gets the flow specification capability.
+     *
+     * @return flow specification capability
+     */
+    FlowSpec flowSpecCapability();
+
+    /**
+     * Sets the flow specification capability.
+     *
+     * @param flowSpec flow specification capability
+     */
+    void setFlowSpecCapability(FlowSpec flowSpec);
 }
diff --git a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
index e519404..2fb970f 100755
--- a/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
+++ b/protocols/bgp/api/src/main/java/org/onosproject/bgp/controller/BgpPeerCfg.java
@@ -58,24 +58,6 @@
         INVALID
     }
 
-    enum FlowSpec {
-
-        /**
-         * Signifies that peer support IPV4 flow specification.
-         */
-        IPV4,
-
-        /**
-         *  Signifies that peer support VPNV4 flow specification.
-         */
-        VPNV4,
-
-        /**
-         * Signifies that peer flow specification support disabled.
-         */
-        NONE
-    }
-
     /**
      * Returns the connection State information of the peer.
      *
@@ -195,18 +177,4 @@
      * @return peer connect instance
      */
     BgpConnectPeer connectPeer();
-
-    /**
-     * Gets the flow specification capability.
-     *
-     * @return flow specification status
-     */
-    public FlowSpec flowSpecStatus();
-
-    /**
-     * sets the flow specification capability.
-     *
-     * @param flowSpecStatus flow specification status
-     */
-    public void setFlowSpecStatus(FlowSpec flowSpecStatus);
 }
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
index d2c8098..af229a5 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpChannelHandler.java
@@ -665,14 +665,18 @@
      */
     private void sendHandshakeOpenMessage() throws IOException, BgpParseException {
         int bgpId;
+        BgpCfg.FlowSpec flowSpec = bgpconfig.flowSpecCapability();
         boolean flowSpecStatus = false;
         boolean vpnFlowSpecStatus = false;
 
         bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt();
-        BgpPeerConfig peerConfig = (BgpPeerConfig) bgpconfig.displayPeers(peerAddr);
-        if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.IPV4) {
+
+        if (flowSpec == BgpCfg.FlowSpec.IPV4) {
             flowSpecStatus = true;
-        } else if (peerConfig.flowSpecStatus() == BgpPeerCfg.FlowSpec.VPNV4) {
+        } else if (flowSpec == BgpCfg.FlowSpec.VPNV4) {
+            vpnFlowSpecStatus = true;
+        } else if (flowSpec == BgpCfg.FlowSpec.IPV4_VPNV4) {
+            flowSpecStatus = true;
             vpnFlowSpecStatus = true;
         }
 
@@ -792,9 +796,9 @@
         boolean isMultiProtocolLsCapability = false;
         boolean isMultiProtocolFlowSpecCapability = false;
         boolean isMultiProtocolVpnFlowSpecCapability = false;
+        BgpCfg.FlowSpec flowSpec = h.bgpconfig.flowSpecCapability();
 
-        BgpPeerConfig peerConfig = (BgpPeerConfig) h.bgpconfig.displayPeers(peerAddr);
-        if (peerConfig.flowSpecStatus() != BgpPeerCfg.FlowSpec.NONE) {
+        if (flowSpec != BgpCfg.FlowSpec.NONE) {
             isFlowSpecCapabilityCfg = true;
         }
 
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
index 1c846eb..5b367a7 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpConfig.java
@@ -51,7 +51,7 @@
     private boolean largeAs = false;
     private int maxConnRetryTime;
     private int maxConnRetryCount;
-
+    private FlowSpec flowSpec = FlowSpec.NONE;
     private Ip4Address routerId = null;
     private TreeMap<String, BgpPeerCfg> bgpPeerTree = new TreeMap<>();
     private BgpConnectPeer connectPeer;
@@ -119,6 +119,16 @@
     }
 
     @Override
+    public FlowSpec flowSpecCapability() {
+        return this.flowSpec;
+    }
+
+    @Override
+    public void setFlowSpecCapability(FlowSpec flowSpec) {
+        this.flowSpec = flowSpec;
+    }
+
+    @Override
     public String getRouterId() {
         if (this.routerId != null) {
             return this.routerId.toString();
@@ -222,7 +232,7 @@
             if (disconnPeer != null) {
                 // TODO: send notification peer deconfigured
                 disconnPeer.disconnectPeer();
-            } else {
+            } else if (lspeer.connectPeer() != null) {
                 lspeer.connectPeer().disconnectPeer();
             }
             lspeer.setState(BgpPeerCfg.State.IDLE);
diff --git a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
index 65cd485..a8eaee3 100755
--- a/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
+++ b/protocols/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BgpPeerConfig.java
@@ -30,7 +30,6 @@
     private State state;
     private boolean selfInitiated;
     private BgpConnectPeer connectPeer;
-    private FlowSpec flowSpecStatus = FlowSpec.NONE;
 
     /**
      * Constructor to initialize the values.
@@ -119,14 +118,4 @@
     public void setConnectPeer(BgpConnectPeer connectPeer) {
         this.connectPeer = connectPeer;
     }
-
-    @Override
-    public FlowSpec flowSpecStatus() {
-        return flowSpecStatus;
-    }
-
-    @Override
-    public void setFlowSpecStatus(FlowSpec flowSpecStatus) {
-        this.flowSpecStatus = flowSpecStatus;
-    }
 }