]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add test cases for 'networkctl dhcp-lease' command 42203/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 20 May 2026 15:28:38 +0000 (00:28 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 20 May 2026 22:51:16 +0000 (07:51 +0900)
Addresses the request:
https://github.com/systemd/systemd/pull/42137#pullrequestreview-4305664376

test/test-network/systemd-networkd-tests.py

index 877075ec5cd392cb5af0ddf7e4ba98c99dbba8f3..8609a63916a39d6fc5062e12e4164905cde1a366 100755 (executable)
@@ -1174,6 +1174,10 @@ def networkctl_reload():
     networkctl('reload')
 
 
+def networkctl_dhcp_lease(*args):
+    return networkctl('dhcp-lease', *args)
+
+
 def resolvectl(*args):
     return check_output(*(resolvectl_cmd + list(args)), env=env)
 
@@ -8768,6 +8772,43 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
         self.assertIn('client provides name: test-hostname', output)
         self.assertIn('26:mtu', output)
 
+        print('### networkctl dhcp-lease')
+        output = networkctl_dhcp_lease('veth99')
+        print(output)
+        # header
+        self.assertIn('Hardware Type: ETHER', output)
+        self.assertIn('Hardware Address: 12:34:56:78:9a:bc', output)
+        self.assertIn(f'Client Address: {address1}', output)
+        self.assertIn('Server Address: 192.168.5.1', output)
+        # options
+        self.assertRegex(output, r'1 subnet mask *255\.255\.255\.0')
+        self.assertRegex(output, r'3 router *192\.168\.5\.1')
+        self.assertRegex(output, r'6 domain name server *192\.168\.5\.6\n *192\.168\.5\.7')
+        self.assertRegex(output, r'26 MTU size *1492')
+        self.assertRegex(output, r'28 broadcast address *192\.168\.5\.255')
+        self.assertRegex(output, r'51 lease time *2min')
+        self.assertRegex(output, r'53 message type *5')
+        self.assertRegex(output, r'54 server identifier *192\.168\.5\.1')
+        self.assertRegex(output, r'119 domain search *example\.com')
+        self.assertRegex(output, r'120 SIP server *192\.168\.5\.21\n *192\.168\.5\.22')
+        # extra arguments
+        output = networkctl_dhcp_lease('veth99', '1')
+        print(output)
+        self.assertRegex(output, r'1 subnet mask *255\.255\.255\.0')
+        output = networkctl_dhcp_lease('veth99', '1:auto')
+        print(output)
+        self.assertRegex(output, r'1 subnet mask *255\.255\.255\.0')
+        output = networkctl_dhcp_lease('veth99', '1:hex')
+        print(output)
+        self.assertRegex(output, 'CODE *NAME *DATA')
+        self.assertRegex(output, r'1 subnet mask *ff:ff:ff:00')
+        output = networkctl_dhcp_lease('veth99', '1:hex', '--no-legend')
+        print(output)
+        self.assertNotIn('CODE', output)
+        self.assertNotIn('NAME', output)
+        self.assertNotIn('DATA', output)
+        self.assertRegex(output, r'1 subnet mask *ff:ff:ff:00')
+
         # change address range, DNS servers, and Domains
         stop_dnsmasq()
         start_dnsmasq(
@@ -8877,6 +8918,26 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
         self.assertIn('client provides name: test-hostname', output)
         self.assertIn('26:mtu', output)
 
+        print('### networkctl dhcp-lease')
+        output = networkctl_dhcp_lease('veth99')
+        print(output)
+        # header
+        self.assertIn('Hardware Type: ETHER', output)
+        self.assertIn('Hardware Address: 12:34:56:78:9a:bc', output)
+        self.assertIn(f'Client Address: {address2}', output)
+        self.assertIn('Server Address: 192.168.5.1', output)
+        # options
+        self.assertRegex(output, r'1 subnet mask *255\.255\.255\.0')
+        self.assertRegex(output, r'3 router *192\.168\.5\.1')
+        self.assertRegex(output, r'6 domain name server *192\.168\.5\.1\n *192\.168\.5\.7\n *192\.168\.5\.8')
+        self.assertRegex(output, r'26 MTU size *1492')
+        self.assertRegex(output, r'28 broadcast address *192\.168\.5\.255')
+        self.assertRegex(output, r'51 lease time *2min')
+        self.assertRegex(output, r'53 message type *5')
+        self.assertRegex(output, r'54 server identifier *192\.168\.5\.1')
+        self.assertRegex(output, r'119 domain search *foo\.example\.com')
+        self.assertRegex(output, r'120 SIP server *192\.168\.5\.23\n *192\.168\.5\.24')
+
         self.check_netlabel('veth99', r'192\.168\.5\.0/24')
 
         self.check_nftset('addr4', r'192\.168\.5\.1')