コード例 #1
0
    def test_basic_config(self):
        """Tests the minimal config"""

        port_number = 1
        port_key = 1

        input_config = {}
        output_config = {'description': str(port_key), 'number': port_number}

        expected_config = self.default_config
        expected_config.update(input_config)
        expected_config.update(output_config)

        port = Port(port_key, 1, input_config)
        output_config = port.to_conf()

        self.assertEqual(output_config, expected_config)

        key_exceptions = ['name', '_id', 'dp_id', 'dyn_phys_up']
        dict_keys = set(port.__dict__.keys())
        conf_keys = set(port.to_conf().keys())

        for exception in key_exceptions:
            dict_keys.remove(exception)

        self.assertEqual(dict_keys, conf_keys)
コード例 #2
0
    def test_config_with_vlans(self):
        """Tests the config with tagged and native vlans"""

        vlan100 = MockVLAN('v100')
        vlan200 = MockVLAN('v200')
        vlan300 = MockVLAN('v300')

        tagged_vlans = [vlan200, vlan300]
        native_vlan = vlan100

        port_number = 1
        port_key = 'port_1'

        input_config = {'number': port_number}
        output_config = {
            'description': str(port_key),
            'number': port_number,
            'native_vlan': vlan100.name,
            'tagged_vlans': [vlan200.name, vlan300.name]
        }

        expected_config = self.default_config
        expected_config.update(input_config)
        expected_config.update(output_config)

        port = Port(port_key, 1, input_config)
        port.native_vlan = native_vlan
        port.tagged_vlans = tagged_vlans

        output_config = port.to_conf()

        self.assertEqual(output_config, expected_config)
コード例 #3
0
    def _dp_parse_port(dp_id, p_identifier, port_conf, vlans):
        port = Port(p_identifier, dp_id, port_conf)

        if port.native_vlan is not None:
            v_identifier = port.native_vlan
            vlan = _get_vlan_by_identifier(dp_id, v_identifier, vlans)
            port.native_vlan = vlan
            vlan.add_untagged(port)
        port_tagged_vlans = [
            _get_vlan_by_identifier(dp_id, v_identifier, vlans) for v_identifier in port.tagged_vlans]
        port.tagged_vlans = port_tagged_vlans
        for vlan in port.tagged_vlans:
            vlan.add_tagged(port)
        return port
コード例 #4
0
    def test_config_with_port_number(self):
        """Tests the minimal config"""

        port_number = 1
        port_key = 'port_1'

        input_config = {'number': port_number}
        output_config = {'description': str(port_key), 'number': port_number}

        expected_config = self.default_config
        expected_config.update(input_config)
        expected_config.update(output_config)

        port = Port(port_key, 1, input_config)
        output_config = port.to_conf()

        self.assertEqual(output_config, expected_config)
コード例 #5
0
 def test_lacp_update(self):
     """Test updating port LACP information causes correct actor state changes"""
     port = Port(1, 1, {})
     # Initial state: Not configured
     self.assertEqual(port.dyn_lacp_port_selected, LACP_STATE_NONE)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_STATE_NONE)
     # Initializing
     port.lacp_update(True, None, None)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_INIT)
     # Receiving first packets but no sync
     port.lacp_update(False, 1, 1)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NOACT)
     # Receiving sync packets
     port.lacp_update(True, 1, 1)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_UP)
コード例 #6
0
    def test_vlans(self):
        """Test that the vlans() method behaves correctly"""

        vlan100 = MockVLAN('v100')
        vlan200 = MockVLAN('v200')
        vlan300 = MockVLAN('v300')

        tagged_vlans = [vlan200, vlan300]
        native_vlan = vlan100

        port = Port(1, 1, {})
        port.native_vlan = native_vlan
        self.assertEqual(port.vlans(), [native_vlan])
        port.tagged_vlans = tagged_vlans
        self.assertEqual(set(port.vlans()), set([native_vlan] + tagged_vlans))
        port.native_vlan = None
        self.assertEqual(set(port.vlans()), set(tagged_vlans))
コード例 #7
0
def port_parser(dp_id, p_identifier, port_conf, vlans):
    port = Port(p_identifier, port_conf)

    if port.mirror is not None:
        # ignore other config
        return port
    if port.native_vlan is not None:
        v_identifier = port.native_vlan
        vlan = _get_vlan_by_identifier(dp_id, v_identifier, vlans)
        vlan.untagged.append(port)
    for v_identifier in port.tagged_vlans:
        vlan = _get_vlan_by_identifier(dp_id, v_identifier, vlans)
        vlan.tagged.append(port)

    return port
