Skip to content

Commit 5e444ca

Browse files
committed
T6948: Smoketest for DHCP lease sync
1 parent 46cc2ef commit 5e444ca

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

smoketest/scripts/cli/test_service_dhcp-server.py

+87
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@
2020
from json import loads
2121

2222
from base_vyostest_shim import VyOSUnitTestSHIM
23+
from time import sleep
2324

25+
from vyos.hostsd_client import Client as hostsd_client
2426
from vyos.configsession import ConfigSessionError
27+
from vyos.kea import kea_add_lease
28+
from vyos.kea import kea_delete_lease
29+
from vyos.utils.process import run
2530
from vyos.utils.process import process_named_running
2631
from vyos.utils.file import read_file
2732
from vyos.template import inc_ip
@@ -842,6 +847,88 @@ def test_dhcp_on_interface_with_vrf(self):
842847
self.cli_delete(['vrf', 'name', 'SMOKE-DHCP'])
843848
self.cli_commit()
844849

850+
def test_dhcp_hostsd_lease_sync(self):
851+
hc = hostsd_client()
852+
shared_net_name = 'SMOKE-LEASE-SYNC'
853+
domain_name = 'sync.private'
854+
855+
client_range = range(1, 4)
856+
subnet_range_start = inc_ip(subnet, 10)
857+
subnet_range_stop = inc_ip(subnet, 20)
858+
859+
def local_cleanup():
860+
print('Cleaning up started')
861+
for seq in client_range:
862+
ip_addr = inc_ip(subnet, seq)
863+
kea_delete_lease(4, ip_addr)
864+
# zmq.Socket(zmq.REQ) throws unclosed socket warning
865+
# hc.delete_hosts([f'dhcp-server-{ip_addr}'])
866+
# hc.apply()
867+
run(f'/usr/bin/vyos-hostsd-client --delete-hosts --tag dhcp-server-{ip_addr} --apply')
868+
print('Cleaning up ended')
869+
870+
self.addCleanup(local_cleanup)
871+
872+
pool = base_path + ['shared-network-name', shared_net_name, 'subnet', subnet]
873+
self.cli_set(pool + ['subnet-id', '1'])
874+
self.cli_set(pool + ['option', 'domain-name', domain_name])
875+
self.cli_set(pool + ['range', '0', 'start', subnet_range_start])
876+
self.cli_set(pool + ['range', '0', 'stop', subnet_range_stop])
877+
878+
# commit changes
879+
self.cli_commit()
880+
881+
config = read_file(KEA4_CONF)
882+
obj = loads(config)
883+
884+
self.verify_config_value(obj, ['Dhcp4', 'shared-networks'], 'name', shared_net_name)
885+
self.verify_config_value(obj, ['Dhcp4', 'shared-networks', 0, 'subnet4'], 'subnet', subnet)
886+
self.verify_config_value(obj, ['Dhcp4', 'shared-networks', 0, 'subnet4'], 'id', 1)
887+
888+
# Verify options
889+
self.verify_config_object(
890+
obj,
891+
['Dhcp4', 'shared-networks', 0, 'subnet4', 0, 'option-data'],
892+
{'name': 'domain-name', 'data': domain_name})
893+
self.verify_config_object(
894+
obj,
895+
['Dhcp4', 'shared-networks', 0, 'subnet4', 0, 'pools'],
896+
{'pool': f'{subnet_range_start} - {subnet_range_stop}'})
897+
898+
# Check for running process
899+
self.assertTrue(process_named_running(PROCESS_NAME))
900+
901+
# All up and running, now test vyos-hostsd-client
902+
903+
# 1. Inject leases into kea
904+
for seq in client_range:
905+
client = f'client{seq}'
906+
mac = f'00:50:00:00:00:{seq:02}'
907+
ip = inc_ip(subnet, seq)
908+
kea_add_lease(4, ip, host_name=client, mac_address=mac)
909+
910+
# 2. Verify that leases do not exist in hostsd state
911+
for seq in client_range:
912+
tag = f'dhcp-server-{inc_ip(subnet, seq)}'
913+
print(f'Verifying tag: {tag}')
914+
host_json = hc.get_hosts(tag)
915+
self.assertFalse(host_json)
916+
917+
# 3. Restart the service to trigger vyos-hostsd-dhcp4-lease-sync.service
918+
print('Restarting service in 30s')
919+
sleep(30)
920+
self.op_mode(['restart', 'dhcp', 'server'])
921+
922+
# 4. Wait a while and verify that leases are now in hostsd state
923+
print('Waiting to verify in 30s')
924+
sleep(30)
925+
926+
for seq in client_range:
927+
tag = f'dhcp-server-{inc_ip(subnet, seq)}'
928+
host_json = hc.get_hosts(tag)
929+
self.assertTrue(host_json)
930+
931+
print('All done')
845932

846933
if __name__ == '__main__':
847934
unittest.main(verbosity=2)

0 commit comments

Comments
 (0)