diff options
-rw-r--r-- | sdnvpn/lib/utils.py | 34 | ||||
-rw-r--r-- | sdnvpn/test/functest/config.yaml | 5 | ||||
-rw-r--r-- | sdnvpn/test/functest/testcase_9.py | 78 |
3 files changed, 117 insertions, 0 deletions
diff --git a/sdnvpn/lib/utils.py b/sdnvpn/lib/utils.py index e22e455..a7aa991 100644 --- a/sdnvpn/lib/utils.py +++ b/sdnvpn/lib/utils.py @@ -649,3 +649,37 @@ def create_router_association(neutron_client, bgpvpn_id, router_id): def create_network_association(neutron_client, bgpvpn_id, neutron_network_id): json_body = {"network_association": {"network_id": neutron_network_id}} return neutron_client.create_network_association(bgpvpn_id, json_body) + + +def is_fail_mode_secure(): + """ + Checks the value of the attribute fail_mode, + if it is set to secure. This check is performed + on all OVS br-int interfaces, for all OpenStack nodes. + """ + is_secure = {} + openstack_nodes = get_nodes() + get_ovs_int_cmd = ("sudo ovs-vsctl show | " + "grep -i bridge | " + "awk '{print $2}'") + # Define OVS get fail_mode command + get_ovs_fail_mode_cmd = ("sudo ovs-vsctl get-fail-mode br-int") + for openstack_node in openstack_nodes: + if not openstack_node.is_active(): + continue + + ovs_int_list = (openstack_node.run_cmd(get_ovs_int_cmd). + strip().split('\n')) + if 'br-int' in ovs_int_list: + # Execute get fail_mode command + br_int_fail_mode = (openstack_node. + run_cmd(get_ovs_fail_mode_cmd).strip()) + if br_int_fail_mode == 'secure': + # success + is_secure[openstack_node.name] = True + else: + # failure + logging.error('The fail_mode for br-int was not secure ' + 'in {} node'.format(openstack_node.name)) + is_secure[openstack_node.name] = False + return is_secure diff --git a/sdnvpn/test/functest/config.yaml b/sdnvpn/test/functest/config.yaml index 6480c4c..3ffd215 100644 --- a/sdnvpn/test/functest/config.yaml +++ b/sdnvpn/test/functest/config.yaml @@ -153,3 +153,8 @@ testcases: secgroup_descr: Security group for SDNVPN test cases targets: '88:88' route_distinguishers: '18:18' + + testcase_9: + enabled: true + description: Verify that all OpenStack nodes OVS br-int have fail_mode set to secure. + testname_db: functest_testcase_9 diff --git a/sdnvpn/test/functest/testcase_9.py b/sdnvpn/test/functest/testcase_9.py new file mode 100644 index 0000000..482ff48 --- /dev/null +++ b/sdnvpn/test/functest/testcase_9.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# +# Copyright (c) 2017 All rights reserved +# This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Tests performed: +# - Peering OpenDaylight with Quagga: +# - Set up a Quagga instance in the functest container +# - Start a BGP router with OpenDaylight +# - Add the functest Quagga as a neighbor +# - Verify that the OpenDaylight and gateway Quagga peer +import argparse +import logging + +from sdnvpn.lib import utils as test_utils +from sdnvpn.lib import config as sdnvpn_config + +from sdnvpn.lib.results import Results + +COMMON_CONFIG = sdnvpn_config.CommonConfig() +TESTCASE_CONFIG = sdnvpn_config.TestcaseConfig("testcase_9") + +logger = logging.getLogger('sdnvpn-testcase-9') + +parser = argparse.ArgumentParser() + +parser.add_argument("-r", "--report", + help="Create json result file", + action="store_true") + +args = parser.parse_args() + + +def main(): + results = Results(COMMON_CONFIG.line_length) + results.add_to_summary(0, "=") + results.add_to_summary(2, "STATUS", "SUBTEST") + results.add_to_summary(0, "=") + + openstack_nodes = test_utils.get_nodes() + + # node.is_odl() doesn't work in Apex + # https://jira.opnfv.org/browse/RELENG-192 + controllers = [node for node in openstack_nodes + if "running" in + node.run_cmd("sudo systemctl status opendaylight")] + + msg = ("Verify that all OpenStack nodes OVS br-int have " + "fail_mode set to secure") + results.record_action(msg) + results.add_to_summary(0, "-") + if not controllers: + msg = ("Controller (ODL) list is empty. Skipping rest of tests.") + logger.info(msg) + results.add_failure(msg) + return results.compile_summary() + else: + msg = ("Controller (ODL) list is ready") + logger.info(msg) + results.add_success(msg) + # Get fail_mode status on all nodes + fail_mode_statuses = test_utils.is_fail_mode_secure() + for node_name, status in fail_mode_statuses.iteritems(): + msg = 'Node {} br-int is fail_mode secure'.format(node_name) + if status: + results.add_success(msg) + else: + results.add_failure(msg) + + return results.compile_summary() + +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO) + main() |