mirror of
https://github.com/xemu-project/xemu.git
synced 2024-12-03 00:57:25 +00:00
Testing updates
- some clean-ups for tests/vm - enable tools build for MacOSX - bump avocado to a newer version - bump travis env for avocado -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAl5ffDMACgkQ+9DbCVqe KkQB5wf/Wuoelb7c+zHWZwfKeoApAJk5C53tgCzK7zAuhF3cNhIo3IViai7d/Tq4 xGLeYS64FxLHlghHuDFrcNOp14FHahrJ0KLrWjDZGhXLQ70hVBxOHA1IEqmDLyl8 ljsvVztunLWTw1c4HLTd+3DuZUm+mVMBqv8crhN8pDlbA2IJVTQSlaxJMuYybaVU qwHfmwkyk7RtV0HYdUpl42Bq5c34HtQjmF4sYIGCKJDCvfs1yaxEhUqP0mMBA4U6 fbryjP/lOSop8qeEUnSFcYT00vXkkZOW302cqH/5f9zuHcq5SxYkp4Zm1YgKCWJb KlnInCoZQ40TCWb6iVgOKiXTrjRoAQ== =PsMV -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-040320-1' into staging Testing updates - some clean-ups for tests/vm - enable tools build for MacOSX - bump avocado to a newer version - bump travis env for avocado # gpg: Signature made Wed 04 Mar 2020 10:00:19 GMT # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-testing-040320-1: travis.yml: install python3 numpy and opencv libraries tests/acceptance: bump avocado requirements to 76.0 configure: detect and report genisoimage travis: enable tools build on OS X tests/vm: Added gen_cloud_init_iso() to basevm.py tests/vm: give wait_ssh() option to wait for root tests/vm: increased max timeout for vm boot. tests/vm: Debug mode shows ssh output. tests/vm: use $(PYTHON) consistently Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
e64a62df37
@ -273,6 +273,7 @@ jobs:
|
||||
|
||||
- name: "OSX Xcode 10.3"
|
||||
env:
|
||||
- BASE_CONFIG="--disable-docs --enable-tools"
|
||||
- CONFIG="--target-list=i386-softmmu,ppc-softmmu,ppc64-softmmu,m68k-softmmu,x86_64-softmmu"
|
||||
os: osx
|
||||
osx_image: xcode10.3
|
||||
@ -312,6 +313,7 @@ jobs:
|
||||
|
||||
# Acceptance (Functional) tests
|
||||
- name: "GCC check-acceptance"
|
||||
dist: bionic
|
||||
env:
|
||||
- CONFIG="--target-list=aarch64-softmmu,alpha-softmmu,arm-softmmu,m68k-softmmu,microblaze-softmmu,mips-softmmu,mips64el-softmmu,nios2-softmmu,or1k-softmmu,ppc-softmmu,ppc64-softmmu,s390x-softmmu,sparc-softmmu,x86_64-softmmu,xtensa-softmmu"
|
||||
- TEST_CMD="make check-acceptance"
|
||||
@ -322,7 +324,9 @@ jobs:
|
||||
packages:
|
||||
- python3-pil
|
||||
- python3-pip
|
||||
- python3.5-venv
|
||||
- python3-numpy
|
||||
- python3-opencv
|
||||
- python3-venv
|
||||
- rpm2cpio
|
||||
- tesseract-ocr
|
||||
- tesseract-ocr-eng
|
||||
|
13
configure
vendored
13
configure
vendored
@ -936,6 +936,17 @@ do
|
||||
fi
|
||||
done
|
||||
|
||||
# Check for ancillary tools used in testing
|
||||
genisoimage=
|
||||
for binary in genisoimage
|
||||
do
|
||||
if has $binary
|
||||
then
|
||||
genisoimage=$(command -v "$binary")
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
: ${smbd=${SMBD-/usr/sbin/smbd}}
|
||||
|
||||
# Default objcc to clang if available, otherwise use CC
|
||||
@ -6567,6 +6578,7 @@ echo "python $python ($python_version)"
|
||||
if test "$docs" != "no"; then
|
||||
echo "sphinx-build $sphinx_build"
|
||||
fi
|
||||
echo "genisoimage $genisoimage"
|
||||
echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
|
||||
if test "$slirp" != "no" ; then
|
||||
echo "smbd $smbd"
|
||||
@ -7616,6 +7628,7 @@ echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
|
||||
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
|
||||
echo "PYTHON=$python" >> $config_host_mak
|
||||
echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
|
||||
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
|
||||
echo "CC=$cc" >> $config_host_mak
|
||||
if $iasl -h > /dev/null 2>&1; then
|
||||
echo "IASL=$iasl" >> $config_host_mak
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Add Python module requirements, one per line, to be installed
|
||||
# in the tests/venv Python virtual environment. For more info,
|
||||
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
|
||||
avocado-framework==72.0
|
||||
avocado-framework==76.0
|
||||
|
@ -2,7 +2,11 @@
|
||||
|
||||
.PHONY: vm-build-all vm-clean-all
|
||||
|
||||
IMAGES := ubuntu.i386 freebsd netbsd openbsd centos fedora
|
||||
IMAGES := freebsd netbsd openbsd centos fedora
|
||||
ifneq ($(GENISOIMAGE),)
|
||||
IMAGES += ubuntu.i386 centos
|
||||
endif
|
||||
|
||||
IMAGES_DIR := $(HOME)/.cache/qemu-vm/images
|
||||
IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES))
|
||||
|
||||
@ -12,12 +16,16 @@ IMAGE_FILES := $(patsubst %, $(IMAGES_DIR)/%.img, $(IMAGES))
|
||||
vm-help vm-test:
|
||||
@echo "vm-help: Test QEMU in preconfigured virtual machines"
|
||||
@echo
|
||||
@echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM"
|
||||
@echo " vm-build-freebsd - Build QEMU in FreeBSD VM"
|
||||
@echo " vm-build-netbsd - Build QEMU in NetBSD VM"
|
||||
@echo " vm-build-openbsd - Build QEMU in OpenBSD VM"
|
||||
@echo " vm-build-centos - Build QEMU in CentOS VM, with Docker"
|
||||
@echo " vm-build-fedora - Build QEMU in Fedora VM"
|
||||
ifneq ($(GENISOIMAGE),)
|
||||
@echo " vm-build-centos - Build QEMU in CentOS VM, with Docker"
|
||||
@echo " vm-build-ubuntu.i386 - Build QEMU in ubuntu i386 VM"
|
||||
else
|
||||
@echo " (install genisoimage to build centos/ubuntu images)"
|
||||
endif
|
||||
@echo ""
|
||||
@echo " vm-build-all - Build QEMU in all VMs"
|
||||
@echo " vm-clean-all - Clean up VM images"
|
||||
@ -80,7 +88,7 @@ vm-boot-serial-%: $(IMAGES_DIR)/%.img
|
||||
|
||||
vm-boot-ssh-%: $(IMAGES_DIR)/%.img
|
||||
$(call quiet-command, \
|
||||
$(SRC_PATH)/tests/vm/$* \
|
||||
$(PYTHON) $(SRC_PATH)/tests/vm/$* \
|
||||
$(if $(J),--jobs $(J)) \
|
||||
--image "$<" \
|
||||
--interactive \
|
||||
|
@ -57,6 +57,10 @@ class BaseVM(object):
|
||||
poweroff = "poweroff"
|
||||
# enable IPv6 networking
|
||||
ipv6 = True
|
||||
# Scale up some timeouts under TCG.
|
||||
# 4 is arbitrary, but greater than 2,
|
||||
# since we found we need to wait more than twice as long.
|
||||
tcg_ssh_timeout_multiplier = 4
|
||||
def __init__(self, debug=False, vcpus=None):
|
||||
self._guest = None
|
||||
self._tmpdir = os.path.realpath(tempfile.mkdtemp(prefix="vm-test-",
|
||||
@ -120,11 +124,16 @@ class BaseVM(object):
|
||||
return fname
|
||||
|
||||
def _ssh_do(self, user, cmd, check):
|
||||
ssh_cmd = ["ssh", "-q", "-t",
|
||||
ssh_cmd = ["ssh",
|
||||
"-t",
|
||||
"-o", "StrictHostKeyChecking=no",
|
||||
"-o", "UserKnownHostsFile=" + os.devnull,
|
||||
"-o", "ConnectTimeout=1",
|
||||
"-p", self.ssh_port, "-i", self._ssh_key_file]
|
||||
# If not in debug mode, set ssh to quiet mode to
|
||||
# avoid printing the results of commands.
|
||||
if not self.debug:
|
||||
ssh_cmd.append("-q")
|
||||
for var in self.envvars:
|
||||
ssh_cmd += ['-o', "SendEnv=%s" % var ]
|
||||
assert not isinstance(cmd, str)
|
||||
@ -303,12 +312,18 @@ class BaseVM(object):
|
||||
def print_step(self, text):
|
||||
sys.stderr.write("### %s ...\n" % text)
|
||||
|
||||
def wait_ssh(self, seconds=300):
|
||||
def wait_ssh(self, wait_root=False, seconds=300):
|
||||
# Allow more time for VM to boot under TCG.
|
||||
if not kvm_available(self.arch):
|
||||
seconds *= self.tcg_ssh_timeout_multiplier
|
||||
starttime = datetime.datetime.now()
|
||||
endtime = starttime + datetime.timedelta(seconds=seconds)
|
||||
guest_up = False
|
||||
while datetime.datetime.now() < endtime:
|
||||
if self.ssh("exit 0") == 0:
|
||||
if wait_root and self.ssh_root("exit 0") == 0:
|
||||
guest_up = True
|
||||
break
|
||||
elif self.ssh("exit 0") == 0:
|
||||
guest_up = True
|
||||
break
|
||||
seconds = (endtime - datetime.datetime.now()).total_seconds()
|
||||
@ -330,6 +345,46 @@ class BaseVM(object):
|
||||
def qmp(self, *args, **kwargs):
|
||||
return self._guest.qmp(*args, **kwargs)
|
||||
|
||||
def gen_cloud_init_iso(self):
|
||||
cidir = self._tmpdir
|
||||
mdata = open(os.path.join(cidir, "meta-data"), "w")
|
||||
name = self.name.replace(".","-")
|
||||
mdata.writelines(["instance-id: {}-vm-0\n".format(name),
|
||||
"local-hostname: {}-guest\n".format(name)])
|
||||
mdata.close()
|
||||
udata = open(os.path.join(cidir, "user-data"), "w")
|
||||
print("guest user:pw {}:{}".format(self._config['guest_user'],
|
||||
self._config['guest_pass']))
|
||||
udata.writelines(["#cloud-config\n",
|
||||
"chpasswd:\n",
|
||||
" list: |\n",
|
||||
" root:%s\n" % self._config['root_pass'],
|
||||
" %s:%s\n" % (self._config['guest_user'],
|
||||
self._config['guest_pass']),
|
||||
" expire: False\n",
|
||||
"users:\n",
|
||||
" - name: %s\n" % self._config['guest_user'],
|
||||
" sudo: ALL=(ALL) NOPASSWD:ALL\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % self._config['ssh_pub_key'],
|
||||
" - name: root\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % self._config['ssh_pub_key'],
|
||||
"locale: en_US.UTF-8\n"])
|
||||
proxy = os.environ.get("http_proxy")
|
||||
if not proxy is None:
|
||||
udata.writelines(["apt:\n",
|
||||
" proxy: %s" % proxy])
|
||||
udata.close()
|
||||
subprocess.check_call(["genisoimage", "-output", "cloud-init.iso",
|
||||
"-volid", "cidata", "-joliet", "-rock",
|
||||
"user-data", "meta-data"],
|
||||
cwd=cidir,
|
||||
stdin=self._devnull, stdout=self._stdout,
|
||||
stderr=self._stdout)
|
||||
|
||||
return os.path.join(cidir, "cloud-init.iso")
|
||||
|
||||
def parse_args(vmcls):
|
||||
|
||||
def get_default_jobs():
|
||||
|
@ -31,37 +31,6 @@ class CentosVM(basevm.BaseVM):
|
||||
make docker-test-mingw@fedora {verbose} J={jobs} NETWORK=1;
|
||||
"""
|
||||
|
||||
def _gen_cloud_init_iso(self):
|
||||
cidir = self._tmpdir
|
||||
mdata = open(os.path.join(cidir, "meta-data"), "w")
|
||||
mdata.writelines(["instance-id: centos-vm-0\n",
|
||||
"local-hostname: centos-guest\n"])
|
||||
mdata.close()
|
||||
udata = open(os.path.join(cidir, "user-data"), "w")
|
||||
udata.writelines(["#cloud-config\n",
|
||||
"chpasswd:\n",
|
||||
" list: |\n",
|
||||
" root:%s\n" % self.ROOT_PASS,
|
||||
" %s:%s\n" % (self.GUEST_USER, self.GUEST_PASS),
|
||||
" expire: False\n",
|
||||
"users:\n",
|
||||
" - name: %s\n" % self.GUEST_USER,
|
||||
" sudo: ALL=(ALL) NOPASSWD:ALL\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % basevm.SSH_PUB_KEY,
|
||||
" - name: root\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % basevm.SSH_PUB_KEY,
|
||||
"locale: en_US.UTF-8\n"])
|
||||
udata.close()
|
||||
subprocess.check_call(["genisoimage", "-output", "cloud-init.iso",
|
||||
"-volid", "cidata", "-joliet", "-rock",
|
||||
"user-data", "meta-data"],
|
||||
cwd=cidir,
|
||||
stdin=self._devnull, stdout=self._stdout,
|
||||
stderr=self._stdout)
|
||||
return os.path.join(cidir, "cloud-init.iso")
|
||||
|
||||
def build_image(self, img):
|
||||
cimg = self._download_with_cache("https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2.xz")
|
||||
img_tmp = img + ".tmp"
|
||||
@ -69,7 +38,7 @@ class CentosVM(basevm.BaseVM):
|
||||
subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
|
||||
subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
|
||||
self.exec_qemu_img("resize", img_tmp, "50G")
|
||||
self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
|
||||
self.boot(img_tmp, extra_args = ["-cdrom", self.gen_cloud_init_iso()])
|
||||
self.wait_ssh()
|
||||
self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
|
||||
self.ssh_root_check("yum update -y")
|
||||
|
@ -29,41 +29,6 @@ class UbuntuX86VM(basevm.BaseVM):
|
||||
make --output-sync {target} -j{jobs} {verbose};
|
||||
"""
|
||||
|
||||
def _gen_cloud_init_iso(self):
|
||||
cidir = self._tmpdir
|
||||
mdata = open(os.path.join(cidir, "meta-data"), "w")
|
||||
mdata.writelines(["instance-id: ubuntu-vm-0\n",
|
||||
"local-hostname: ubuntu-guest\n"])
|
||||
mdata.close()
|
||||
udata = open(os.path.join(cidir, "user-data"), "w")
|
||||
udata.writelines(["#cloud-config\n",
|
||||
"chpasswd:\n",
|
||||
" list: |\n",
|
||||
" root:%s\n" % self.ROOT_PASS,
|
||||
" %s:%s\n" % (self.GUEST_USER, self.GUEST_PASS),
|
||||
" expire: False\n",
|
||||
"users:\n",
|
||||
" - name: %s\n" % self.GUEST_USER,
|
||||
" sudo: ALL=(ALL) NOPASSWD:ALL\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % basevm.SSH_PUB_KEY,
|
||||
" - name: root\n",
|
||||
" ssh-authorized-keys:\n",
|
||||
" - %s\n" % basevm.SSH_PUB_KEY,
|
||||
"locale: en_US.UTF-8\n"])
|
||||
proxy = os.environ.get("http_proxy")
|
||||
if not proxy is None:
|
||||
udata.writelines(["apt:\n",
|
||||
" proxy: %s" % proxy])
|
||||
udata.close()
|
||||
subprocess.check_call(["genisoimage", "-output", "cloud-init.iso",
|
||||
"-volid", "cidata", "-joliet", "-rock",
|
||||
"user-data", "meta-data"],
|
||||
cwd=cidir,
|
||||
stdin=self._devnull, stdout=self._stdout,
|
||||
stderr=self._stdout)
|
||||
return os.path.join(cidir, "cloud-init.iso")
|
||||
|
||||
def build_image(self, img):
|
||||
cimg = self._download_with_cache(
|
||||
"https://cloud-images.ubuntu.com/releases/bionic/release-20191114/ubuntu-18.04-server-cloudimg-i386.img",
|
||||
@ -71,7 +36,7 @@ class UbuntuX86VM(basevm.BaseVM):
|
||||
img_tmp = img + ".tmp"
|
||||
subprocess.check_call(["cp", "-f", cimg, img_tmp])
|
||||
self.exec_qemu_img("resize", img_tmp, "50G")
|
||||
self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
|
||||
self.boot(img_tmp, extra_args = ["-cdrom", self.gen_cloud_init_iso()])
|
||||
self.wait_ssh()
|
||||
self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
|
||||
self.ssh_root_check("apt-get update")
|
||||
|
Loading…
Reference in New Issue
Block a user