NodePort information returned in context should be a dictionary 49/59849/3
authorRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Mon, 16 Jul 2018 08:35:34 +0000 (09:35 +0100)
committerRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Thu, 19 Jul 2018 08:07:16 +0000 (08:07 +0000)
In Kubernetes context, NodePort information returned in context should be
a dictionary. In [1], the node information is dumped in a yaml file. The
NodePort object doesn't have a serialize implementation; instead of
returning the object, an equivalent dictionary should be returned.

[1]https://github.com/opnfv/yardstick/blob/f6fa0d7422f0669d049dbf07a51eb39b1dc25830/yardstick/benchmark/scenarios/networking/vnf_generic.py#L293

JIRA: YARDSTICK-1323

Change-Id: If4844c9b074920a7a7d8c1a424b681f9f8a4b0c5
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
yardstick/benchmark/contexts/kubernetes.py
yardstick/tests/unit/benchmark/contexts/test_kubernetes.py

index 704c4a0..7534c4e 100644 (file)
@@ -166,8 +166,8 @@ class KubernetesContext(ctx_base.Context):
     def _get_server(self, name):
         node_ports = self._get_service_ports(name)
         for sn_port in (sn_port for sn_port in node_ports
-                        if sn_port.port == constants.SSH_PORT):
-            node_port = sn_port.node_port
+                        if sn_port['port'] == constants.SSH_PORT):
+            node_port = sn_port['node_port']
             break
         else:
             raise exceptions.KubernetesSSHPortNotDefined()
@@ -224,4 +224,11 @@ class KubernetesContext(ctx_base.Context):
         service = k8s_utils.get_service_by_name(service_name)
         if not service:
             raise exceptions.KubernetesServiceObjectNotDefined()
-        return service.ports
+        ports = []
+        for port in service.ports:
+            ports.append({'name': port.name,
+                          'node_port': port.node_port,
+                          'port': port.port,
+                          'protocol': port.protocol,
+                          'target_port': port.target_port})
+        return ports
index bace376..b526e7c 100644 (file)
@@ -57,6 +57,9 @@ class NodePort(object):
     def __init__(self):
         self.node_port = 30000
         self.port = constants.SSH_PORT
+        self.name = 'port_name'
+        self.protocol = 'TCP'
+        self.target_port = constants.SSH_PORT
 
 
 class Service(object):
@@ -152,8 +155,10 @@ class KubernetesTestCase(unittest.TestCase):
     def test_get_server(self, mock_get_node_ip, mock_get_pod_by_name):
         mock_get_pod_by_name.return_value = Pod()
         mock_get_node_ip.return_value = '172.16.10.131'
-        with mock.patch.object(self.k8s_context, '_get_service_ports',
-                               return_value=[NodePort()]):
+        with mock.patch.object(self.k8s_context, '_get_service_ports') as \
+                mock_get_sports:
+            mock_get_sports.return_value = [
+                {'port': constants.SSH_PORT, 'node_port': 30000}]
             server = self.k8s_context._get_server('server_name')
         self.assertEqual('server_name', server['name'])
         self.assertEqual(30000, server['ssh_port'])
@@ -253,7 +258,12 @@ class KubernetesTestCase(unittest.TestCase):
         name = 'rc_name'
         service_ports = self.k8s_context._get_service_ports(name)
         mock_get_service_by_name.assert_called_once_with(name + '-service')
-        self.assertEqual(30000, service_ports[0].node_port)
+        expected = {'node_port': 30000,
+                    'port': constants.SSH_PORT,
+                    'name': 'port_name',
+                    'protocol': 'TCP',
+                    'target_port': constants.SSH_PORT}
+        self.assertEqual(expected, service_ports[0])
 
     @mock.patch.object(k8s_utils, 'get_service_by_name',
                        return_value=None)