All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.