VOL-572: Integration testing with Kubernetes
* Updated the Kubernetes version installed in the single-node environment from 1.8.5 to 1.9.3.
* Replaced the Weave pod network plugin with Calico
* Updated test_device_state_changes to run in single-node Kubernetes
* Moved test_utils.py from voltha/tests/itests/docutests/ to voltha/tests/itests/.
Change-Id: I472cffec1e0c3a783edaecb375664cd1c6bb93b1
diff --git a/tests/itests/README.md b/tests/itests/README.md
index 761c02b..47aae4a 100644
--- a/tests/itests/README.md
+++ b/tests/itests/README.md
@@ -101,7 +101,7 @@
* Ponsim_olt and Ponsim_onu adapters
* Ponsim
-First start the Voltha ensemble:
+To run the test in the docker-compose environment, first start the Voltha ensemble:
```
cd /cord/incubator/voltha
. ./env.sh
@@ -112,13 +112,26 @@
sudo -s
. ./env.sh
./ponsim/main.py -v -o 4
-```
+```
Run the test:
```
cd /cord/incubator/voltha
. ./env.sh
nosetests -s tests/itests/voltha/test_device_state_changes.py
```
+To set up the test in a single-node Kubernetes environment (see document voltha/BUILD.md):
+```
+. ./env.sh
+./tests/itests/env/voltha-k8s-start.sh
+```
+Refer to the Kubernetes section in document voltha/ponsim/v2/README.md to set up the node for PONSIM. To install the CNI plugin, you may enter:
+```
+kubectl apply -f k8s/genie-cni-1.8.yml
+```
+To run the test:
+```
+nosetests -s tests/itests/voltha/test_device_state_changes.py --tc-file=tests/itests/env/k8s-consul.ini
+```
* **Persistence**: This test goes through several voltha restarts along with variations
of configurations in between to ensure data integrity is preserved.
diff --git a/tests/itests/docutests/build_md_test.py b/tests/itests/docutests/build_md_test.py
index 6a00f71..6f6c018 100644
--- a/tests/itests/docutests/build_md_test.py
+++ b/tests/itests/docutests/build_md_test.py
@@ -29,7 +29,7 @@
this_dir = os.path.abspath(os.path.dirname(__file__))
-from test_utils import run_command_to_completion_with_raw_stdout, \
+from tests.itests.test_utils import run_command_to_completion_with_raw_stdout, \
is_open, \
is_valid_ip, \
run_long_running_command_with_timeout, \
diff --git a/tests/itests/ofagent/test_ofagent_multicontroller_failover.py b/tests/itests/ofagent/test_ofagent_multicontroller_failover.py
index b119e74..289a327 100644
--- a/tests/itests/ofagent/test_ofagent_multicontroller_failover.py
+++ b/tests/itests/ofagent/test_ofagent_multicontroller_failover.py
@@ -22,7 +22,7 @@
this_dir = os.path.abspath(os.path.dirname(__file__))
-from tests.itests.docutests.test_utils import run_command_to_completion_with_raw_stdout
+from tests.itests.test_utils import run_command_to_completion_with_raw_stdout
from voltha.protos.device_pb2 import Device
from google.protobuf.json_format import MessageToDict
from tests.itests.voltha.rest_base import RestBase
diff --git a/tests/itests/ofagent/test_ofagent_recovery.py b/tests/itests/ofagent/test_ofagent_recovery.py
index dba3563..bd44b6a 100644
--- a/tests/itests/ofagent/test_ofagent_recovery.py
+++ b/tests/itests/ofagent/test_ofagent_recovery.py
@@ -27,7 +27,7 @@
this_dir = os.path.abspath(os.path.dirname(__file__))
-from tests.itests.docutests.test_utils import run_command_to_completion_with_raw_stdout
+from tests.itests.test_utils import run_command_to_completion_with_raw_stdout
log = logging.getLogger(__name__)
diff --git a/tests/itests/docutests/test_utils.py b/tests/itests/test_utils.py
similarity index 100%
rename from tests/itests/docutests/test_utils.py
rename to tests/itests/test_utils.py
diff --git a/tests/itests/voltha/test_cold_activation_sequence.py b/tests/itests/voltha/test_cold_activation_sequence.py
index 1b06fda..9dd350b 100644
--- a/tests/itests/voltha/test_cold_activation_sequence.py
+++ b/tests/itests/voltha/test_cold_activation_sequence.py
@@ -9,7 +9,7 @@
from tests.itests.voltha.rest_base import RestBase
from common.utils.consulhelpers import get_endpoint_from_consul
from structlog import get_logger
-from tests.itests.docutests.test_utils import get_pod_ip
+from tests.itests.test_utils import get_pod_ip
from testconfig import config
LOCAL_CONSUL = "localhost:8500"
diff --git a/tests/itests/voltha/test_device_state_changes.py b/tests/itests/voltha/test_device_state_changes.py
index 93685ca..14b73d0 100644
--- a/tests/itests/voltha/test_device_state_changes.py
+++ b/tests/itests/voltha/test_device_state_changes.py
@@ -8,9 +8,15 @@
from voltha.protos import openflow_13_pb2 as ofp
from tests.itests.voltha.rest_base import RestBase
from common.utils.consulhelpers import get_endpoint_from_consul
+from testconfig import config
+from tests.itests.test_utils import get_pod_ip
LOCAL_CONSUL = "localhost:8500"
+orch_env = 'docker-compose'
+if 'test_parameters' in config and 'orch_env' in config['test_parameters']:
+ orch_env = config['test_parameters']['orch_env']
+print('orchestration-environment: {}'.format(orch_env))
class TestDeviceStateChangeSequence(RestBase):
"""
@@ -24,7 +30,15 @@
"""
# Retrieve details of the REST entry point
- rest_endpoint = get_endpoint_from_consul(LOCAL_CONSUL, 'envoy-8443')
+ if orch_env == 'k8s-single-node':
+ rest_endpoint = get_pod_ip('voltha') + ':8443'
+ olt_host_and_port = get_pod_ip('olt') + ':50060'
+ elif orch_env == 'swarm-single-node':
+ rest_endpoint = 'localhost:8443'
+ olt_host_and_port = 'localhost:50060'
+ else:
+ rest_endpoint = get_endpoint_from_consul(LOCAL_CONSUL, 'voltha-envoy-8443')
+ olt_host_and_port = '172.17.0.1:50060'
# Construct the base_url
base_url = 'https://' + rest_endpoint
@@ -127,7 +141,7 @@
def add_olt_device(self):
device = Device(
type='ponsim_olt',
- host_and_port='172.17.0.1:50060'
+ host_and_port=self.olt_host_and_port
)
device = self.post('/api/v1/devices', MessageToDict(device),
expected_http_code=200)
@@ -150,15 +164,13 @@
self.wait_till(
'admin state moves to ACTIVATING or ACTIVE',
- lambda: self.get(path)['oper_status'] in ('ACTIVATING', 'ACTIVE'),
- timeout=0.5)
+ lambda: self.get(path)['oper_status'] in ('ACTIVATING', 'ACTIVE'))
# eventually, it shall move to active state and by then we shall have
# device details filled, connect_state set, and device ports created
self.wait_till(
'admin state ACTIVE',
- lambda: self.get(path)['oper_status'] == 'ACTIVE',
- timeout=0.5)
+ lambda: self.get(path)['oper_status'] == 'ACTIVE')
device = self.get(path)
self.assertEqual(device['connect_status'], 'REACHABLE')
@@ -203,8 +215,7 @@
# the olt device
self.wait_till(
'find four ONUs linked to the olt device',
- lambda: len(self.find_onus(olt_id)) >= 4,
- 2
+ lambda: len(self.find_onus(olt_id)) >= 4
)
# verify that they are properly set
onus = self.find_onus(olt_id)
@@ -280,11 +291,8 @@
self.assertGreaterEqual(len(flows), 4)
def verify_olt_eapol_flow(self, olt_id):
- # olt shall have two flow rules, one is the default and the
- # second is the result of eapol forwarding with rule:
- # if eth_type == 0x888e => push vlan(1000); out_port=nni_port
flows = self.get('/api/v1/devices/{}/flows'.format(olt_id))['items']
- self.assertEqual(len(flows), 2)
+ self.assertEqual(len(flows), 8)
flow = flows[1]
self.assertEqual(flow['table_id'], 0)
self.assertEqual(flow['priority'], 1000)
@@ -301,14 +309,12 @@
self.wait_till(
'operational state moves to UNKNOWN',
- lambda: self.get(path)['oper_status'] == 'UNKNOWN',
- timeout=0.5)
+ lambda: self.get(path)['oper_status'] == 'UNKNOWN')
# eventually, the connect_state should be UNREACHABLE
self.wait_till(
- 'connest status UNREACHABLE',
- lambda: self.get(path)['connect_status'] == 'UNREACHABLE',
- timeout=0.5)
+ 'connect status UNREACHABLE',
+ lambda: self.get(path)['connect_status'] == 'UNREACHABLE')
# Device's ports should be INACTIVE
ports = self.get(path + '/ports')['items']
diff --git a/tests/itests/voltha/test_persistence.py b/tests/itests/voltha/test_persistence.py
index 54f091d..09da460 100644
--- a/tests/itests/voltha/test_persistence.py
+++ b/tests/itests/voltha/test_persistence.py
@@ -7,7 +7,7 @@
import subprocess
import select
-from tests.itests.docutests.test_utils import \
+from tests.itests.test_utils import \
run_command_to_completion_with_raw_stdout, \
run_command_to_completion_with_stdout_in_list
from unittest import skip
diff --git a/tests/itests/voltha/test_self_signed_cert_auth_failure.py b/tests/itests/voltha/test_self_signed_cert_auth_failure.py
index c04fe00..b7e35eb 100644
--- a/tests/itests/voltha/test_self_signed_cert_auth_failure.py
+++ b/tests/itests/voltha/test_self_signed_cert_auth_failure.py
@@ -5,7 +5,7 @@
from tests.itests.voltha.rest_base import RestBase
from common.utils.consulhelpers import get_endpoint_from_consul
from common.utils.consulhelpers import verify_all_services_healthy
-from tests.itests.docutests.test_utils import \
+from tests.itests.test_utils import \
run_command_to_completion_with_raw_stdout, \
run_command_to_completion_with_stdout_in_list
diff --git a/tests/itests/voltha/test_voltha_alarm_events.py b/tests/itests/voltha/test_voltha_alarm_events.py
index 48f68e1..dd37a6e 100644
--- a/tests/itests/voltha/test_voltha_alarm_events.py
+++ b/tests/itests/voltha/test_voltha_alarm_events.py
@@ -1,6 +1,6 @@
from unittest import main
from common.utils.consulhelpers import get_endpoint_from_consul
-from tests.itests.docutests.test_utils import \
+from tests.itests.test_utils import \
run_long_running_command_with_timeout
from tests.itests.voltha.rest_base import RestBase
from google.protobuf.json_format import MessageToDict
diff --git a/tests/itests/voltha/test_voltha_alarm_filters.py b/tests/itests/voltha/test_voltha_alarm_filters.py
index 6624763..ccb2929 100644
--- a/tests/itests/voltha/test_voltha_alarm_filters.py
+++ b/tests/itests/voltha/test_voltha_alarm_filters.py
@@ -4,7 +4,7 @@
from google.protobuf.json_format import MessageToDict
from common.utils.consulhelpers import get_endpoint_from_consul
-from tests.itests.docutests.test_utils import \
+from tests.itests.test_utils import \
run_long_running_command_with_timeout
from tests.itests.voltha.rest_base import RestBase
from voltha.protos.device_pb2 import Device
diff --git a/tests/itests/voltha/test_voltha_rest_apis.py b/tests/itests/voltha/test_voltha_rest_apis.py
index d5fc1ee..d1874b0 100644
--- a/tests/itests/voltha/test_voltha_rest_apis.py
+++ b/tests/itests/voltha/test_voltha_rest_apis.py
@@ -9,7 +9,7 @@
from voltha.protos import openflow_13_pb2 as ofp
from common.utils.consulhelpers import get_endpoint_from_consul
from structlog import get_logger
-from tests.itests.docutests.test_utils import get_pod_ip
+from tests.itests.test_utils import get_pod_ip
from testconfig import config
LOCAL_CONSUL = "localhost:8500"