qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: qemu-devel@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Kamil Rytarowski" <kamil@netbsd.org>,
	stefanha@redhat.com, pbonzini@redhat.com,
	"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib
Date: Thu, 17 Aug 2017 05:03:37 +0800	[thread overview]
Message-ID: <20170816210337.GB17882@lemon> (raw)
In-Reply-To: <20170816085515.GB3180@stefanha-x1.localdomain>

On Wed, 08/16 09:55, Stefan Hajnoczi wrote:
> On Wed, Aug 16, 2017 at 03:20:59PM +0800, Fam Zheng wrote:
> > +class BaseVM(object):
> > +    GUEST_USER = "qemu"
> > +    GUEST_PASS = "qemupass"
> > +    ROOT_PASS = "qemupass"
> > +
> > +    # The script to run in the guest that builds QEMU
> > +    BUILD_SCRIPT = ""
> > +    # The guest name, to be overridden by subclasses
> > +    name = "#base"
> > +    def __init__(self, debug=False):
> > +        self._guest = None
> > +        self.ssh_port = 20022
> 
> Only one instance of this test can be run per machine due to the
> hardcoded SSH port number on the host.
> 
> It is possible to use:
> 
>   -netdev user,id=vnet,hostfwd=:0.0.0.0:0-:22
> 
> and then query the port number:
> 
>   (qemu) info usernet
>   VLAN -1 (vnet):
>   Protocol[State]    FD  Source Address  Port   Dest. Address  Port RecvQ SendQ
>   TCP[HOST_FORWARD]  15               * 36089       10.0.2.15    22     0     0
> 
> The host port is 36089 in this example.
> 
> I'm not aware of a QMP equivalent for "info usernet".  It may be
> necessary to implement a query-usernet command if you don't want to use
> HMP.

Sounds good. Will try. Using HMP is good enough to start with, we can add
query-usernet on top.

> 
> > +        self._tmpdir = tempfile.mkdtemp(prefix="qemu-vm-")
> > +        atexit.register(shutil.rmtree, self._tmpdir)
> > +
> > +        self._ssh_key_file = os.path.join(self._tmpdir, "id_rsa")
> > +        open(self._ssh_key_file, "w").write(SSH_KEY)
> > +        subprocess.check_call(["chmod", "600", self._ssh_key_file])
> > +
> > +        self._ssh_pub_key_file = os.path.join(self._tmpdir, "id_rsa.pub")
> > +        open(self._ssh_pub_key_file, "w").write(SSH_PUB_KEY)
> > +
> > +        self.debug = debug
> > +        self._stderr = sys.stderr
> > +        self._devnull = open("/dev/null", "w")
> > +        if self.debug:
> > +            self._stdout = sys.stdout
> > +        else:
> > +            self._stdout = self._devnull
> > +        self._args = [ \
> > +            "-nodefaults", "-enable-kvm", "-m", "2G",
> > +            "-smp", os.environ.get("J", "4"), "-cpu", "host",
> 
> Can this be a command-line option in main() and a constructor argument
> instead of an environment variable?  That would be cleaner because the
> use of "J" might be surprising to someone who happens to have it set in
> their environment.

Yes, "J" should be handled in the Makefile.

> 
> > +            "-netdev", "user,id=vnet,hostfwd=:0.0.0.0:%d-:22" % self.ssh_port,
> > +            "-device", "virtio-net-pci,netdev=vnet",
> > +            "-vnc", ":0,to=20",
> > +            "-serial", "file:%s" % os.path.join(self._tmpdir, "serial.out")]
> > +
> > +        self._data_args = []
> > +
> > +    def _download_with_cache(self, url):
> > +        cache_dir = os.path.expanduser("~/.cache/qemu-vm/download")
> > +        subprocess.check_call(["mkdir", "-p", cache_dir])
> 
> os.makedirs()

OK.

