=== modified file 'lava_dispatcher/actions/deploy.py'
@@ -18,6 +18,7 @@
# along with this program; if not, see <http://www.gnu.org/licenses>.
from lava_dispatcher.actions import BaseAction
+from lava_dispatcher.client.fastmodel import LavaFastModelClient
from lava_dispatcher.client.master import LavaMasterImageClient
from lava_dispatcher.client.qemu import LavaQEMUClient
@@ -78,7 +79,8 @@
def run(self, hwpack=None, rootfs=None, image=None, kernel_matrix=None,
rootfstype='ext3'):
if not isinstance(self.client, LavaMasterImageClient) and \
- not isinstance(self.client, LavaQEMUClient):
+ not isinstance(self.client, LavaQEMUClient) and \
+ not isinstance(self.client, LavaFastModelClient):
raise RuntimeError("Invalid LavaClient for this action")
self.client.deploy_linaro(
=== modified file 'lava_dispatcher/actions/launch_control.py'
@@ -113,8 +113,6 @@
status = 'fail'
err_msg = err_msg + " Some test case result appending failed."
logging.warning(err_msg)
- finally:
- shutil.rmtree(os.path.dirname(result_path))
except:
logging.exception('retrieve_results failed')
return device_bundles, status, err_msg
=== modified file 'lava_dispatcher/actions/lava-test.py'
@@ -120,6 +120,7 @@
'type': 'array', 'items': {'type': 'string'}, 'optional': True
},
'timeout': {'type': 'integer', 'optional': True},
+ 'install_lava_test': {'type': 'boolean', 'optional': True, 'default': True}
},
'additionalProperties': False,
}
@@ -133,7 +134,8 @@
else:
self.context.test_data.add_result(test_result_name, 'pass')
- def run(self, tests, install_python=None, install_deb=None, register=None, timeout=2400):
+ def run(self, tests, install_python=None, install_deb=None, register=None,
+ timeout=2400, install_lava_test=True):
logging.info(
"Executing lava_test_install (%s) command" % ",".join(tests))
@@ -148,7 +150,8 @@
# just ignore it
session.run("rm -f /etc/apt/apt.conf.d/30proxy")
- _install_lava_test(self.client, session)
+ if install_lava_test:
+ _install_lava_test(self.client, session)
if install_python:
for module in install_python:
=== modified file 'lava_dispatcher/client/fastmodel.py'
@@ -34,6 +34,7 @@
from lava_dispatcher.client.lmc_utils import (
image_partition_mounted,
generate_android_image,
+ generate_fastmodel_image,
get_partition_offset,
)
from lava_dispatcher.downloader import (
@@ -104,6 +105,13 @@
else:
self._customize_ubuntu()
+ def _copy_axf(self, partno, fname):
+ with image_partition_mounted(self._sd_image, partno) as mntdir:
+ src = '%s/%s' % (mntdir,fname)
+ odir = os.path.dirname(self._sd_image)
+ self._axf = '%s/%s' % (odir, os.path.split(src)[1])
+ shutil.copyfile(src, self._axf)
+
def deploy_linaro_android(self, boot, system, data, pkg=None,
rootfstype='ext4'):
logging.info("Deploying Android on %s" % self.hostname)
@@ -117,15 +125,34 @@
generate_android_image(
'vexpress-a9', self._boot, self._data, self._system, self._sd_image)
- # now grab the axf file from the boot partition
- with image_partition_mounted(self._sd_image, self.boot_part) as mntdir:
- src = '%s/linux-system-ISW.axf' % mntdir
- self._axf = \
- '%s/%s' % (os.path.dirname(self._system), os.path.split(src)[1])
- shutil.copyfile(src, self._axf)
+ self._copy_axf(self.boot_part, 'linux-system-ISW.axf')
self._customize_android()
+ def deploy_linaro(self, hwpack=None, rootfs=None, image=None,
+ kernel_matrix=None, rootfstype='ext3'):
+ if image is None:
+ if hwpack is None or rootfs is None:
+ raise CriticalError(
+ "must specify both hwpack and rootfs when not specifying image")
+ elif hwpack is not None or rootfs is not None:
+ raise CriticalError(
+ "cannot specify hwpack or rootfs when specifying image")
+
+ if image is None:
+ hwpack = download_image(hwpack, self.context, decompress=False)
+ rootfs = download_image(rootfs, self.context, decompress=False)
+ odir = os.path.dirname(rootfs)
+
+ generate_fastmodel_image(hwpack, rootfs, odir)
+ self._sd_image = '%s/sd.img' % odir
+ self._axf = '%s/img.axf' % odir
+ else:
+ self._sd_image = download_image(image, self.context)
+ self._copy_axf(self.root_part, 'boot/img.axf')
+
+ self._customize_ubuntu()
+
def _close_sim_proc(self):
self._sim_proc.close(True)
@@ -143,6 +170,11 @@
os.chmod(self._sd_image, stat.S_IRWXG|stat.S_IRWXU)
os.chmod(self._axf, stat.S_IRWXG|stat.S_IRWXU)
+ #lmc ignores the parent directories group owner
+ st = os.stat(d)
+ os.chown(self._axf, st.st_uid, st.st_gid)
+ os.chown(self._sd_image, st.st_uid, st.st_gid)
+
def _get_sim_cmd(self):
return ("%s -a coretile.cluster0.*=%s "
"-C motherboard.smsc_91c111.enabled=1 "
@@ -153,12 +185,15 @@
"-C motherboard.hostbridge.userNetPorts='5555=5555'") % (
self._sim_binary, self._axf, self._sd_image)
- def _boot_linaro_image(self):
+ def _stop(self):
if self.proc is not None:
self.proc.close()
if self._sim_proc is not None:
self._sim_proc.close()
+ def _boot_linaro_image(self):
+ self._stop()
+
self._fix_perms()
sim_cmd = self._get_sim_cmd()
@@ -195,6 +230,17 @@
def reliable_session(self):
return self.tester_session()
+ def retrieve_results(self, result_disk):
+ self._stop()
+
+ tardir = os.path.dirname(self._sd_image)
+ tarfile = os.path.join(tardir, 'lava_results.tgz')
+ with image_partition_mounted(self._sd_image, self.root_part) as mnt:
+ logging_system(
+ 'tar czf %s -C %s%s .' % (
+ tarfile, mnt, self.context.lava_result_dir))
+ return 'pass', '', tarfile
+
class _pexpect_drain(threading.Thread):
''' The simulator process can dump a lot of information to its console. If
don't actively read from it, the pipe will get full and the process will