コード例 #8
0
ファイル: test_port.py プロジェクト: anarkiwi/faucet
    def test_vlans(self):
        """Test that the vlans() method behaves correctly"""

        vlan100 = MockVLAN('v100')
        vlan200 = MockVLAN('v200')
        vlan300 = MockVLAN('v300')

        tagged_vlans = [vlan200, vlan300]
        native_vlan = vlan100

        port = Port(1, 1, {})
        port.native_vlan = native_vlan
        self.assertIn(native_vlan, port.vlans())
        port.tagged_vlans = tagged_vlans
        self.assertEqual(set(port.vlans()), set([native_vlan] + tagged_vlans))
        port.native_vlan = None
        self.assertEqual(set(port.vlans()), set(tagged_vlans))
コード例 #9
0
ファイル: config_parser.py プロジェクト: mwutzke/faucet
def _dp_parse_port(dp_id, port_key, port_conf, vlans):

    def _dp_parse_native_port_vlan():
        if port.native_vlan is not None:
            vlan = _get_vlan_by_key(dp_id, port.native_vlan, vlans)
            port.native_vlan = vlan

    def _dp_parse_tagged_port_vlans():
        if port.tagged_vlans:
            port_tagged_vlans = [
                _get_vlan_by_key(dp_id, vlan_key, vlans) for vlan_key in port.tagged_vlans]
            port.tagged_vlans = port_tagged_vlans

    port = Port(port_key, dp_id, port_conf)
    test_config_condition(str(port_key) not in (str(port.number), port.name), (
        'Port key %s match port name or port number' % port_key))
    _dp_parse_native_port_vlan()
    _dp_parse_tagged_port_vlans()
    return port
コード例 #10
0
 def test_lacp_port_update(self):
     """Test LACP port options"""
     port = Port(1, 1, {})
     port.enabled = True
     port.dyn_phys_up = True
     # Port defaults to NOTCONFIGURED
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_NOTCONFIGURED)
     # Now call update to configure port and get initial state
     #   depending on the chosen DP
     port.lacp_port_update(False)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_UNSELECTED)
     # Now select our the port's current DP
     port.lacp_port_update(True)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_SELECTED)
     # Test option to force standby mode
     # Option forces the statemachine to revert to STANDBY mode when not selected
     port.lacp_standby = True
     port.lacp_port_update(True)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_SELECTED)
     port.lacp_port_update(False)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_STANDBY)
     # Test forcing selected port
     port.lacp_standby = False
     port.lacp_selected = True
     port.lacp_port_update(False)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_SELECTED)
     # Test forcing unselected port
     port.lacp_selected = False
     port.lacp_unselected = True
     port.lacp_port_update(True)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_UNSELECTED)
     # Test reverting to unconfigured on port cold start
     port.lacp_unselected = False
     port.lacp_port_update(False, True)
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_NOTCONFIGURED)
コード例 #11
0
 def test_lacp_flags(self):
     """Test port LACP flags returns correct flags for current port states"""
     port = Port(1, 1, {})
     # LACP config option to force flags on
     port.lacp_collect_and_distribute = True
     self.assertEqual(port.get_lacp_flags(), (1, 1, 1))
     port.lacp_collect_and_distribute = False
     # Port is selected, so flags should be on
     port.dyn_lacp_port_selected = LACP_PORT_SELECTED
     self.assertEqual(port.get_lacp_flags(), (1, 1, 1))
     # Port in standby, only allow sync
     port.dyn_lacp_port_selected = LACP_PORT_STANDBY
     self.assertEqual(port.get_lacp_flags(), (1, 0, 0))
     # Port not in standby, or selected
     port.dyn_lacp_port_selected = LACP_PORT_UNSELECTED
     self.assertEqual(port.get_lacp_flags(), (0, 0, 0))
     port.dyn_lacp_port_selected = LACP_PORT_NOTCONFIGURED
     self.assertEqual(port.get_lacp_flags(), (0, 0, 0))
コード例 #12
0
 def test_lacp_actor_update(self):
     """Test updating port LACP information causes correct actor state changes"""
     port = Port(1, 1, {})
     port.enabled = True
     port.dyn_phys_up = True
     # Before configuring the LACP state machine, default is notconfigured
     self.assertEqual(port.dyn_lacp_port_selected, LACP_PORT_NOTCONFIGURED)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NOTCONFIGURED)
     # Move to initial configuration state when no packets have been received yet
     port.lacp_actor_update(False, None, None)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_INIT)
     # Receiving first packets but no SYNC bit set
     port.lacp_actor_update(False, 1, 1)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NOSYNC)
     # Receiving sync packets
     port.lacp_actor_update(True, 1, 1)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_UP)
     # Port phys down, move to ACTOR_NONE state
     port.dyn_phys_up = False
     port.lacp_actor_update(True, 1, 1)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NONE)
     port.lacp_actor_update(False, None, None)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NONE)
     # Go back to init once port restarted
     port.dyn_phys_up = True
     port.lacp_actor_update(False, None, None)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_INIT)
     # Cold starting will force the port to revert to notconfigured state
     port.lacp_actor_update(False, None, None, True)
     self.assertEqual(port.dyn_lacp_actor_state, LACP_ACTOR_NOTCONFIGURED)