blob: a569fbf74775f6fe97bda86da99dcbfc36cb42b5 [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001#!/usr/bin/env python
2# ex:ts=4:sw=4:sts=4:et
3# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4#
5# Copyright (c) 2015, Intel Corporation.
6# All rights reserved.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License version 2 as
10# published by the Free Software Foundation.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with this program; if not, write to the Free Software Foundation, Inc.,
19# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# AUTHORS
22# Ed Bartosh <ed.bartosh@linux.intel.com>
23
24"""Test cases for wic."""
25
26import os
Patrick Williamsc124f4f2015-09-15 14:41:29 -050027
28from glob import glob
29from shutil import rmtree
30
31from oeqa.selftest.base import oeSelfTest
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050032from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu
Patrick Williamsf1e5d692016-03-30 15:21:19 -050033from oeqa.utils.decorators import testcase
34
Patrick Williamsc124f4f2015-09-15 14:41:29 -050035
36class Wic(oeSelfTest):
37 """Wic test class."""
38
39 resultdir = "/var/tmp/wic/build/"
Patrick Williamsf1e5d692016-03-30 15:21:19 -050040 image_is_ready = False
Patrick Williamsc124f4f2015-09-15 14:41:29 -050041
Patrick Williamsf1e5d692016-03-30 15:21:19 -050042 def setUpLocal(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050043 """This code is executed before each test method."""
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050044 self.write_config('IMAGE_FSTYPES += " hddimg"\n'
45 'MACHINE_FEATURES_append = " efi"\n')
Patrick Williamsf1e5d692016-03-30 15:21:19 -050046
47 # Do this here instead of in setUpClass as the base setUp does some
48 # clean up which can result in the native tools built earlier in
49 # setUpClass being unavailable.
Patrick Williamsc124f4f2015-09-15 14:41:29 -050050 if not Wic.image_is_ready:
Patrick Williamsf1e5d692016-03-30 15:21:19 -050051 bitbake('syslinux syslinux-native parted-native gptfdisk-native '
52 'dosfstools-native mtools-native')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050053 bitbake('core-image-minimal')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050054 Wic.image_is_ready = True
55
56 rmtree(self.resultdir, ignore_errors=True)
57
Patrick Williamsf1e5d692016-03-30 15:21:19 -050058 @testcase(1208)
59 def test_help(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050060 """Test wic --help"""
61 self.assertEqual(0, runCmd('wic --help').status)
62
Patrick Williamsf1e5d692016-03-30 15:21:19 -050063 @testcase(1209)
64 def test_createhelp(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050065 """Test wic create --help"""
66 self.assertEqual(0, runCmd('wic create --help').status)
67
Patrick Williamsf1e5d692016-03-30 15:21:19 -050068 @testcase(1210)
69 def test_listhelp(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050070 """Test wic list --help"""
71 self.assertEqual(0, runCmd('wic list --help').status)
72
Patrick Williamsf1e5d692016-03-30 15:21:19 -050073 @testcase(1211)
74 def test_build_image_name(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050075 """Test wic create directdisk --image-name core-image-minimal"""
76 self.assertEqual(0, runCmd("wic create directdisk "
77 "--image-name core-image-minimal").status)
78 self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct")))
79
Patrick Williamsf1e5d692016-03-30 15:21:19 -050080 @testcase(1212)
81 def test_build_artifacts(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050082 """Test wic create directdisk providing all artifacts."""
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050083 bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050084 for var in ('STAGING_DATADIR', 'DEPLOY_DIR_IMAGE',
85 'STAGING_DIR_NATIVE', 'IMAGE_ROOTFS'))
86 status = runCmd("wic create directdisk "
87 "-b %(staging_datadir)s "
88 "-k %(deploy_dir_image)s "
89 "-n %(staging_dir_native)s "
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050090 "-r %(image_rootfs)s" % bbvars).status
Patrick Williamsc124f4f2015-09-15 14:41:29 -050091 self.assertEqual(0, status)
92 self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct")))
93
Patrick Williamsf1e5d692016-03-30 15:21:19 -050094 @testcase(1157)
95 def test_gpt_image(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050096 """Test creation of core-image-minimal with gpt table and UUID boot"""
97 self.assertEqual(0, runCmd("wic create directdisk-gpt "
98 "--image-name core-image-minimal").status)
99 self.assertEqual(1, len(glob(self.resultdir + "directdisk-*.direct")))
100
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500101 @testcase(1213)
102 def test_unsupported_subcommand(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500103 """Test unsupported subcommand"""
104 self.assertEqual(1, runCmd('wic unsupported',
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500105 ignore_status=True).status)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500106
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500107 @testcase(1214)
108 def test_no_command(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500109 """Test wic without command"""
110 self.assertEqual(1, runCmd('wic', ignore_status=True).status)
111
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500112 @testcase(1215)
113 def test_help_overview(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500114 """Test wic help overview"""
115 self.assertEqual(0, runCmd('wic help overview').status)
116
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500117 @testcase(1216)
118 def test_help_plugins(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500119 """Test wic help plugins"""
120 self.assertEqual(0, runCmd('wic help plugins').status)
121
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500122 @testcase(1217)
123 def test_help_kickstart(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500124 """Test wic help kickstart"""
125 self.assertEqual(0, runCmd('wic help kickstart').status)
126
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500127 @testcase(1264)
128 def test_compress_gzip(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500129 """Test compressing an image with gzip"""
130 self.assertEqual(0, runCmd("wic create directdisk "
131 "--image-name core-image-minimal "
132 "-c gzip").status)
133 self.assertEqual(1, len(glob(self.resultdir + \
134 "directdisk-*.direct.gz")))
135
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500136 @testcase(1265)
137 def test_compress_bzip2(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500138 """Test compressing an image with bzip2"""
139 self.assertEqual(0, runCmd("wic create directdisk "
140 "--image-name core-image-minimal "
141 "-c bzip2").status)
142 self.assertEqual(1, len(glob(self.resultdir + \
143 "directdisk-*.direct.bz2")))
144
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500145 @testcase(1266)
146 def test_compress_xz(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500147 """Test compressing an image with xz"""
148 self.assertEqual(0, runCmd("wic create directdisk "
149 "--image-name core-image-minimal "
150 "-c xz").status)
151 self.assertEqual(1, len(glob(self.resultdir + \
152 "directdisk-*.direct.xz")))
153
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500154 @testcase(1267)
155 def test_wrong_compressor(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500156 """Test how wic breaks if wrong compressor is provided"""
157 self.assertEqual(2, runCmd("wic create directdisk "
158 "--image-name core-image-minimal "
159 "-c wrong", ignore_status=True).status)
160
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500161 @testcase(1268)
162 def test_rootfs_indirect_recipes(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500163 """Test usage of rootfs plugin with rootfs recipes"""
164 wks = "directdisk-multi-rootfs"
165 self.assertEqual(0, runCmd("wic create %s "
166 "--image-name core-image-minimal "
167 "--rootfs rootfs1=core-image-minimal "
168 "--rootfs rootfs2=core-image-minimal" \
169 % wks).status)
170 self.assertEqual(1, len(glob(self.resultdir + "%s*.direct" % wks)))
171
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500172 @testcase(1269)
173 def test_rootfs_artifacts(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500174 """Test usage of rootfs plugin with rootfs paths"""
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500175 bbvars = dict((var.lower(), get_bb_var(var, 'core-image-minimal')) \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500176 for var in ('STAGING_DATADIR', 'DEPLOY_DIR_IMAGE',
177 'STAGING_DIR_NATIVE', 'IMAGE_ROOTFS'))
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500178 bbvars['wks'] = "directdisk-multi-rootfs"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500179 status = runCmd("wic create %(wks)s "
180 "-b %(staging_datadir)s "
181 "-k %(deploy_dir_image)s "
182 "-n %(staging_dir_native)s "
183 "--rootfs-dir rootfs1=%(image_rootfs)s "
184 "--rootfs-dir rootfs2=%(image_rootfs)s" \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500185 % bbvars).status
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500186 self.assertEqual(0, status)
187 self.assertEqual(1, len(glob(self.resultdir + \
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500188 "%(wks)s-*.direct" % bbvars)))
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500189
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500190 @testcase(1346)
191 def test_iso_image(self):
192 """Test creation of hybrid iso image with legacy and EFI boot"""
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500193 self.assertEqual(0, runCmd("wic create mkhybridiso "
194 "--image-name core-image-minimal").status)
195 self.assertEqual(1, len(glob(self.resultdir + "HYBRID_ISO_IMG-*.direct")))
196 self.assertEqual(1, len(glob(self.resultdir + "HYBRID_ISO_IMG-*.iso")))
197
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500198 @testcase(1347)
199 def test_image_env(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500200 """Test generation of <image>.env files."""
201 image = 'core-image-minimal'
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500202 self.assertEqual(0, bitbake('%s -c do_rootfs_wicenv' % image).status)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500203 stdir = get_bb_var('STAGING_DIR_TARGET', image)
204 imgdatadir = os.path.join(stdir, 'imgdata')
205
206 basename = get_bb_var('IMAGE_BASENAME', image)
207 self.assertEqual(basename, image)
208 path = os.path.join(imgdatadir, basename) + '.env'
209 self.assertTrue(os.path.isfile(path))
210
211 wicvars = set(get_bb_var('WICVARS', image).split())
212 # filter out optional variables
213 wicvars = wicvars.difference(('HDDDIR', 'IMAGE_BOOT_FILES',
214 'INITRD', 'ISODIR'))
215 with open(path) as envfile:
216 content = dict(line.split("=", 1) for line in envfile)
217 # test if variables used by wic present in the .env file
218 for var in wicvars:
219 self.assertTrue(var in content, "%s is not in .env file" % var)
220 self.assertTrue(content[var])
221
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500222 @testcase(1351)
223 def test_wic_image_type(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500224 """Test building wic images by bitbake"""
225 self.assertEqual(0, bitbake('wic-image-minimal').status)
226
227 deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
228 machine = get_bb_var('MACHINE')
229 prefix = os.path.join(deploy_dir, 'wic-image-minimal-%s.' % machine)
230 # check if we have result image and manifests symlinks
231 # pointing to existing files
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500232 for suffix in ('wic', 'manifest'):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500233 path = prefix + suffix
234 self.assertTrue(os.path.islink(path))
235 self.assertTrue(os.path.isfile(os.path.realpath(path)))
236
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500237 @testcase(1348)
238 def test_qemux86_directdisk(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500239 """Test creation of qemux-86-directdisk image"""
240 image = "qemux86-directdisk"
241 self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \
242 % image).status)
243 self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
244
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500245 @testcase(1349)
246 def test_mkgummidisk(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500247 """Test creation of mkgummidisk image"""
248 image = "mkgummidisk"
249 self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \
250 % image).status)
251 self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
252
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500253 @testcase(1350)
254 def test_mkefidisk(self):
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500255 """Test creation of mkefidisk image"""
256 image = "mkefidisk"
257 self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \
258 % image).status)
259 self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500260
261 @testcase(1385)
262 def test_directdisk_bootloader_config(self):
263 """Test creation of directdisk-bootloader-config image"""
264 image = "directdisk-bootloader-config"
265 self.assertEqual(0, runCmd("wic create %s -e core-image-minimal" \
266 % image).status)
267 self.assertEqual(1, len(glob(self.resultdir + "%s-*direct" % image)))
268
269 @testcase(1422)
270 def test_qemu(self):
271 """Test wic-image-minimal under qemu"""
272 self.assertEqual(0, bitbake('wic-image-minimal').status)
273
274 with runqemu('wic-image-minimal', ssh=False) as qemu:
275 command = "mount |grep '^/dev/' | cut -f1,3 -d ' '"
276 status, output = qemu.run_serial(command)
277 self.assertEqual(1, status, 'Failed to run command "%s": %s' % (command, output))
278 self.assertEqual(output, '/dev/root /\r\n/dev/vda3 /mnt')