diff options
author | Patrick Vacek <patrickvacek@gmail.com> | 2017-11-16 16:57:57 +0100 |
---|---|---|
committer | Patrick Vacek <patrickvacek@gmail.com> | 2017-11-16 17:40:48 +0100 |
commit | c687237422dc7f22b85d9718d112fe0b674007c3 (patch) | |
tree | 43f6833ef354bb3579043f4229023a7e8653aef3 /lib | |
parent | 7a3258934b2c53f7c29c212c695805da1893ba3f (diff) | |
download | meta-updater-c687237422dc7f22b85d9718d112fe0b674007c3.tar.gz |
Make launching qemu part of setUpClass.
And terminating part of tearDownClass. This cleans things up nicely and
means we only have to boot once for multiple tests.
If we do want to boot multiple times (e.g. with different configs), we
can move most of the qemu code to non-class functions and use multiple
classes that each call those functions in setUpClass and tearDownClass.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/oeqa/selftest/updater.py | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/lib/oeqa/selftest/updater.py b/lib/oeqa/selftest/updater.py index 8ee3c69..ad99964 100644 --- a/lib/oeqa/selftest/updater.py +++ b/lib/oeqa/selftest/updater.py | |||
@@ -121,56 +121,59 @@ class QemuTests(oeSelfTest): | |||
121 | logger = logging.getLogger("selftest") | 121 | logger = logging.getLogger("selftest") |
122 | logger.info('Running bitbake to build core-image-minimal') | 122 | logger.info('Running bitbake to build core-image-minimal') |
123 | bitbake('core-image-minimal') | 123 | bitbake('core-image-minimal') |
124 | # Create empty object. | ||
125 | args = type('', (), {})() | ||
126 | args.imagename = 'core-image-minimal' | ||
127 | args.mac = None | ||
128 | # Could use DEPLOY_DIR_IMAGE here but it's already in the machine | ||
129 | # subdirectory. | ||
130 | args.dir = 'tmp/deploy/images' | ||
131 | args.efi = False | ||
132 | args.machine = None | ||
133 | args.kvm = None # Autodetect | ||
134 | args.no_gui = True | ||
135 | args.gdb = False | ||
136 | args.pcap = None | ||
137 | args.overlay = None | ||
138 | args.dry_run = False | ||
139 | |||
140 | cls.qemu = QemuCommand(args) | ||
141 | cmdline = cls.qemu.command_line() | ||
142 | print('Booting image with run-qemu-ota...') | ||
143 | cls.s = subprocess.Popen(cmdline) | ||
144 | time.sleep(10) | ||
145 | |||
146 | @classmethod | ||
147 | def tearDownClass(cls): | ||
148 | try: | ||
149 | cls.s.terminate() | ||
150 | except KeyboardInterrupt: | ||
151 | pass | ||
152 | |||
153 | def run_test_qemu(self, command): | ||
154 | command = ['ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost -p ' + | ||
155 | str(self.qemu.ssh_port) + ' "' + command + '"'] | ||
156 | s2 = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||
157 | value, err = s2.communicate() | ||
158 | return value, err | ||
124 | 159 | ||
125 | def test_hostname(self): | 160 | def test_hostname(self): |
126 | value, err = run_test_qemu('hostname', False, 'Checking machine name (hostname) of device:') | 161 | print('') |
162 | print('Checking machine name (hostname) of device:') | ||
163 | value, err = self.run_test_qemu('hostname') | ||
127 | machine = get_bb_var('MACHINE', 'core-image-minimal') | 164 | machine = get_bb_var('MACHINE', 'core-image-minimal') |
128 | self.assertEqual(err, b'', 'Error: ' + err.decode()) | 165 | self.assertEqual(err, b'', 'Error: ' + err.decode()) |
129 | # Strip off line ending. | 166 | # Strip off line ending. |
130 | value_str = value.decode()[:-1] | 167 | value_str = value.decode()[:-1] |
131 | self.assertEqual(value_str, machine, 'MACHINE does not match hostname: ' + machine + ', ' + value_str) | 168 | self.assertEqual(value_str, machine, |
132 | print('hostname: ' + value_str) | 169 | 'MACHINE does not match hostname: ' + machine + ', ' + value_str) |
170 | print(value_str) | ||
133 | 171 | ||
134 | def test_var_sota(self): | 172 | def test_var_sota(self): |
135 | value, err = run_test_qemu('ls /var/sota', True, 'Checking contents of /var/sota:') | 173 | print('') |
174 | print('Checking contents of /var/sota:') | ||
175 | value, err = self.run_test_qemu('ls /var/sota') | ||
136 | self.assertEqual(err, b'', 'Error: ' + err.decode()) | 176 | self.assertEqual(err, b'', 'Error: ' + err.decode()) |
137 | print(value.decode()) | 177 | print(value.decode()) |
138 | 178 | ||
139 | 179 | ||
140 | def run_test_qemu(command, use_shell, message): | ||
141 | print('') | ||
142 | # Create empty object. | ||
143 | args = type('', (), {})() | ||
144 | args.imagename = 'core-image-minimal' | ||
145 | args.mac = None | ||
146 | # Could use DEPLOY_DIR_IMAGE here but it's already in the machine | ||
147 | # subdirectory. | ||
148 | args.dir = 'tmp/deploy/images' | ||
149 | args.efi = False | ||
150 | args.machine = None | ||
151 | args.kvm = None # Autodetect | ||
152 | args.no_gui = True | ||
153 | args.gdb = False | ||
154 | args.pcap = None | ||
155 | args.overlay = None | ||
156 | args.dry_run = False | ||
157 | |||
158 | qemu_command = QemuCommand(args) | ||
159 | cmdline = qemu_command.command_line() | ||
160 | print('Booting image with run-qemu-ota...') | ||
161 | s = subprocess.Popen(cmdline) | ||
162 | time.sleep(10) | ||
163 | print(message) | ||
164 | if not use_shell: | ||
165 | command = ['ssh', '-q', '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', 'root@localhost', '-p', str(qemu_command.ssh_port), '"' + command + '"'] | ||
166 | else: | ||
167 | command = 'ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost -p ' + str(qemu_command.ssh_port) + ' "' + command + '"' | ||
168 | s2 = subprocess.Popen(command, shell=use_shell, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | ||
169 | value, err = s2.communicate() | ||
170 | time.sleep(5) | ||
171 | try: | ||
172 | s.terminate() | ||
173 | except KeyboardInterrupt: | ||
174 | pass | ||
175 | return value, err | ||
176 | |||