Merge "Fix calico tes suite"
diff --git a/tcp_tests/tests/system/test_calico.py b/tcp_tests/tests/system/test_calico.py
index 72f9ca9..cc44ba4 100644
--- a/tcp_tests/tests/system/test_calico.py
+++ b/tcp_tests/tests/system/test_calico.py
@@ -26,8 +26,6 @@
     """Test class for Calico network provider in k8s"""
 
     @pytest.mark.fail_snapshot
-    @pytest.mark.calico_ci
-    @pytest.mark.cz8116
     def test_k8s_netchecker_calico(self, show_step, config, k8s_deployed):
         """Test for deploying k8s environment with Calico plugin and check
            network connectivity between different pods by k8s-netchecker
@@ -71,39 +69,56 @@
 
         Scenario:
             1. Install k8s with Calico network plugin.
-            2. Run netchecker-server service.
-            3. Run netchecker-agent daemon set.
+            2. Check netchecker-server service.
+            3. Check netchecker-agent daemon set.
             4. Get network verification status. Check status is 'OK'.
-            5. Remove local route to netchecker-agent pod on the first node
-            6. Check that the route is automatically recovered
-            7. Get network verification status. Check status is 'OK'.
+            5. Get metrics from netchecker
+            6. Remove local route to netchecker-agent pod on the first node
+            7. Check that the route is automatically recovered
+            8. Get network verification status. Check status is 'OK'.
 
         Duration: 3000 seconds
         """
 
-        # STEP #1
         show_step(1)
         k8sclient = k8s_deployed.api
         assert k8sclient.nodes.list() is not None, "Can not get nodes list"
-
-        # STEP #2
+        netchecker_port = netchecker.get_service_port(k8sclient)
         show_step(2)
-        netchecker.start_server(k8s=k8s_deployed, config=config)
-        LOG.info("Waiting for netchecker server is running")
-        netchecker.wait_check_network(k8sclient, works=True,
-                                      timeout=300)
+        netchecker.get_netchecker_pod_status(k8s=k8s_deployed,
+                                             namespace='netchecker')
 
-        # STEP #3
         show_step(3)
-        netchecker.start_agent(k8s=k8s_deployed, config=config)
+        netchecker.get_netchecker_pod_status(k8s=k8s_deployed,
+                                             pod_name='netchecker-agent',
+                                             namespace='netchecker')
 
-        # STEP #4
         show_step(4)
-        netchecker.wait_check_network(k8sclient, works=True,
-                                      timeout=300)
-
-        # STEP #5
+        netchecker.wait_check_network(k8sclient, namespace='netchecker',
+                                      netchecker_pod_port=netchecker_port)
         show_step(5)
+        res = netchecker.get_metric(k8sclient,
+                                    netchecker_pod_port=netchecker_port,
+                                    namespace='netchecker')
+
+        assert res.status_code == 200, 'Unexpected response code {}'\
+            .format(res)
+        metrics = ['ncagent_error_count_total', 'ncagent_http_probe_code',
+                   'ncagent_http_probe_connect_time_ms',
+                   'ncagent_http_probe_connection_result',
+                   'ncagent_http_probe_content_transfer_time_ms',
+                   'ncagent_http_probe_dns_lookup_time_ms',
+                   'ncagent_http_probe_server_processing_time_ms',
+                   'ncagent_http_probe_tcp_connection_time_ms',
+                   'ncagent_http_probe_total_time_ms',
+                   'ncagent_report_count_tota']
+        for metric in metrics:
+            assert metric in res.text.strip(), \
+                'Mandotory metric {0} is missing in {1}'.format(
+                    metric, res.text)
+
+        # STEP #6
+        show_step(6)
         first_node = k8sclient.nodes.list()[0]
         first_node_ips = [addr.address for addr in first_node.status.addresses
                           if 'IP' in addr.type]
@@ -116,7 +131,7 @@
 
         target_pod_ip = None
 
-        for pod in k8sclient.pods.list():
+        for pod in k8sclient.pods.list(namespace='netchecker'):
             if pod.status.host_ip not in first_node_ips:
                 continue
             # TODO: get pods by daemonset with name 'netchecker-agent'
@@ -131,8 +146,8 @@
             target_pod_ip, first_node.name
         ))
 
-        # STEP #6
-        show_step(6)
+        # STEP #7
+        show_step(7)
         route_chk_cmd = 'ip route list | grep -q "{0}"'.format(target_pod_ip)
         helpers.wait_pass(
             lambda: underlay.sudo_check_call(cmd=route_chk_cmd,
@@ -140,14 +155,17 @@
             timeout=120,
             interval=2
         )
-        pod_ping_cmd = 'sleep 3 && ping -q -c 1 -w 3 {0}'.format(target_pod_ip)
+        pod_ping_cmd = 'sleep 120 && ping -q -c 1 -w 3 {0}'.format(
+            target_pod_ip)
         underlay.sudo_check_call(cmd=pod_ping_cmd, node_name=first_node_name)
         LOG.debug('Local route to pod IP {0} on node {1} is '
                   'recovered'.format(target_pod_ip, first_node.name))
 
-        # STEP #7
-        show_step(7)
-        netchecker.wait_check_network(k8sclient, works=True)
+        # STEP #8
+        show_step(8)
+        netchecker.wait_check_network(k8sclient, namespace='netchecker',
+                                      netchecker_pod_port=netchecker_port,
+                                      works=True)
 
     @pytest.mark.fail_snapshot
     # FIXME(apanchenko): uncomment as soon as the following bug is fixed