test_networking.py (2452B)
1 from unittest import mock 2 import pytest 3 4 from aetherscale import networking 5 6 7 def test_mac_address_is_random(): 8 mac_a = networking.create_mac_address() 9 mac_b = networking.create_mac_address() 10 11 assert mac_a != mac_b 12 13 14 def test_device_name_validation(): 15 # must not raise exception 16 networking.Iproute2Network.validate_device_name('valid-dev') 17 networking.Iproute2Network.validate_device_name('qemu-tap-10') 18 networking.Iproute2Network.validate_device_name('fifteen-chars15') 19 20 with pytest.raises(networking.NetworkingException): 21 networking.Iproute2Network.validate_device_name('too-long-device-name') 22 23 with pytest.raises(networking.NetworkingException): 24 networking.Iproute2Network.validate_device_name('invalid space') 25 26 with pytest.raises(networking.NetworkingException): 27 networking.Iproute2Network.validate_device_name('non-ascii-日本') 28 29 30 def test_ip_address_validation(): 31 # must not raise exception 32 networking.Iproute2Network.validate_ip_address('10.0.0.1') 33 networking.Iproute2Network.validate_ip_address('2001:0db8::3b:0:1') 34 networking.Iproute2Network.validate_ip_address('10.0.0.1/32') 35 networking.Iproute2Network.validate_ip_address('2001:0db8::/64') 36 37 with pytest.raises(networking.NetworkingException): 38 networking.Iproute2Network.validate_ip_address('something-invalid') 39 40 41 def test_iproute2_networking_scripts(): 42 iproute = networking.Iproute2Network() 43 iproute.bridged_network('unittestbr0', 'eth0', '10.0.0.2/24', '10.0.0.1') 44 iproute.tap_device('tap0', 'myuser', 'unittestbr0') 45 setup_script = iproute.setup_script() 46 teardown_script = iproute.teardown_script() 47 48 assert 'link add unittestbr0 type bridge' in setup_script 49 assert 'set eth0 master unittestbr0' in setup_script 50 assert 'addr add 10.0.0.2/24 dev unittestbr0' in setup_script 51 assert 'tuntap add dev tap0' in setup_script 52 53 assert 'link del unittestbr0' in teardown_script 54 assert 'link del tap0' in teardown_script 55 assert 'addr add 10.0.0.2/24 dev eth0' in teardown_script 56 57 58 @mock.patch('aetherscale.execution.run_command_chain') 59 def test_iproute2_networking_direct_execution(command_chain): 60 iproute = networking.Iproute2Network() 61 iproute.bridged_network('unittestbr0', 'eth0') 62 63 iproute.setup() 64 65 bridge_command = ['sudo', 'ip', 'link', 'add', 'unittestbr0', 'type', 'bridge'] 66 assert bridge_command in command_chain.call_args[0][0]