[libvirt] [PATCH] Reject USB address without a port
by Ján Tomko
We would happily accept a usb address with a missing port attribute,
then format it back as port='(null)', so the persistent domain
would not be able to start (due to the XML sightseeing tour in
virDomainObjSetDefTransient) or survive daemon restart.
---
src/conf/domain_conf.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 79d15c8..d0684eb 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -5132,7 +5132,11 @@ virDomainDeviceUSBAddressParseXML(xmlNodePtr node,
memset(addr, 0, sizeof(*addr));
- port = virXMLPropString(node, "port");
+ if (!(port = virXMLPropString(node, "port"))) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("USB address must have a port"));
+ goto cleanup;
+ }
bus = virXMLPropString(node, "bus");
if (port && virDomainDeviceUSBAddressParsePort(port) < 0)
--
2.7.3
8 years, 5 months
[libvirt] [PATCHv3 00/10] Assign addresses to USB devices
by Ján Tomko
v3:
* drop change of commandline order of ccid controllers
and USB hubs (that could possibly break compatibility)
* assign addresses to redirdevs too
* take custom port= setting of xhci controllers
into account
* hubs without addresses get one assigned only
after we took a look on all the other devices
Ján Tomko (10):
Add USB addresses to qemuhotplug test cases
Store USB port path as an array of integers
Introduce virDomainUSBDeviceDefForeach
Introduce virDomainUSBAddressSet
Add functions for adding USB controllers to addrs
Add functions for adding USB hubs to addrs
Reserve existing USB addresses
Assign addresses to USB devices
Assign addresses on USB device hotplug
Auto-add one hub if there are too many USB devices
src/conf/device_conf.h | 2 +-
src/conf/domain_addr.c | 491 +++++++++++++++++++++
src/conf/domain_addr.h | 58 +++
src/conf/domain_conf.c | 110 ++++-
src/conf/domain_conf.h | 7 +
src/libvirt_private.syms | 12 +
src/qemu/qemu_command.c | 3 +-
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_domain_address.c | 155 ++++++-
src/qemu/qemu_hotplug.c | 27 ++
...otplug-console-compat-2-live+console-virtio.xml | 1 +
.../qemuhotplug-hotplug-base-live+disk-usb.xml | 1 +
.../qemuxml2argvdata/qemuxml2argv-bios-nvram.args | 2 +-
tests/qemuxml2argvdata/qemuxml2argv-bios.args | 2 +-
.../qemuxml2argv-console-compat-2-live.xml | 1 +
.../qemuxml2argv-console-compat-2.xml | 4 +-
.../qemuxml2argv-controller-order.args | 8 +-
.../qemuxml2argv-disk-usb-device-removable.args | 3 +-
.../qemuxml2argv-disk-usb-device.args | 2 +-
.../qemuxml2argv-graphics-spice-timeout.args | 2 +-
.../qemuxml2argv-graphics-spice-usb-redir.args | 2 +-
...muxml2argv-hostdev-usb-address-device-boot.args | 2 +-
.../qemuxml2argv-hostdev-usb-address-device.args | 2 +-
.../qemuxml2argv-hostdev-usb-address.args | 2 +-
.../qemuxml2argv-hugepages-numa.args | 6 +-
.../qemuxml2argv-input-usbmouse.args | 2 +-
.../qemuxml2argv-input-usbtablet.args | 2 +-
.../qemuxml2argv-pseries-usb-kbd.args | 2 +-
.../qemuxml2argv-serial-spiceport.args | 2 +-
.../qemuxml2argv-smartcard-controller.args | 2 +-
.../qemuxml2argv-smartcard-host-certificates.args | 2 +-
.../qemuxml2argv-smartcard-host.args | 2 +-
...emuxml2argv-smartcard-passthrough-spicevmc.args | 2 +-
.../qemuxml2argv-smartcard-passthrough-tcp.args | 2 +-
.../qemuxml2argv-sound-device.args | 2 +-
.../qemuxml2argv-usb-hub-autoadd.args | 28 ++
.../qemuxml2argv-usb-hub-autoadd.xml | 23 +
.../qemuxml2argv-usb-hub-conflict.args | 25 ++
.../qemuxml2argv-usb-hub-conflict.xml | 22 +
.../qemuxml2argv-usb-port-autoassign.args | 28 ++
.../qemuxml2argv-usb-port-autoassign.xml | 27 ++
.../qemuxml2argv-usb-redir-boot.args | 2 +-
tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args | 2 +-
tests/qemuxml2argvtest.c | 9 +
44 files changed, 1048 insertions(+), 44 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-autoadd.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-hub-conflict.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-port-autoassign.xml
--
2.7.3
8 years, 5 months
[libvirt] [PATCH] qemu: match controller index for LIVE+CONFIG when doing hotplug
by Laine Stump
An attempt to attach a new scsi controller with both --live and
--config but without specifying an index, e.g.:
<controller model="virtio-scsi" type="scsi" />
led to this error:
internal error: Cannot parse controller index -1
This was because unspecified indexes are auto-assigned during
virDomainDefPostParse(), which doesn't happen for hotplugged devices
until after the device has been added to the domainDef, but
qemuDomainAttachFlags() makes a copy of the device (for feeding to
qemuDomainAttachDeviceLive() *before* it's added to the config, and
the copying function actually formats the device object and then
re-parses it into a new object.
Since qemuDomainAttachDeviceConfig() consumes the device object
pointer (i.e. sets it to NULL in the original virDomainDeviceDef) we
can't just wait to make the copy. Instead, we need to make a *shallow*
copy of the virDomainDeviceDef prior to
qemuDomainAttachDeviceConfig(), then make a deep copy of the shallow
copy.
This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1344899
---
src/qemu/qemu_driver.c | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index fa05046..f3e17e2 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -8199,6 +8199,7 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom,
virDomainObjPtr vm = NULL;
virDomainDefPtr vmdef = NULL;
virDomainDeviceDefPtr dev = NULL, dev_copy = NULL;
+ virDomainDeviceDef dev_shallow;
int ret = -1;
unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
@@ -8237,22 +8238,19 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom,
if (dev == NULL)
goto endjob;
- if (flags & VIR_DOMAIN_AFFECT_CONFIG &&
- flags & VIR_DOMAIN_AFFECT_LIVE) {
- /* If we are affecting both CONFIG and LIVE
- * create a deep copy of device as adding
- * to CONFIG takes one instance.
- */
- dev_copy = virDomainDeviceDefCopy(dev, vm->def, caps, driver->xmlopt);
- if (!dev_copy)
- goto endjob;
- }
-
if (priv->qemuCaps)
qemuCaps = virObjectRef(priv->qemuCaps);
else if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, vm->def->emulator)))
goto endjob;
+ /* Save away the pointer to the device object before it is
+ * potentially swallowed up by qemuDomainAttachDeviceConfig().
+ * This will allow us to make a copy of the device after any
+ * modifications made by virDomainDefPostParse() (which is called
+ * after the new device is added to the config
+ */
+ dev_shallow = *dev;
+
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
/* Make a copy for updated domain. */
vmdef = virDomainObjCopyPersistentDef(vm, caps, driver->xmlopt);
@@ -8270,6 +8268,17 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom,
}
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
+ if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
+ /* If we are affecting both CONFIG and LIVE create a deep
+ * copy of device from the saved shallow copy, as adding
+ * it to CONFIG has already consumed the original.
+ */
+ dev_copy = virDomainDeviceDefCopy(&dev_shallow, vm->def,
+ caps, driver->xmlopt);
+ if (!dev_copy)
+ goto endjob;
+ }
+
if (virDomainDefCompatibleDevice(vm->def, dev_copy,
VIR_DOMAIN_DEVICE_ACTION_ATTACH) < 0)
goto endjob;
--
2.5.5
8 years, 5 months
[libvirt] [PATCH] libvirtd.conf: Fix invalid default of max_anonymous_clients
by Michal Privoznik
https://bugzilla.redhat.com/show_bug.cgi?id=1343442
When a client connects, it is placed into a queue. As soon as it
authenticate, it is taken out of that queue and placed into a
different one. Now, we have a setting in the daemon config file
that allows users to control the length of the queue of yet not
authenticated clients. By default, it has a value 20 but in the
description to the config knob we clam it's zero.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
daemon/libvirtd.conf | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/daemon/libvirtd.conf b/daemon/libvirtd.conf
index 3b957e5..8466616 100644
--- a/daemon/libvirtd.conf
+++ b/daemon/libvirtd.conf
@@ -283,8 +283,8 @@
#max_queued_clients = 1000
# The maximum length of queue of accepted but not yet
-# authenticated clients. The default value is zero, meaning
-# the feature is disabled.
+# authenticated clients. The default value is 20. Set this to
+# zero to turn this feature off.
#max_anonymous_clients = 20
# The minimum limit sets the number of workers to start up
--
2.8.4
8 years, 5 months
[libvirt] how to make syntax-check on tar-tall released-version
by Zhangbo (Oscar)
Hi all:
I downloaded libvirt v1.3.4 from http://libvirt.org/sources, and try to make syntax-check inside the code tree.
But I encounted with many problems, first, I need to have file .gitignore and directory .git, and then have gnulib, many problems still comes out after that.
I still have not fixed the problems until now.
So what's the right way to make syntax-check on released-version libvirt project? Thanks in advance.
Oscar.
8 years, 5 months
[libvirt] [PATCH 0/2] Make a generic version of virDomainDefMetadataSanitize()
by Laine Stump
Peter pointed out that Brandon's patch to add metadata to the network
XML should "sanitize" it (to remove duplicate namespaces) in the same
manner as we do (thanks to Peter!) for the domain metadata. In order
to make that simpler, I made a patch that turns
virDomainDefMetadataSanitize() into the generic function
virXMLNodeSanitizeNamespaces(), then (in a separate patch) changed the
domain parser to use that new generic function. I will also add a call
to that function into Brandon's patch before pushing it.
Laine Stump (2):
util: new function virXMLNodeSanitizeNamespaces()
qemu: use virXMLNodeSanitizeNamespaces()
src/conf/domain_conf.c | 56 ++----------------------------------------------
src/libvirt_private.syms | 1 +
src/util/virxml.c | 52 ++++++++++++++++++++++++++++++++++++++++++++
src/util/virxml.h | 2 ++
4 files changed, 57 insertions(+), 54 deletions(-)
--
2.5.5
8 years, 5 months
[libvirt] [PATCH 00/28] IP peer address and host-side address config support
by Laine Stump
This (admittedly very long, but most of the patches are either very
small or just code movement/renaming, really!) series started out to
be just a replacement for a single patch posted by Vasiliy Tolstov
back in April (originally pushed upstream as commit 690969af, which
was reverted in commit 1d14b13f when I noticed an inconsistency in
behavior between lxc and qemu).
But each step forward seemed to require (or strongly suggest) a step
sideways to reorganize existing code, or eliminate annoying problems I
found, and I ended up with 28 patches.
The patches that actually add the new functionality are 24-28 (and
they are quite small), all the rest just setting up for that. In
particular, the three largest patches (03, 13, 14) are purely moving
code and renaming identifiers.
Patches 07, 08, 12, and 18 fix minor bugs I found during all the
changes. (12 is a bit strange, as it removes an undocumented behavior
from the openvz driver that has been there since 2010).
The one possible controversy in this series (other than the
modification to openvz configuration in patch 12) is my placement of
the config info for the host-side network device. I could have either
put the IP info for the host-side interface as a subelement of
<target> where the host-side interface is named, or I could follow the
convention of other device types and make it a subelement of the
<source> element of interface (since there is where you're supposed to
describe how a device connects to the host side resources). <target>
element is used to give the name of the tap interface itself. I went
back and forth about this, and in the end decided that since the IP
address is configuring how the device connects to the outside world
(just as with the "network" and "bridge" attributes of <source> for
those other network types), that it makes most sense to put it under
<source>
Please don't be put off by the large number of patches - most of them
are fairly straightforward and should be quick reviews. I promise! :-)
Laine Stump (27):
util: move virNetDevLinkDump to virnetlink.c
util: move virInterface(State|Link)/virNetDevFeature from conf to util
global: consistently use IP rather than Ip in identifiers
conf: clean up virDomainNetIPParseXML()
tests: mock virNetDevSetIPAddress
util: allow calling virSocketAddrGetIPPrefix with NULL netmask or
address
lxc: eliminate extraneous free of netDef->ifname_guest
lxc: use correct prefix when setting veth IP address
conf: new function virDomainNetDefClear
qemu: don't set/clear NetDef IP addresses in
qemuConnectDomainXMLToNative()
qemu: eliminate memory leaks when converting NetDefs to
type='ethernet'
conf/openvz: eliminate incorrect/undocumented use of <source
dev='blah'/>
util: new files virnetdevip.[ch] for IP-related netdev functions
util: move IP route & address object-related functions to
virnetdevip.c
conf: single object containing list of IP addresses, list of routes
conf: use virNetDevIPInfo in virDomainHostdevCaps
conf: use virNetDevIPInfo for guest-side <interface> config
qemu: forbid setting guest-side IP address/route info of <interface>
conf: clean up after adding calls to virNetDevIPInfo helpers
lxc: move debug/error log when adding IP addresses to
virNetDevIPAddrAdd
util: new function virNetDevIPInfoAddToDev
util: provide default destination IP in alternate
virNetDevIPRouteAdd()
util: make messages consistent in both versions of
virNetDevIPRouteAdd()
conf: support host-side IP/route information in <interface>
util: support setting peer for virNetDevIPInfo addresses
lxc: support setting host-side IP addresses/routes
qemu: support setting host-side IP addresses/routes
Vasiliy Tolstov (1):
conf: allow setting peer address in <ip> element of <interface>
docs/formatdomain.html.in | 60 +-
docs/schemas/domaincommon.rng | 82 +-
po/POTFILES.in | 1 +
src/Makefile.am | 1 +
src/conf/device_conf.c | 31 +-
src/conf/device_conf.h | 44 +-
src/conf/domain_conf.c | 399 +++++----
src/conf/domain_conf.h | 28 +-
src/conf/interface_conf.c | 38 +-
src/conf/interface_conf.h | 10 +-
src/conf/network_conf.c | 96 +-
src/conf/network_conf.h | 24 +-
src/conf/networkcommon_conf.c | 107 +--
src/conf/networkcommon_conf.h | 55 +-
src/conf/node_device_conf.h | 2 +-
src/esx/esx_driver.c | 44 +-
src/esx/esx_interface_driver.c | 4 +-
src/esx/esx_vi.c | 4 +-
src/esx/esx_vi.h | 2 +-
src/libvirt_private.syms | 50 +-
src/libxl/libxl_conf.c | 10 +-
src/libxl/libxl_domain.c | 2 +-
src/lxc/lxc_container.c | 92 +-
src/lxc/lxc_controller.c | 2 +-
src/lxc/lxc_native.c | 42 +-
src/lxc/lxc_process.c | 8 +
src/network/bridge_driver.c | 103 +--
src/network/bridge_driver_linux.c | 76 +-
src/nwfilter/nwfilter_ebiptables_driver.c | 24 +-
src/openvz/openvz_conf.c | 2 +-
src/openvz/openvz_driver.c | 15 +-
src/qemu/qemu_domain.c | 34 +
src/qemu/qemu_driver.c | 76 +-
src/qemu/qemu_hotplug.c | 6 +-
src/qemu/qemu_interface.c | 6 +-
src/uml/uml_conf.c | 4 +-
src/util/virnetdev.c | 876 +------------------
src/util/virnetdev.h | 46 +-
src/util/virnetdevip.c | 971 +++++++++++++++++++++
src/util/virnetdevip.h | 93 ++
src/util/virnetdevvportprofile.c | 4 +-
src/util/virnetlink.c | 135 +++
src/util/virnetlink.h | 5 +
src/util/virsocketaddr.c | 12 +-
src/util/virsocketaddr.h | 3 +-
src/vbox/vbox_common.c | 6 +-
src/vbox/vbox_network.c | 8 +-
src/vz/vz_sdk.c | 2 +-
src/xenconfig/xen_common.c | 14 +-
src/xenconfig/xen_sxpr.c | 16 +-
tests/lxcxml2xmldata/lxc-ethernet-hostip.xml | 44 +
tests/lxcxml2xmltest.c | 1 +
.../qemuxml2argv-net-eth-hostip.args | 23 +
.../qemuxml2argv-net-eth-hostip.xml | 39 +
tests/qemuxml2argvmock.c | 10 +-
tests/qemuxml2argvtest.c | 1 +
.../qemuxml2xmlout-net-eth-hostip.xml | 44 +
tests/qemuxml2xmltest.c | 1 +
tests/virnetdevtest.c | 14 +-
tests/xml2sexprdata/xml2sexpr-net-routed.xml | 1 -
60 files changed, 2193 insertions(+), 1760 deletions(-)
create mode 100644 src/util/virnetdevip.c
create mode 100644 src/util/virnetdevip.h
create mode 100644 tests/lxcxml2xmldata/lxc-ethernet-hostip.xml
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-eth-hostip.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-net-eth-hostip.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-net-eth-hostip.xml
--
2.5.5
8 years, 6 months
[libvirt] [PATCH 0/3] Enable admin API functionality and tar distribution
by Erik Skultety
Finally enable admin API in our code and start distributing it both via a
tarball and as part of an rpm package. I also added some usage examples,
however the html documentation is missing, because of our current xsl
stylesheet, more specifically because of how xsltproc works. It takes a
stylesheet and an xml file which it processes and produces index.html for each
xml file on its input. This way, we either get TOC for libvirt APIs or just the
admin. The same story goes for libvirt-qemu and libvirt-lxc which we neither
generate, nor distribute. I talked to Jirka and we thought about merging the
xmls somehow to a temporary file and then generate the index.html but that
requires some more digging, especially into xslt capabilities. So I haven't
figured this one out yet, but once I do, I'll enable it for all of our *.xml
API 'recipes'.
Erik Skultety (3):
admin: enable both admin API functionality and tarball distribution
examples: admin: Add some examples for the new admin APIs
spec: distribute admin API within libvirt-client package
.gitignore | 6 ++
Makefile.am | 2 +-
cfg.mk | 4 +-
daemon/libvirtd.c | 2 +-
docs/Makefile.am | 5 +-
examples/Makefile.am | 14 +++-
examples/admin/client_close.c | 57 +++++++++++++
examples/admin/client_info.c | 165 +++++++++++++++++++++++++++++++++++++
examples/admin/client_limits.c | 63 ++++++++++++++
examples/admin/list_clients.c | 111 +++++++++++++++++++++++++
examples/admin/list_servers.c | 42 ++++++++++
examples/admin/threadpool_params.c | 65 +++++++++++++++
include/libvirt/Makefile.am | 6 +-
libvirt.spec.in | 14 ++--
src/libvirt_admin_public.syms | 2 +-
15 files changed, 538 insertions(+), 20 deletions(-)
create mode 100644 examples/admin/client_close.c
create mode 100644 examples/admin/client_info.c
create mode 100644 examples/admin/client_limits.c
create mode 100644 examples/admin/list_clients.c
create mode 100644 examples/admin/list_servers.c
create mode 100644 examples/admin/threadpool_params.c
--
2.5.5
8 years, 6 months
[libvirt] [PATCH 00/18] vz: support disk/net/graphics devices updates
by Nikolay Shirokovskiy
It makes sense to support other devices too as update can be
on persistent config only which is always possible, but as AFAIK
the main purpose of this API is to change live config the set
of devices is just set of devices supported by qemu for live updates.
Nikolay Shirokovskiy (18):
vz: remove disk cache mode hunk
vz: make prlsdkGetDisk more generic
vz: reuse edit config frame in for attach/detach functions
vz: add device updates
vz: leverage disks parameters check on disks updates too
vz: move disks checks to device post parse
vz: fix memory leaks in attach/detach functions
vz: give nice report if network device not found
vz: dump ip addresses to domain xml
vz: dump route info in domain xml
vz: fix updating to no gateways
vz: fix minor type safey issues with net union usage
vz: trustGuestRxFilters fixes
vz: move getting container video devices out from vnc code
vz: support attach/detach/update/ of graphics device
vz: remove exlicitly setting zeros in dumping graphics
vz: support vnc password
vz: always pass graphics address to sdk
src/conf/networkcommon_conf.c | 2 +-
src/conf/networkcommon_conf.h | 2 +-
src/libvirt_private.syms | 1 +
src/vz/vz_driver.c | 115 +++---
src/vz/vz_sdk.c | 897 +++++++++++++++++++++++-------------------
src/vz/vz_sdk.h | 10 +-
src/vz/vz_utils.c | 204 ++++++++--
src/vz/vz_utils.h | 7 +-
8 files changed, 740 insertions(+), 498 deletions(-)
--
1.8.3.1
8 years, 6 months
[libvirt] [Bug] make check fails when LIBVIRT_DEBUG is defined
by Tomasz Flendrich
Hello everybody,
I am resending this email as I suppose that the previous one
wasn’t accepted due to a big attachment inside. If I create a double post,
please excuse me, I didn’t mean to.
I set up a clean libvirt repo with:
git clone
./autogen.sh
make
and then executed tests with various values of LIBVIRT_DEBUG using
the following command:
LIBVIRT_DEBUG=0…5 VIR_TEST_DEBUG=1 make check
With LIBVIRT_DEBUG=0 (or =5 or probably any invalid value), the logs say:
"Ignoring invalid log level setting”
but still, 10 tests fail due to various reasons.
With LIBVIRT_DEBUG=1, there is a slight difference. The number of tests
that fail is also 10, but here, commandtest fails instead of eventtest.
With LIBVIRT_DEBUG=2, only 9 tests fail, because commandtest passes.
With LIBVIRT_DEBUG=3, only 1 test fails: qemuargv2xmltest. The
reason is the same as in the previous tests.
With LIBVIRT_DEBUG=4, it’s just qemuargv2xmltest that is failing,
but for a different reason than before:
"qemuParseCommandLineString should have logged a warning”.
Links to tests/test-syslog.log, indexed by value of LIBVIRT_DEBUG:
0: http://pastebin.com/bZrDV1K2 <http://pastebin.com/bZrDV1K2>
1: https://gist.github.com/Darge/d180ebdd497573ed633625cf136de73c <https://gist.github.com/Darge/d180ebdd497573ed633625cf136de73c>
2: http://pastebin.com/bhsq1MtC <http://pastebin.com/bhsq1MtC>
3: http://pastebin.com/BSRtR9Rq <http://pastebin.com/BSRtR9Rq>
4: http://pastebin.com/FQn79her <http://pastebin.com/FQn79her>
Perhaps it’s okay that these tests fail, but still there's no harm
in letting people know.
Thank you rbogorodskiy for guidance on the mailing list :)
Have a nice day,
Tomasz
8 years, 6 months