> 
> > +        fname = os.path.join(cache_dir, hashlib.sha1(url).hexdigest())
> > +        if os.path.exists(fname):
> > +            return fname
> > +        logging.debug("Downloading %s to %s...", url, fname)
> > +        subprocess.check_call(["wget", "-c", url, "-O", fname + ".download"],
> > +                              stdout=self._stdout, stderr=self._stderr)
> 
> It might be important to support image file updates without manually
> deleting ~/.cache.  You can probably make wget send an HTTP
> If-Modified-Since header or something similar.  There are 3 cases:
> 
> 1. Existing file is up-to-date.  No download after HEAD request.
> 2. Existing file is outdated, download the newest version.
> 3. Failure or timeout, use the old version for now.

Since the URLs are not https, maybe add sha256sum of images in the subclasses so
it is MITM-safe? It is also much simpler code, I think.

> 
> > +        subprocess.check_call(["mv", fname + ".download", fname],
> > +                              stdout=self._stdout, stderr=self._stderr)
> 
> os.rename()

OK.

Fam

  parent reply	other threads:[~2017-08-16 21:03 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-16  7:20 [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) Fam Zheng
2017-08-16  7:20 ` [Qemu-devel] [PATCH RFC 1/9] gitignore: Ignore vm test images Fam Zheng
2017-08-16  7:20 ` [Qemu-devel] [PATCH RFC 2/9] qemu.py: Add variable vga type Fam Zheng
2017-08-16  9:18   ` Kamil Rytarowski
2017-08-16  7:20 ` [Qemu-devel] [PATCH RFC 3/9] qemu.py: Add "wait()" method Fam Zheng
2017-08-16  8:32   ` Stefan Hajnoczi
2017-08-16 20:50     ` Fam Zheng
2017-08-16  7:20 ` [Qemu-devel] [PATCH RFC 4/9] tests: Add vm test lib Fam Zheng
2017-08-16  8:55   ` Stefan Hajnoczi
2017-08-16 11:49     ` Eric Blake
2017-08-16 21:03     ` Fam Zheng [this message]
2017-08-16  7:21 ` [Qemu-devel] [PATCH RFC 5/9] tests: Add ubuntu.i386 image Fam Zheng
2017-08-16  7:21 ` [Qemu-devel] [PATCH RFC 6/9] tests: Add FreeBSD image Fam Zheng
2017-08-16  7:21 ` [Qemu-devel] [PATCH RFC 7/9] tests: Add NetBSD image Fam Zheng
2017-08-16  9:31   ` Kamil Rytarowski
2017-08-16 10:08     ` Fam Zheng
2017-08-16  7:21 ` [Qemu-devel] [PATCH RFC 8/9] tests: Add OpenBSD image Fam Zheng
2019-01-24 15:52   ` Philippe Mathieu-Daudé
2019-01-24 15:56     ` Kamil Rytarowski
2019-01-24 16:10       ` Philippe Mathieu-Daudé
2019-01-24 16:52         ` Daniel P. Berrangé
2019-01-25  0:48           ` Brad Smith
2019-01-25  6:24             ` Thomas Huth
2019-01-25 18:27               ` Brad Smith
2019-01-25 18:38                 ` Peter Maydell
2019-01-25 23:04                   ` Philippe Mathieu-Daudé
2019-01-25 18:15             ` Philippe Mathieu-Daudé
2019-01-24 16:27     ` Peter Maydell
2017-08-16  7:21 ` [Qemu-devel] [PATCH RFC 9/9] Makefile: Add rules to run vm tests Fam Zheng
2017-08-16  7:46 ` [Qemu-devel] [PATCH RFC 0/9] tests: Add VM based build tests (for non-x86_64 and/or non-Linux) no-reply
2017-08-16  8:56 ` Stefan Hajnoczi
2017-08-16  9:24 ` Kamil Rytarowski
2017-08-16 10:13   ` Fam Zheng
2017-08-16 10:10     ` Kamil Rytarowski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170816210337.GB17882@lemon \
    --to=famz@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=f4bug@amsat.org \
    --cc=kamil@netbsd.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).