summaryrefslogtreecommitdiffstats
path: root/test-ipxe.py
diff options
context:
space:
mode:
Diffstat (limited to 'test-ipxe.py')
-rw-r--r--test-ipxe.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/test-ipxe.py b/test-ipxe.py
new file mode 100644
index 0000000..1b3b9f1
--- /dev/null
+++ b/test-ipxe.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python3
+import os
+import sys
+import time
+import libvirt
+import unittest
+
+class test_ipxe(unittest.TestCase):
+
+ def setUp(self):
+ self.arch = os.uname()[4]
+ self.conn = libvirt.open(None)
+ self.network = {}
+ self.domain = {}
+
+ def tearDown(self):
+ for (mode, domain) in self.domain.items():
+ domain.destroy()
+ for (mode, network) in self.network.items():
+ network.destroy()
+ self.conn.close()
+
+ def do_wait(self, stream, substr, timeout, verbose = False):
+ start = time.time()
+ log = b''
+ while time.time() - start < timeout:
+ data = stream.recv(128)
+ if type(data) is int and data == -2:
+ continue
+ if verbose:
+ print(data)
+ log += data
+ if substr in log:
+ secs = time.time() - start
+ print(f'{substr.decode()} ({secs:.1f}s) ... ', end = '', flush = True)
+ return
+ time.sleep(0.01)
+ self.fail(f'not found: {substr}')
+
+ def do_ipxe(self, mode):
+ name = f'test-ipxe-{mode}-{self.arch}'
+
+ network = self.conn.networkLookupByName(name)
+ if not network.isActive():
+ network.create()
+ self.network[mode] = network
+
+ domain = self.conn.lookupByName(name)
+ domain.create()
+ self.domain[mode] = domain
+
+ stream = self.conn.newStream()
+ domain.openConsole(None, stream, 0)
+
+ self.do_wait(stream, b'Start PXE', 20)
+ self.do_wait(stream, b'iPXE', 40)
+ self.do_wait(stream, b'hello world', 90)
+
+ def test_ipv4(self):
+ self.do_ipxe('ipv4')
+
+ def test_ipv6(self):
+ self.do_ipxe('ipv6')
+
+if __name__ == '__main__':
+ unittest.main()