|
1 | 1 | import pytest |
2 | 2 |
|
3 | | -from ironic_understack.vlan_group_name_convention import vlan_group_name |
| 3 | +from ironic_understack.inspected_port import InspectedPort |
| 4 | +from ironic_understack.vlan_group_name_convention import TopologyError |
| 5 | +from ironic_understack.vlan_group_name_convention import vlan_group_names |
4 | 6 |
|
5 | 7 | mapping = { |
6 | 8 | "1": "network", |
|
14 | 16 | "1d": "bmc", |
15 | 17 | } |
16 | 18 |
|
17 | | -def test_vlan_group_name_valid_switches(): |
18 | | - assert vlan_group_name("a1-1-1", mapping) == "a1-1-network" |
19 | | - assert vlan_group_name("a1-2-1", mapping) == "a1-2-network" |
20 | | - assert vlan_group_name("b12-1", mapping) == "b12-network" |
21 | | - assert vlan_group_name("a2-12-1", mapping) == "a2-12-network" |
22 | | - assert vlan_group_name("a2-12-2", mapping) == "a2-12-network" |
23 | | - assert vlan_group_name("a2-12-1f", mapping) == "a2-12-storage" |
24 | | - assert vlan_group_name("a2-12-2f", mapping) == "a2-12-storage" |
25 | | - assert vlan_group_name("a2-12-3f", mapping) == "a2-12-storage-appliance" |
26 | | - assert vlan_group_name("a2-12-4f", mapping) == "a2-12-storage-appliance" |
27 | | - assert vlan_group_name("a2-12-1d", mapping) == "a2-12-bmc" |
28 | 19 |
|
| 20 | +def port(switch: str): |
| 21 | + return InspectedPort( |
| 22 | + mac_address="", |
| 23 | + name="", |
| 24 | + switch_system_name=switch, |
| 25 | + switch_chassis_id="", |
| 26 | + switch_port_id="", |
| 27 | + ) |
| 28 | + |
| 29 | + |
| 30 | +def test_vlan_group_name_single_cab(): |
| 31 | + assert vlan_group_names( |
| 32 | + [ |
| 33 | + port("a1-1-1.abc1"), |
| 34 | + port("a1-1-2.abc1"), |
| 35 | + port("a1-1-1f.abc1"), |
| 36 | + port("a1-1-2f.abc1"), |
| 37 | + ], |
| 38 | + mapping, |
| 39 | + ) == { |
| 40 | + "a1-1-1.abc1": "a1-1-network", |
| 41 | + "a1-1-2.abc1": "a1-1-network", |
| 42 | + "a1-1-1f.abc1": "a1-1-storage", |
| 43 | + "a1-1-2f.abc1": "a1-1-storage", |
| 44 | + } |
29 | 45 |
|
30 | | -def test_vlan_group_name_with_domain(): |
31 | | - assert vlan_group_name("a2-12-1.iad3.rackspace.net", mapping) == "a2-12-network" |
32 | | - assert vlan_group_name("a2-12-1f.lon3.rackspace.net", mapping) == "a2-12-storage" |
33 | 46 |
|
| 47 | +def test_vlan_group_name_pair_cab(): |
| 48 | + assert vlan_group_names( |
| 49 | + [ |
| 50 | + port("a1-1-1.abc1"), |
| 51 | + port("a1-2-1.abc1"), |
| 52 | + port("a1-1-1f.abc1"), |
| 53 | + port("a1-2-1f.abc1"), |
| 54 | + ], |
| 55 | + mapping, |
| 56 | + ) == { |
| 57 | + "a1-1-1.abc1": "a1-1/a1-2-network", |
| 58 | + "a1-2-1.abc1": "a1-1/a1-2-network", |
| 59 | + "a1-1-1f.abc1": "a1-1/a1-2-storage", |
| 60 | + "a1-2-1f.abc1": "a1-1/a1-2-storage", |
| 61 | + } |
34 | 62 |
|
35 | | -def test_vlan_group_name_case_insensitive(): |
36 | | - assert vlan_group_name("A2-12-1F", mapping) == "a2-12-storage" |
37 | | - assert vlan_group_name("A2-12-1", mapping) == "a2-12-network" |
| 63 | + |
| 64 | +def test_vlan_group_name_with_domain(): |
| 65 | + assert vlan_group_names( |
| 66 | + [ |
| 67 | + port("a1-1-1.abc1.domain"), |
| 68 | + port("a1-1-2.abc1.domain"), |
| 69 | + port("a1-1-1f.abc1.domain"), |
| 70 | + port("a1-1-2f.abc1.domain"), |
| 71 | + ], |
| 72 | + mapping, |
| 73 | + ) == { |
| 74 | + "a1-1-1.abc1.domain": "a1-1-network", |
| 75 | + "a1-1-2.abc1.domain": "a1-1-network", |
| 76 | + "a1-1-1f.abc1.domain": "a1-1-storage", |
| 77 | + "a1-1-2f.abc1.domain": "a1-1-storage", |
| 78 | + } |
38 | 79 |
|
39 | 80 |
|
40 | 81 | def test_vlan_group_name_invalid_format(): |
41 | 82 | with pytest.raises(ValueError, match="Unknown switch name format"): |
42 | | - vlan_group_name("invalid", mapping) |
| 83 | + vlan_group_names([port("invalid.abc1")], mapping) |
43 | 84 |
|
44 | 85 | with pytest.raises(ValueError, match="Unknown switch name format"): |
45 | | - vlan_group_name("", mapping) |
| 86 | + vlan_group_names([port(".abc1")], mapping) |
46 | 87 |
|
47 | 88 |
|
48 | 89 | def test_vlan_group_name_unknown_suffix(): |
49 | | - with pytest.raises(ValueError, match="Switch suffix 99 is not present"): |
50 | | - vlan_group_name("a2-12-99", mapping) |
| 90 | + with pytest.raises(TopologyError, match="Switch suffix 99 is not present"): |
| 91 | + vlan_group_names([port("a1-1-99.abc1")], mapping) |
| 92 | + |
| 93 | + with pytest.raises(TopologyError, match="Switch suffix 5f is not present"): |
| 94 | + vlan_group_names([port("a1-1-5f.abc1")], mapping) |
| 95 | + |
| 96 | + with pytest.raises(TopologyError, match="Switch suffix xyz is not present"): |
| 97 | + vlan_group_names([port("a1-1-xyz.abc1")], mapping) |
| 98 | + |
| 99 | + |
| 100 | +def test_vlan_group_name_many_dc(): |
| 101 | + with pytest.raises(TopologyError, match="multiple"): |
| 102 | + vlan_group_names( |
| 103 | + [ |
| 104 | + port("a1-1-1.abc1.domain"), |
| 105 | + port("a1-1-1.xyz2.domain"), |
| 106 | + ], |
| 107 | + mapping, |
| 108 | + ) |
51 | 109 |
|
52 | | - with pytest.raises(ValueError, match="Switch suffix 5f is not present"): |
53 | | - vlan_group_name("a2-12-5f", mapping) |
54 | 110 |
|
55 | | - with pytest.raises(ValueError, match="Switch suffix xyz is not present"): |
56 | | - vlan_group_name("a2-12-xyz", mapping) |
| 111 | +def test_vlan_group_name_too_many_racks(): |
| 112 | + with pytest.raises(TopologyError, match="more than two racks"): |
| 113 | + vlan_group_names( |
| 114 | + [ |
| 115 | + port("a1-1-1.abc1.domain"), |
| 116 | + port("a1-2-1.abc1.domain"), |
| 117 | + port("a1-3-1.abc1.domain"), |
| 118 | + ], |
| 119 | + mapping, |
| 120 | + ) |
0 commit comments