summaryrefslogtreecommitdiffstats
path: root/core/vswitch_controller_pvp.py
blob: a4f61961d6978722424b2a78cecb86f639f7fe84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# Copyright 2015 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""VSwitch controller for Physical to VM to Physical deployment
"""

import logging

from core.vswitch_controller import IVswitchController
from vswitches.utils import add_ports_to_flow
from conf import settings

_FLOW_TEMPLATE = {
    'idle_timeout': '0'
}

class VswitchControllerPVP(IVswitchController):
    """VSwitch controller for PVP deployment scenario.

    Attributes:
        _vswitch_class: The vSwitch class to be used.
        _vswitch: The vSwitch object controlled by this controller
        _deployment_scenario: A string describing the scenario to set-up in the
            constructor.
    """
    def __init__(self, vswitch_class, traffic):
        """Initializes up the prerequisites for the PVP deployment scenario.

        :vswitch_class: the vSwitch class to be used.
        """
        self._logger = logging.getLogger(__name__)
        self._vswitch_class = vswitch_class
        self._vswitch = vswitch_class()
        self._deployment_scenario = "PVP"
        self._traffic = traffic.copy()
        self._logger.debug('Creation using ' + str(self._vswitch_class))

    def setup(self):
        """ Sets up the switch for pvp
        """
        self._logger.debug('Setup using ' + str(self._vswitch_class))

        try:
            self._vswitch.start()

            bridge = settings.getValue('VSWITCH_BRIDGE_NAME')
            self._vswitch.add_switch(bridge)

            (_, phy1_number) = self._vswitch.add_phy_port(bridge)
            (_, phy2_number) = self._vswitch.add_phy_port(bridge)
            (_, vport1_number) = self._vswitch.add_vport(bridge)
            (_, vport2_number) = self._vswitch.add_vport(bridge)

            self._vswitch.del_flow(bridge)

            # configure flows according to the TC definition
            flow_template = _FLOW_TEMPLATE.copy()
            if self._traffic['flow_type'] == 'IP':
                flow_template.update({'dl_type':'0x0800', 'nw_src':self._traffic['l3']['srcip'],
                                      'nw_dst':self._traffic['l3']['dstip']})

            flow1 = add_ports_to_flow(flow_template, phy1_number,
                                      vport1_number)
            flow2 = add_ports_to_flow(flow_template, vport2_number,
                                      phy2_number)
            self._vswitch.add_flow(bridge, flow1)
            self._vswitch.add_flow(bridge, flow2)

            if self._traffic['bidir'] == 'True':
                flow3 = add_ports_to_flow(flow_template, phy2_number,
                                          vport2_number)
                flow4 = add_ports_to_flow(flow_template, vport1_number,
                                          phy1_number)
                self._vswitch.add_flow(bridge, flow3)
                self._vswitch.add_flow(bridge, flow4)

        except:
            self._vswitch.stop()
            raise

    def stop(self):
        """Tears down the switch created in setup().
        """
        self._logger.debug('Stop using ' + str(self._vswitch_class))
        self._vswitch.stop()

    def __enter__(self):
        self.setup()

    def __exit__(self, type_, value, traceback):
        self.stop()

    def get_vswitch(self):
        """See IVswitchController for description
        """
        return self._vswitch

    def get_ports_info(self):
        """See IVswitchController for description
        """
        self._logger.debug('get_ports_info  using ' + str(self._vswitch_class))
        return self._vswitch.get_ports(settings.getValue('VSWITCH_BRIDGE_NAME'))

    def dump_vswitch_flows(self):
        """See IVswitchController for description
        """
        self._vswitch.dump_flows(settings.getValue('VSWITCH_BRIDGE_NAME'))
"p">: 1 ci_loop: '(daily)|(weekly)' description: >- Set of basic Functional tests to validate the OPNFV scenarios. testcases: - case_name: vping_ssh project_name: functest criteria: 100 blocking: true description: >- This test case verifies: 1) SSH to an instance using floating IPs over the public network. 2) Connectivity between 2 instances over a private network. dependencies: installer: '' scenario: '^((?!odl_l3|odl-bgpvpn|gluon).)*$' run: module: 'functest.opnfv_tests.openstack.vping.vping_ssh' class: 'VPingSSH' - case_name: vping_userdata project_name: functest criteria: 100 blocking: true description: >- This test case verifies: 1) Boot a VM with given userdata. 2) Connectivity between 2 instances over a private network. dependencies: installer: '' scenario: '^((?!lxd).)*$' run: module: 'functest.opnfv_tests.openstack.vping.vping_userdata' class: 'VPingUserdata' - case_name: tempest_smoke_serial project_name: functest criteria: 100 blocking: false description: >- This test case runs the smoke subset of the OpenStack Tempest suite. The list of test cases is generated by Tempest automatically and depends on the parameters of the OpenStack deplopyment. dependencies: installer: '^((?!netvirt).)*$' scenario: '' run: module: 'functest.opnfv_tests.openstack.tempest.tempest' class: 'TempestSmokeSerial' - case_name: rally_sanity project_name: functest criteria: 100 blocking: false description: >- This test case runs a sub group of tests of the OpenStack Rally suite in smoke mode. dependencies: installer: '' scenario: '' run: module: 'functest.opnfv_tests.openstack.rally.rally' class: 'RallySanity' - case_name: refstack_defcore project_name: functest criteria: 100 blocking: false description: >- This test case runs a sub group of tests of the OpenStack Defcore testcases by using refstack client. dependencies: installer: '' scenario: '' run: module: 'functest.opnfv_tests.openstack.refstack_client.refstack_client' class: 'RefstackClient' - case_name: odl project_name: functest criteria: 100 blocking: false description: >- Test Suite for the OpenDaylight SDN Controller. It integrates some test suites from upstream using Robot as the test framework. dependencies: installer: '' scenario: 'odl' run: module: 'functest.opnfv_tests.sdn.odl.odl' class: 'ODLTests' args: suites: - /src/odl_test/csit/suites/integration/basic - /src/odl_test/csit/suites/openstack/neutron - case_name: odl_netvirt project_name: functest criteria: 100 blocking: false description: >- Test Suite for the OpenDaylight SDN Controller when the NetVirt features are installed. It integrates some test suites from upstream using Robot as the test framework. dependencies: installer: 'apex' scenario: 'os-odl_l3-nofeature' run: module: 'functest.opnfv_tests.sdn.odl.odl' class: 'ODLTests' args: suites: - /src/odl_test/csit/suites/integration/basic - /src/odl_test/csit/suites/openstack/neutron - /src/odl_test/csit/suites/openstack/connectivity - case_name: snaps_smoke project_name: functest criteria: 100 blocking: false description: >- This test case contains tests that setup and destroy environments with VMs with and without Floating IPs with a newly created user and project. Set the config value snaps.use_floating_ips (True|False) to toggle this functionality. When the config value of snaps.use_keystone is True, functest must have access to the cloud's private network. dependencies: installer: '^((?!netvirt).)*$' scenario: '^((?!lxd).)*$' run: module: 'functest.opnfv_tests.openstack.snaps.smoke' class: 'SnapsSmoke' - name: features order: 2 ci_loop: '(daily)|(weekly)' description: >- Test suites from feature projects integrated in functest testcases: - case_name: doctor-notification project_name: doctor criteria: 100 blocking: false description: >- Test suite from Doctor project. dependencies: installer: 'apex' scenario: '^((?!fdio).)*$' run: module: 'functest.core.feature' class: 'BashFeature' args: cmd: 'doctor-test' - case_name: bgpvpn project_name: sdnvpn criteria: 100 blocking: false description: >- Test suite from SDNVPN project. dependencies: installer: '(fuel)|(apex)|(netvirt)' scenario: 'bgpvpn' run: module: 'sdnvpn.test.functest.run_sdnvpn_tests' class: 'SdnvpnFunctest' - case_name: functest-odl-sfc project_name: sfc criteria: 100 blocking: false description: >- Test suite for odl-sfc to test two chains with one SF and one chain with two SFs dependencies: installer: '' scenario: 'odl.*sfc' run: module: 'functest.core.feature' class: 'BashFeature' args: cmd: 'run_sfc_tests.py' - case_name: barometercollectd project_name: barometer criteria: 100 blocking: false description: >- Test suite for the Barometer project. Separate tests verify the proper configuration and basic functionality of all the collectd plugins as described in the Project Release Plan dependencies: installer: 'apex' scenario: 'bar' run: module: 'baro_tests.barometer' class: 'BarometerCollectd' - case_name: fds project_name: fastdatastacks criteria: 100 blocking: false description: >- Test Suite for the OpenDaylight SDN Controller when GBP features are installed. It integrates some test suites from upstream using Robot as the test framework. dependencies: installer: 'apex' scenario: 'odl.*-fdio' run: module: 'functest.opnfv_tests.sdn.odl.odl' class: 'ODLTests' args: suites: - /src/fds/testing/robot - name: components order: 3 ci_loop: 'weekly' description: >- Extensive testing of OpenStack API. testcases: - case_name: tempest_full_parallel project_name: functest criteria: 80 blocking: false description: >- The list of test cases is generated by Tempest automatically and depends on the parameters of the OpenStack deplopyment. dependencies: installer: '^((?!netvirt).)*$' scenario: '' run: module: 'functest.opnfv_tests.openstack.tempest.tempest' class: 'TempestFullParallel' - case_name: rally_full project_name: functest criteria: 90 blocking: false description: >- This test case runs the full suite of scenarios of the OpenStack Rally suite using several threads and iterations. dependencies: installer: '^((?!netvirt).)*$' scenario: '' run: module: 'functest.opnfv_tests.openstack.rally.rally' class: 'RallyFull' - name: vnf order: 4 ci_loop: '(daily)|(weekly)' description: >- Collection of VNF test cases. testcases: - case_name: cloudify_ims project_name: functest criteria: 80 blocking: false description: >- This test case deploys an OpenSource vIMS solution from Clearwater using the Cloudify orchestrator. It also runs some signaling traffic. dependencies: installer: '' scenario: 'os-nosdn-nofeature-ha' run: module: 'functest.opnfv_tests.vnf.ims.cloudify_ims' class: 'CloudifyIms' - case_name: vyos_vrouter project_name: functest criteria: 100 blocking: false description: >- This test case is vRouter testing. dependencies: installer: '^((?!compass|fuel).)*$' scenario: 'os-nosdn-nofeature-ha' run: module: 'functest.opnfv_tests.vnf.router.cloudify_vrouter' class: 'CloudifyVrouter' - case_name: orchestra_openims project_name: orchestra criteria: 100 blocking: false description: >- OpenIMS VNF deployment with Open Baton (Orchestra) dependencies: installer: '' scenario: 'os-nosdn-nofeature-ha' run: module: 'functest.opnfv_tests.vnf.ims.orchestra_openims' class: 'OpenImsVnf' - case_name: orchestra_clearwaterims project_name: orchestra criteria: 100 blocking: false description: >- ClearwaterIMS VNF deployment with Open Baton (Orchestra) dependencies: installer: '' scenario: 'os-nosdn-nofeature-ha' run: module: 'functest.opnfv_tests.vnf.ims.orchestra_clearwaterims' class: 'ClearwaterImsVnf' - case_name: juju_epc enabled: true project_name: functest criteria: 100 blocking: false description: >- vEPC validation with Juju as VNF manager and ABoT as test executor. dependencies: installer: '' scenario: 'os-nosdn-nofeature-ha' run: module: 'functest.opnfv_tests.vnf.epc.juju_epc' class: 'JujuEpc'