Hello community,

here is the log from the commit of package python-pifpaf for openSUSE:Leap:15.2 
checked in at 2020-03-09 18:10:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-pifpaf (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.python-pifpaf.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pifpaf"

Mon Mar  9 18:10:19 2020 rev:19 rq:776914 version:2.2.2

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/python-pifpaf/python-pifpaf.changes    
2020-01-15 15:51:33.847533275 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.python-pifpaf.new.26092/python-pifpaf.changes 
2020-03-09 18:10:23.281112494 +0100
@@ -1,0 +2,44 @@
+Mon Apr  8 12:05:42 UTC 2019 - Thomas Bechtold <[email protected]>
+
+- Add fdupes
+
+-------------------------------------------------------------------
+Mon Apr  8 12:03:27 UTC 2019 - Thomas Bechtold <[email protected]>
+
+- update to 2.2.2:
+  * postgresql: fix encoding of pgctl path
+  * stdin expecting bytes instead of str
+  * Implements apache qpid-dispatch-router driver
+  * tests: switch to kafka 1.0.2
+  * postgresql: add a --sync/--no-sync option
+  * Update to Mergify v2
+  * gnocchi: fix escape sequence
+  * Remove Python 3.5 support
+  * pep8: disable W503 and W504
+  * Implements apache artemis driver
+
+-------------------------------------------------------------------
+Tue Dec  4 12:51:31 UTC 2018 - Matej Cepl <[email protected]>
+
+- Remove superfluous devel dependency for noarch package
+
+-------------------------------------------------------------------
+Wed Nov 28 14:21:57 UTC 2018 - Dirk Mueller <[email protected]>
+
+- update to 2.1.2:
+  * Setup 2 partitions per topic
+  * pep8: enable flake8-logging-format
+  * fix py3 flake8 error
+  * gnocchi: Don't install outdated version
+  * tests: Remove s3srv testing
+  * ceph: Allow to delete pool
+  * Add .mergify.yml
+
+-------------------------------------------------------------------
+Tue Sep  4 08:04:52 UTC 2018 - [email protected]
+
+- update to 2.1.1
+  * ceph: allow to run luminuous
+  * various small bugfixes
+
+-------------------------------------------------------------------

Old:
----
  pifpaf-2.0.5.tar.gz

New:
----
  pifpaf-2.2.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pifpaf.spec ++++++
--- /var/tmp/diff_new_pack.55JN96/_old  2020-03-09 18:10:23.629112993 +0100
+++ /var/tmp/diff_new_pack.55JN96/_new  2020-03-09 18:10:23.629112993 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pifpaf
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,21 +12,21 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pifpaf
-Version:        2.0.5
+Version:        2.2.2
 Release:        0
 Summary:        Suite of tools and fixtures to manage daemons for testing
 License:        Apache-2.0
 Group:          Development/Languages/Python
 Url:            https://github.com/jd/pifpaf
 Source:         
https://pypi.io/packages/source/p/pifpaf/pifpaf-%{version}.tar.gz
-BuildRequires:  %{python_module devel}
 BuildRequires:  %{python_module pbr}
+BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-Jinja2
 Requires:       python-click
@@ -63,6 +63,7 @@
 export LC_ALL=en_US.utf8
 %python_install
 %python_clone -a %{buildroot}%{_bindir}/pifpaf
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %post
 %python_install_alternative pifpaf
@@ -71,8 +72,8 @@
 %python_uninstall_alternative pifpaf
 
 %files %{python_files}
-%defattr(-,root,root,-)
-%doc AUTHORS ChangeLog LICENSE README.rst
+%license LICENSE
+%doc ChangeLog README.rst
 %{python_sitelib}/*
 %python_alternative %{_bindir}/pifpaf
 

++++++ pifpaf-2.0.5.tar.gz -> pifpaf-2.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/.mergify.yml 
new/pifpaf-2.2.2/.mergify.yml
--- old/pifpaf-2.0.5/.mergify.yml       1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/.mergify.yml       2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,15 @@
+pull_request_rules:
+  - name: automatic merge
+    conditions:
+      - base=master
+      - status-success=continuous-integration/travis-ci/pr
+      - "#approved-reviews-by>=1"
+      - label!=work-in-progress
+    actions:
+      merge:
+        strict: "smart"
+        method: rebase
+  - name: dismiss reviews
+    conditions: []
+    actions:
+      dismiss_reviews: {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/.travis.yml new/pifpaf-2.2.2/.travis.yml
--- old/pifpaf-2.0.5/.travis.yml        2018-02-09 20:55:01.000000000 +0100
+++ new/pifpaf-2.2.2/.travis.yml        2019-01-07 16:58:34.000000000 +0100
@@ -5,27 +5,26 @@
   - pip
 python:
     - 2.7
-    - 3.5
     - 3.6
 before_install:
   # Always redownload tarball
   - find ~/.cache/pip -name '*.dev*' -delete
   - wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key 
add -
-  - echo deb https://download.ceph.com/debian-jewel/ trusty main | sudo tee 
/etc/apt/sources.list.d/ceph.list
+  - echo deb https://download.ceph.com/debian-luminous/ trusty main | sudo tee 
/etc/apt/sources.list.d/ceph.list
   - sudo apt-get -qq update
   - sudo apt-get purge -y mysql-server-5.6 mysql-server-core-5.6 
mysql-client-core-5.6 mysql-client-5.6 postgresql* libpq*
   - sudo rm -rf /var/lib/mysql
   # FIXME(sileht): readd rabbitmq-server when 
https://github.com/travis-ci/travis-cookbooks/issues/964 and 
https://github.com/travis-ci/travis-ci/issues/8906 are fixed
   - sudo apt-get install -y mongodb-server mysql-server-5.5 redis-server 
zookeeper mongodb couchdb couchdb-bin nodejs npm ceph librados-dev python-dev 
gcc liberasurecode-dev liberasurecode1 postgresql libpq-dev
   # - sudo gem install fakes3  # NOTE(sileht): fakes3 looks not installed 
correctly
-  - sudo npm install s3rver -g
+  # - sudo npm install s3rver -g
   - wget https://dl.influxdata.com/influxdb/releases/influxdb_0.13.0_amd64.deb
   - sudo dpkg -i influxdb_0.13.0_amd64.deb
   # zkEnv.sh can't be overriden with the deb version of zookeeper, this 
workaround that
   - sudo chmod 777 /var/log/zookeeper
-  - wget http://www.apache.org/dist/kafka/1.0.0/kafka_2.12-1.0.0.tgz -O 
/opt/kafka.tar.gz
+  - wget http://www.apache.org/dist/kafka/1.0.2/kafka_2.12-1.0.2.tgz -O 
/opt/kafka.tar.gz
   - tar -xzf /opt/kafka.tar.gz -C /opt
-  - ln -s /opt/kafka_2.12-1.0.0 /opt/kafka
+  - ln -s /opt/kafka_2.12-1.0.2 /opt/kafka
 install:
     # The install requirements in travis virtualenv that will be cached
   - pip install tox-travis .[test,ceph]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/AUTHORS new/pifpaf-2.2.2/AUTHORS
--- old/pifpaf-2.0.5/AUTHORS    2018-02-09 21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/AUTHORS    2019-01-07 17:06:04.000000000 +0100
@@ -1,7 +1,7 @@
-Davanum Srinivas <[email protected]>
-Felix Yan <[email protected]>
+Andy Smith <[email protected]>
+David Douard <[email protected]>
 Julien Danjou <[email protected]>
-Mehdi ABAAKOUK <[email protected]>
 Mehdi Abaakouk <[email protected]>
 ajssmith <[email protected]>
 gord chung <[email protected]>
+mergify[bot] <mergify[bot]@users.noreply.github.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/ChangeLog new/pifpaf-2.2.2/ChangeLog
--- old/pifpaf-2.0.5/ChangeLog  2018-02-09 21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/ChangeLog  2019-01-07 17:06:04.000000000 +0100
@@ -1,6 +1,60 @@
 CHANGES
 =======
 
+2.2.2
+-----
+
+* postgresql: fix encoding of pgctl path
+
+2.2.1
+-----
+
+* stdin expecting bytes instead of str
+
+2.2.0
+-----
+
+* Implements apache qpid-dispatch-router driver
+* tests: switch to kafka 1.0.2
+* postgresql: add a --sync/--no-sync option
+* Update to Mergify v2
+* gnocchi: fix escape sequence
+* Remove Python 3.5 support
+* pep8: disable W503 and W504
+* Implements apache artemis driver
+
+2.1.2
+-----
+
+* Setup 2 partitions per topic
+* pep8: enable flake8-logging-format
+* fix py3 flake8 error
+* gnocchi: Don't install outdated version
+* tests: Remove s3srv testing
+* ceph: Allow to delete pool
+* Add .mergify.yml
+
+2.1.1
+-----
+
+* Remove print statement
+
+2.1.0
+-----
+
+* ceph: allow to run luminuous
+
+2.0.7
+-----
+
+* Fix pep8 in test\_cli
+* Fix command not found error in Python 3
+
+2.0.6
+-----
+
+* make gnocchi use given port
+
 2.0.5
 -----
 
@@ -104,78 +158,3 @@
 ------
 
 * Fix process cleanup
-
-1.10.0
-------
-
-* Ensure pifpaf kill all processes
-* Fix compatibility with Redis 4.0
-
-1.9.2
------
-
-* Revert "Ensure pifpaf kill all processes"
-
-1.9.1
------
-
-* Ensure pifpaf kill all processes
-
-1.9.0
------
-
-* Add a new driver for Vault
-
-1.8.1
------
-
-* Fix logging in \_kill
-
-1.8.0
------
-
-* memcached: don't read stdout
-* swift: fix configuration typo
-
-1.7.0
------
-
-* swiftclient default auth to 2.0
-* swift: start a dedicated memcached
-
-1.6.0
------
-
-* Disable elastic search tests
-* Ensure xattr are available for swift
-* swift: check we can upload file
-* Use subprocess to kill process
-
-1.5.2
------
-
-* Fix decorator order
-
-1.5.1
------
-
-* Simplify retry logic
-* Fix retry error catching
-
-1.5.0
------
-
-* Wait 10 seconds processes to end, them kill them
-
-1.4.11
-------
-
-* Revert "gnocchi: use --reuse-port"
-
-1.4.10
-------
-
-* gnocchi: use --reuse-port
-* Do not use concurrency to run tests
-* Fix conflicting port in Gnocchi test
-* Use another port for test\_gnocchi\_with\_redis\_coordinator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/PKG-INFO new/pifpaf-2.2.2/PKG-INFO
--- old/pifpaf-2.0.5/PKG-INFO   2018-02-09 21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/PKG-INFO   2019-01-07 17:06:04.000000000 +0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: pifpaf
-Version: 2.0.5
+Version: 2.2.2
 Summary: Suite of tools and fixtures to manage daemons for testing
 Home-page: https://github.com/jd/pifpaf
 Author: Julien Danjou
 Author-email: [email protected]
 License: UNKNOWN
-Description-Content-Type: UNKNOWN
 Description: ==========
          Pifpaf
         ==========
@@ -178,6 +177,7 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Topic :: Software Development :: Testing
+Provides-Extra: test
+Provides-Extra: gnocchi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/__main__.py 
new/pifpaf-2.2.2/pifpaf/__main__.py
--- old/pifpaf-2.0.5/pifpaf/__main__.py 2018-02-09 20:55:01.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/__main__.py 2019-01-07 16:58:34.000000000 +0100
@@ -64,7 +64,7 @@
         LOG.error("MultipleExceptions raised:")
         for n, (etype, value, tb) in enumerate(valid_excs):
             if debug:
-                LOG.error("- exception %d:" % n)
+                LOG.error("- exception %d:", n)
                 LOG.error("".join(
                     traceback.format_exception(etype, value, tb)))
             else:
@@ -120,7 +120,7 @@
 
 
 @main.command(name="list")
-def list():
+def drivers_list():
     for n in DAEMONS:
         click.echo(n)
 
@@ -197,8 +197,8 @@
                 sys.exit(1)
             except Exception:
                 LOG.error("Unable to start %s, "
-                          "use --debug for more information"
-                          % daemon, exc_info=True)
+                          "use --debug for more information",
+                          daemon, exc_info=True)
                 sys.exit(1)
             pid = os.fork()
             if pid == 0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/__init__.py 
new/pifpaf-2.2.2/pifpaf/drivers/__init__.py
--- old/pifpaf-2.0.5/pifpaf/drivers/__init__.py 2018-02-09 20:55:01.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/__init__.py 2019-01-07 16:58:34.000000000 
+0100
@@ -196,7 +196,7 @@
               path=[], env=None,
               forbidden_line_after_start=None,
               allow_debug=True):
-        LOG.debug("executing: %s" % command)
+        LOG.debug("executing: %s", command)
 
         app = command[0]
 
@@ -237,12 +237,12 @@
             )
         except OSError as e:
             raise RuntimeError(
-                "Unable to run command `%s': %s" % (b" ".join(command), e))
+                "Unable to run command `%s': %s" % (" ".join(command), e))
 
         self.addCleanup(self._kill, c)
 
         if stdin:
-            LOG.debug("%s input: %s" % (app, stdin))
+            LOG.debug("%s input: %s", app, stdin)
             c.stdin.write(stdin)
             c.stdin.close()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/artemis.py 
new/pifpaf-2.2.2/pifpaf/drivers/artemis.py
--- old/pifpaf-2.0.5/pifpaf/drivers/artemis.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/artemis.py  2019-01-07 16:58:34.000000000 
+0100
@@ -0,0 +1,91 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+
+from pifpaf import drivers
+
+
+class ArtemisDriver(drivers.Driver):
+    DEFAULT_PORT = 5673
+    DEFAULT_USERNAME = "pifpaf"
+    DEFAULT_PASSWORD = "secrete"
+
+    def __init__(self, port=DEFAULT_PORT,
+                 username=DEFAULT_USERNAME,
+                 password=DEFAULT_PASSWORD,
+                 require_login=False,
+                 **kwargs):
+        """Create a new Artemis instance."""
+        super(ArtemisDriver, self).__init__(templatedir="artemis",
+                                            **kwargs)
+        self.port = port
+        self.username = username
+        self.password = password
+        self.require_login = require_login
+        self.login = "--require-login" if self.require_login \
+            else "--allow-anonymous"
+        self._path = ["/usr/lib/apache-artemis/bin"]
+
+    @classmethod
+    def get_options(cls):
+        return [
+            {"param_decls": ["--port"],
+             "type": int,
+             "default": cls.DEFAULT_PORT,
+             "help": "port to use for Artemis"},
+            {"param_decls": ["--username"],
+             "default": cls.DEFAULT_USERNAME,
+             "help": "Artemis broker username"},
+            {"param_decls": ["--password"],
+             "default": cls.DEFAULT_PASSWORD,
+             "help": "Artemis broker password"},
+            {"param_decls": ["--require_login"],
+             "is_flag": True,
+             "help": "Disable anonymous users"},
+        ]
+
+    def _setUp(self):
+        super(ArtemisDriver, self)._setUp()
+
+        brokerdir = os.path.join(self.tempdir, "broker")
+        brokerbin = os.path.join(brokerdir, "bin")
+        os.makedirs(brokerdir)
+
+        self._exec(["artemis", "create",
+                    "--user", self.username,
+                    "--password", self.password,
+                    self.login,
+                    brokerdir],
+                   path=self._path,
+                   wait_for_line='You can now start the broker by executing:')
+
+        template_env = {
+            "TMP_DIR": self.tempdir,
+            "PORT": self.port,
+        }
+
+        self.template("broker.xml",
+                      template_env,
+                      os.path.join(brokerdir, "etc/broker.xml"))
+
+        c, _ = self._exec(["%s/artemis" % brokerbin, "run"],
+                          path=self._path,
+                          wait_for_port=self.port)
+
+        self.addCleanup(self._exec, ["%s/artemis" % brokerbin, "stop"],
+                        ignore_failure=True)
+
+        self.putenv("ARTEMIS_PORT", str(self.port))
+        self.putenv("ARTEMIS_URL", "amqp://localhost:%s" % self.port)
+        self.putenv("URL", "amqp://localhost:%s" % self.port)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/ceph.py 
new/pifpaf-2.2.2/pifpaf/drivers/ceph.py
--- old/pifpaf-2.0.5/pifpaf/drivers/ceph.py     2018-02-09 20:55:01.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/ceph.py     2019-01-07 16:58:34.000000000 
+0100
@@ -49,6 +49,22 @@
         os.makedirs(mondir)
         os.makedirs(osddir)
 
+        _, version = self._exec(["ceph", "--version"], stdout=True)
+        version = version.decode("ascii").split()[2]
+        version = pkg_resources.parse_version(version)
+
+        if version < pkg_resources.parse_version("12.0.0"):
+            extra = """
+mon_osd_nearfull_ratio = 1
+mon_osd_full_ratio = 1
+osd_failsafe_nearfull_ratio = 1
+osd_failsafe_full_ratio = 1
+"""
+        else:
+            extra = """
+mon_allow_pool_delete = true
+"""
+
         # FIXME(sileht): check availible space on /dev/shm
         # if os.path.exists("/dev/shm") and os.access('/dev/shm', os.W_OK):
         #     journal_path = "/dev/shm/$cluster-$id-journal"
@@ -89,11 +105,7 @@
 filestore max sync interval = 10001
 filestore min sync interval = 10000
 
-# Don't fail until it's really full
-mon_osd_nearfull_ratio = 1
-mon_osd_full_ratio = 1
-osd_failsafe_nearfull_ratio = 1
-osd_failsafe_full_ratio = 1
+%(extra)s
 
 journal_aio = false
 journal_dio = false
@@ -106,17 +118,14 @@
 [mon.a]
 host = localhost
 mon addr = 127.0.0.1:%(port)d
-""" % dict(fsid=fsid, tempdir=self.tempdir, port=self.port, 
journal_path=journal_path))  # noqa
+""" % dict(fsid=fsid, tempdir=self.tempdir, port=self.port,
+           journal_path=journal_path, extra=extra))  # noqa
 
         ceph_opts = ["ceph", "-c", conffile]
         mon_opts = ["ceph-mon", "-c", conffile, "--id", "a", "-d"]
         osd_opts = ["ceph-osd", "-c", conffile, "--id", "0", "-d",
                     "-m", "127.0.0.1:%d" % self.port]
 
-        _, version = self._exec(ceph_opts + ["--version"], stdout=True)
-        version = version.decode("ascii").split()[2]
-        version = pkg_resources.parse_version(version)
-
         # Create and start monitor
         self._exec(mon_opts + ["--mkfs"])
         self._touch(os.path.join(mondir, "done"))
@@ -135,6 +144,11 @@
             wait_for_line = "done with init"
         osd, _ = self._exec(osd_opts, wait_for_line=wait_for_line)
 
+        if version >= pkg_resources.parse_version("12.0.0"):
+            self._exec(ceph_opts + ["osd", "set-full-ratio", "0.95"])
+            self._exec(ceph_opts + ["osd", "set-backfillfull-ratio", "0.95"])
+            self._exec(ceph_opts + ["osd", "set-nearfull-ratio", "0.95"])
+
         # Wait it's ready
         out = b""
         while b"HEALTH_OK" not in out:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/gnocchi.py 
new/pifpaf-2.2.2/pifpaf/drivers/gnocchi.py
--- old/pifpaf-2.0.5/pifpaf/drivers/gnocchi.py  2018-02-09 20:55:01.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/gnocchi.py  2019-01-07 16:58:34.000000000 
+0100
@@ -163,6 +163,9 @@
             f.write("""[DEFAULT]
 debug = %s
 verbose = True
+[api]
+host = localhost
+port = %s
 [storage]
 driver = %s
 %s
@@ -176,6 +179,7 @@
 project_id = admin
 [indexer]
 url = %s""" % (self.debug,
+               self.port,
                storage_driver,
                storage_config_string,
                statsd_resource_id,
@@ -217,7 +221,7 @@
             args = ["gnocchi-api", "--config-file=%s" % conffile]
 
         c, _ = self._exec(args,
-                          wait_for_line="WSGI app 0 \(mountpoint=''\) ready")
+                          wait_for_line=r"WSGI app 0 \(mountpoint=''\) ready")
         self.addCleanup(self._kill, c)
 
         self.http_url = "http://localhost:%d"; % self.port
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/kafka.py 
new/pifpaf-2.2.2/pifpaf/drivers/kafka.py
--- old/pifpaf-2.0.5/pifpaf/drivers/kafka.py    2018-02-09 20:55:01.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/kafka.py    2019-01-07 16:58:34.000000000 
+0100
@@ -61,7 +61,7 @@
 socket.receive.buffer.bytes=102400
 socket.request.max.bytes=104857600
 log.dirs=%s
-num.partitions=1
+num.partitions=2
 num.recovery.threads.per.data.dir=1
 log.retention.hours=168
 log.segment.bytes=1073741824
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/postgresql.py 
new/pifpaf-2.2.2/pifpaf/drivers/postgresql.py
--- old/pifpaf-2.0.5/pifpaf/drivers/postgresql.py       2018-02-09 
20:55:01.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/postgresql.py       2019-01-07 
16:58:34.000000000 +0100
@@ -20,6 +20,7 @@
 
     DEFAULT_PORT = 9824
     DEFAULT_HOST = ""
+    DEFAULT_SYNC = False
 
     @classmethod
     def get_options(cls):
@@ -31,14 +32,18 @@
             {"param_decls": ["--host"],
              "default": cls.DEFAULT_HOST,
              "help": "host to listen on"},
+            {"param_decls": ["--sync/--no-sync"],
+             "default": cls.DEFAULT_SYNC,
+             "help": "Make pg as fast as possible"},
         ]
 
     def __init__(self, port=DEFAULT_PORT, host=DEFAULT_HOST,
-                 **kwargs):
+                 sync=DEFAULT_SYNC, **kwargs):
         """Create a new PostgreSQL instance."""
         super(PostgreSQLDriver, self).__init__(**kwargs)
         self.port = port
         self.host = host
+        self.sync = sync
 
     def _setUp(self):
         super(PostgreSQLDriver, self)._setUp()
@@ -47,8 +52,14 @@
         self.putenv("PGDATA", self.tempdir, True)
         self.putenv("PGDATABASE", "postgres", True)
         _, pgbindir = self._exec(["pg_config", "--bindir"], stdout=True)
-        pgctl = os.path.join(pgbindir.strip(), b"pg_ctl")
+        pgctl = os.path.join(pgbindir.strip().decode(), "pg_ctl")
         self._exec([pgctl, "-o", "'-A trust'", "initdb"])
+        if not self.sync:
+            cfgfile = os.path.join(self.tempdir, 'postgresql.conf')
+            with open(cfgfile, 'a') as cfg:
+                for key in ('fsync', 'synchronous_commit', 'full_page_writes'):
+                    cfg.write('{} = off\n'.format(key))
+
         self._exec([pgctl, "-w", "-o",
                     "-k %s -p %d -h \"%s\""
                     % (self.tempdir, self.port, self.host),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/drivers/qdrouterd.py 
new/pifpaf-2.2.2/pifpaf/drivers/qdrouterd.py
--- old/pifpaf-2.0.5/pifpaf/drivers/qdrouterd.py        1970-01-01 
01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/qdrouterd.py        2019-01-07 
16:58:34.000000000 +0100
@@ -0,0 +1,117 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+
+from pifpaf import drivers
+
+
+class QdrouterdDriver(drivers.Driver):
+    DEFAULT_PORT = 5672
+    DEFAULT_ARTEMIS_PORT = 5673
+    DEFAULT_USERNAME = "pifpaf"
+    DEFAULT_PASSWORD = "secrete"
+    DEFAULT_DOMAIN = "localhost"
+
+    def __init__(self, port=DEFAULT_PORT,
+                 artemis_port=DEFAULT_ARTEMIS_PORT,
+                 username=DEFAULT_USERNAME,
+                 password=DEFAULT_PASSWORD,
+                 domain=DEFAULT_DOMAIN,
+                 mesh=False,
+                 direct_notify=False,
+                 **kwargs):
+        """Create a new Qdrouterd instance."""
+        super(QdrouterdDriver, self).__init__(templatedir="qdrouterd",
+                                              **kwargs)
+        self.port = port
+        self.artemis_port = artemis_port
+        self.username = username
+        self.password = password
+        self.domain = domain
+        self.mesh = mesh
+        self.direct_notify = direct_notify
+
+    @classmethod
+    def get_options(cls):
+        return [
+            {"param_decls": ["--port"],
+             "type": int,
+             "default": cls.DEFAULT_PORT,
+             "help": "port to use for Qdrouterd"},
+            {"param_decls": ["--artemis_port"],
+             "type": int,
+             "default": cls.DEFAULT_ARTEMIS_PORT,
+             "help": "port to use for broker link"},
+            {"param_decls": ["--mesh"],
+             "is_flag": True,
+             "help": "TODO: Create a 3 HA node mesh"},
+            {"param_decls": ["--direct_notify"],
+             "is_flag": True,
+             "help": "direct message notify and do not attach to broker"},
+            {"param_decls": ["--username"],
+             "default": cls.DEFAULT_USERNAME,
+             "help": "sasl username"},
+            {"param_decls": ["--password"],
+             "default": cls.DEFAULT_PASSWORD,
+             "help": "sasl password"},
+            {"param_decls": ["--domain"],
+             "default": cls.DEFAULT_DOMAIN,
+             "help": "sasl domain"},
+        ]
+
+    def saslpasswd2(self, username, password, sasl_db):
+        self._exec(["saslpasswd2", "-c", "-p", "-f",
+                    sasl_db, username], stdin=password.encode())
+
+    def _setUp(self):
+        super(QdrouterdDriver, self)._setUp()
+
+        # setup log, etc used by qdrouterd
+        logdir = os.path.join(self.tempdir, "log")
+        os.makedirs(logdir)
+        etcdir = os.path.join(self.tempdir, "etc")
+        os.makedirs(etcdir)
+        sasldir = os.path.join(etcdir, "sasl2")
+        os.makedirs(sasldir)
+        logfile = os.path.join(logdir, "qdrouterd.log")
+
+        template_env = {
+            "TMP_DIR": self.tempdir,
+            "PORT": self.port,
+            "ARTEMIS_PORT": self.artemis_port,
+            "SASL_DIR": sasldir,
+            "LOG_FILE": logfile,
+            "DIRECT_NOTIFY": self.direct_notify,
+        }
+
+        qdr_cfg = os.path.join(etcdir, "qdrouterd.conf")
+        self.template("qdrouterd.conf",
+                      template_env,
+                      qdr_cfg)
+
+        sasl_cfg = os.path.join(sasldir, "sasl_qdrouterd.conf")
+        self.template("sasl_qdrouterd.conf",
+                      template_env,
+                      sasl_cfg)
+
+        sasl_db = os.path.join(sasldir, "qdrouterd.sasldb")
+        self.saslpasswd2(self.username, self.password, sasl_db)
+
+        c, _ = self._exec(["qdrouterd", "-c", qdr_cfg],
+                          wait_for_port=self.port)
+
+        self.putenv("QDROUTERD_PORT", str(self.port))
+        self.putenv("QDROUTERD_URL", "amqp://localhost:%s" % self.port)
+        self.putenv("URL", "amqp://%s:%s@localhost:%s" % (
+            self.username, self.password, self.port))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pifpaf-2.0.5/pifpaf/drivers/templates/artemis/broker.xml 
new/pifpaf-2.2.2/pifpaf/drivers/templates/artemis/broker.xml
--- old/pifpaf-2.0.5/pifpaf/drivers/templates/artemis/broker.xml        
1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/templates/artemis/broker.xml        
2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,140 @@
+<?xml version='1.0'?>
+
+<configuration xmlns="urn:activemq"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+               xmlns:xi="http://www.w3.org/2001/XInclude";
+               xsi:schemaLocation="urn:activemq 
/schema/artemis-configuration.xsd">
+
+   <core xmlns="urn:activemq:core" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="urn:activemq:core ">
+
+      <name>0.0.0.0</name>
+
+
+      <persistence-enabled>true</persistence-enabled>
+
+      <journal-type>ASYNCIO</journal-type>
+
+      <paging-directory>data/paging</paging-directory>
+
+      <bindings-directory>data/bindings</bindings-directory>
+
+      <journal-directory>data/journal</journal-directory>
+
+      <large-messages-directory>data/large-messages</large-messages-directory>
+
+      <journal-datasync>true</journal-datasync>
+
+      <journal-min-files>2</journal-min-files>
+
+      <journal-pool-files>10</journal-pool-files>
+
+      <journal-file-size>10M</journal-file-size>
+      
+      <journal-buffer-timeout>52000</journal-buffer-timeout>
+
+      <journal-max-io>4096</journal-max-io>
+
+      <disk-scan-period>5000</disk-scan-period>
+
+      <max-disk-usage>90</max-disk-usage>
+
+      <critical-analyzer>true</critical-analyzer>
+
+      <critical-analyzer-timeout>120000</critical-analyzer-timeout>
+
+      <critical-analyzer-check-period>60000</critical-analyzer-check-period>
+
+      <critical-analyzer-policy>HALT</critical-analyzer-policy>
+
+      <acceptors>
+
+         <!-- Acceptor for every supported protocol -->
+         <acceptor 
name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
+
+         <!-- AMQP Acceptor.  Listens on default AMQP port for AMQP traffic.-->
+         <acceptor name="amqp">tcp://0.0.0.0:{{ PORT 
}}?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor>
+
+         <!-- STOMP Acceptor. -->
+         <acceptor 
name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor>
+
+         <!-- HornetQ Compatibility Acceptor.  Enables HornetQ Core and STOMP 
for legacy HornetQ clients. -->
+         <acceptor 
name="hornetq">tcp://0.0.0.0:5445?anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;protocols=HORNETQ,STOMP;useEpoll=true</acceptor>
+
+         <!-- MQTT Acceptor -->
+         <acceptor 
name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor>
+
+      </acceptors>
+
+
+      <security-settings>
+         <security-setting match="#">
+            <permission type="createNonDurableQueue" roles="amq"/>
+            <permission type="deleteNonDurableQueue" roles="amq"/>
+            <permission type="createDurableQueue" roles="amq"/>
+            <permission type="deleteDurableQueue" roles="amq"/>
+            <permission type="createAddress" roles="amq"/>
+            <permission type="deleteAddress" roles="amq"/>
+            <permission type="consume" roles="amq"/>
+            <permission type="browse" roles="amq"/>
+            <permission type="send" roles="amq"/>
+            <!-- we need this otherwise ./artemis data imp wouldn't work -->
+            <permission type="manage" roles="amq"/>
+         </security-setting>
+      </security-settings>
+
+      <address-settings>
+         <address-setting match="activemq.management#">
+            <dead-letter-address>DLQ</dead-letter-address>
+            <expiry-address>ExpiryQueue</expiry-address>
+            <redelivery-delay>0</redelivery-delay>
+            <max-size-bytes>-1</max-size-bytes>
+            
<message-counter-history-day-limit>10</message-counter-history-day-limit>
+            <address-full-policy>PAGE</address-full-policy>
+            <auto-create-queues>true</auto-create-queues>
+            <auto-create-addresses>true</auto-create-addresses>
+            <auto-create-jms-queues>true</auto-create-jms-queues>
+            <auto-create-jms-topics>true</auto-create-jms-topics>
+         </address-setting>
+
+         <address-setting match="#">
+            <dead-letter-address>DLQ</dead-letter-address>
+            <expiry-address>ExpiryQueue</expiry-address>
+            <redelivery-delay>0</redelivery-delay>
+            <max-size-bytes>-1</max-size-bytes>
+            
<message-counter-history-day-limit>10</message-counter-history-day-limit>
+            <address-full-policy>PAGE</address-full-policy>
+            <auto-create-queues>true</auto-create-queues>
+            <auto-create-addresses>true</auto-create-addresses>
+            <auto-create-jms-queues>true</auto-create-jms-queues>
+            <auto-create-jms-topics>true</auto-create-jms-topics>
+         </address-setting>
+      </address-settings>
+
+      <addresses>
+         <address name="DLQ">
+            <anycast>
+               <queue name="DLQ" />
+            </anycast>
+         </address>
+         <address name="ExpiryQueue">
+            <anycast>
+               <queue name="ExpiryQueue" />
+            </anycast>
+         </address>
+      </addresses>
+
+      <broker-plugins>
+         <broker-plugin 
class-name="org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin">
+            <property key="LOG_ALL_EVENTS" value="true"/>
+            <property key="LOG_CONNECTION_EVENTS" value="true"/>
+            <property key="LOG_SESSION_EVENTS" value="true"/>
+            <property key="LOG_CONSUMER_EVENTS" value="true"/>
+            <property key="LOG_DELIVERING_EVENTS" value="true"/>
+            <property key="LOG_SENDING_EVENTS" value="true"/>
+            <property key="LOG_INTERNAL_EVENTS" value="true"/>
+         </broker-plugin>
+      </broker-plugins>
+
+   </core>
+</configuration>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/broker_om.conf.inc 
new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/broker_om.conf.inc
--- old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/broker_om.conf.inc      
1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/broker_om.conf.inc      
2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,51 @@
+connector {
+    name: broker
+    role: route-container
+    host: 0.0.0.0
+    port: {{ ARTEMIS_PORT }}
+    sasl-mechanisms: ANONYMOUS
+    linkCapacity: 1000
+    stripAnnotations:no
+}
+
+address {
+    prefix: unicast
+    distribution: closest
+}
+
+address {
+    prefix: exclusive
+    distribution: closest
+}
+
+address {
+    prefix: broadcast
+    distribution: multicast
+}
+
+address {
+    prefix: openstack.org/om/rpc/multicast
+    distribution: multicast
+}
+
+address {
+    prefix: openstack.org/om/rpc/unicast
+    distribution: closest
+}
+
+address {
+    prefix: openstack.org/om/rpc/anycast
+    distribution: balanced
+}
+
+linkRoute {
+    prefix: openstack.org/om/notify
+    connection: broker
+    dir: in
+}
+
+linkRoute {
+    prefix: openstack.org/om/notify
+    connection: broker
+    dir: out
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/direct_om.conf.inc 
new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/direct_om.conf.inc
--- old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/direct_om.conf.inc      
1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/direct_om.conf.inc      
2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,44 @@
+address {
+    prefix: unicast
+    distribution: closest
+}
+
+address {
+    prefix: exclusive
+    distribution: closest
+}
+
+address {
+    prefix: broadcast
+    distribution: multicast
+}
+
+address {
+    prefix: openstack.org/om/rpc/multicast
+    distribution: multicast
+}
+
+address {
+    prefix: openstack.org/om/rpc/unicast
+    distribution: closest
+}
+
+address {
+    prefix: openstack.org/om/rpc/anycast
+    distribution: balanced
+}
+
+address {
+    prefix: openstack.org/om/notify/multicast
+    distribution: multicast
+}
+
+address {
+    prefix: openstack.org/om/notify/unicast
+    distribution: closest
+}
+
+address {
+    prefix: openstack.org/om/notify/anycast
+    distribution: balanced
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/qdrouterd.conf 
new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/qdrouterd.conf
--- old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/qdrouterd.conf  
1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/qdrouterd.conf  
2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,28 @@
+router {
+    mode: standalone
+    id: Router.A
+    workerThreads: 4
+    saslConfigPath: {{ SASL_DIR }}
+    saslConfigName: sasl_qdrouterd
+}
+
+listener {
+    host: 0.0.0.0
+    port: {{ PORT }}
+    role: normal
+    sasl-mechanisms: PLAIN ANONYMOUS
+    stripAnnotations: no
+    authenticatePeer: no
+}
+
+{% if DIRECT_NOTIFY %}
+{% include 'direct_om.conf.inc' %}
+{% else %}
+{% include 'broker_om.conf.inc' %}
+{% endif %}
+
+log {
+    module: DEFAULT
+    enable: trace+
+    output: {{ LOG_FILE }}
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/sasl_qdrouterd.conf 
new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/sasl_qdrouterd.conf
--- old/pifpaf-2.0.5/pifpaf/drivers/templates/qdrouterd/sasl_qdrouterd.conf     
1970-01-01 01:00:00.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/drivers/templates/qdrouterd/sasl_qdrouterd.conf     
2019-01-07 16:58:34.000000000 +0100
@@ -0,0 +1,4 @@
+pwcheck_method: auxprop
+auxprop_plugin: sasldb
+sasldb_path: {{ SASL_DIR }}/qdrouterd.sasldb
+mech_list: PLAIN ANONYMOUS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/tests/test_cli.py 
new/pifpaf-2.2.2/pifpaf/tests/test_cli.py
--- old/pifpaf-2.0.5/pifpaf/tests/test_cli.py   2018-02-09 20:55:01.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf/tests/test_cli.py   2019-01-07 16:58:34.000000000 
+0100
@@ -16,6 +16,8 @@
 import subprocess
 from distutils import spawn
 
+import fixtures
+
 import testtools
 
 
@@ -144,3 +146,18 @@
         self.assertEqual(
             b"\"memcached://localhost:11217;memcached://localhost:11218\";",
             env[b"export PIFPAF_URLS"])
+
+    def test_non_existing_command(self):
+        # Keep PATH to just the one set by tox to run pifpaf
+        self.useFixture(fixtures.EnvironmentVariable(
+            "PATH", os.getenv("PATH").split(":")[0]))
+        c = subprocess.Popen(["pifpaf", "run", "memcached"],
+                             bufsize=0,
+                             stderr=subprocess.PIPE,
+                             stdout=subprocess.PIPE)
+        (stdout, stderr) = c.communicate()
+        self.assertEqual(1, c.wait())
+        self.assertIn(
+            b"ERROR [pifpaf] Unable to run command "
+            b"`memcached -p 11212': [Errno 2] No such file or directory",
+            stderr)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf/tests/test_drivers.py 
new/pifpaf-2.2.2/pifpaf/tests/test_drivers.py
--- old/pifpaf-2.0.5/pifpaf/tests/test_drivers.py       2018-02-09 
20:55:01.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf/tests/test_drivers.py       2019-01-07 
16:58:34.000000000 +0100
@@ -30,6 +30,7 @@
 
 from pifpaf import drivers
 from pifpaf.drivers import aodh
+from pifpaf.drivers import artemis
 from pifpaf.drivers import ceph
 from pifpaf.drivers import consul
 from pifpaf.drivers import couchdb
@@ -44,6 +45,7 @@
 from pifpaf.drivers import mongodb
 from pifpaf.drivers import mysql
 from pifpaf.drivers import postgresql
+from pifpaf.drivers import qdrouterd
 from pifpaf.drivers import rabbitmq
 from pifpaf.drivers import redis
 from pifpaf.drivers import s3rver
@@ -244,6 +246,17 @@
             os.getenv("PIFPAF_URL"))
         self._run("psql template1 -c 'CREATE TABLE FOOBAR();'")
 
+    @testtools.skipUnless(spawn.find_executable("pg_config"),
+                          "pg_config not found")
+    def test_postgresql_async(self):
+        port = 9825
+        f = self.useFixture(postgresql.PostgreSQLDriver(port=port, sync=False))
+        self.assertEqual(
+            "postgresql://localhost/postgres?host=%s&port=%d"
+            % (f.tempdir, port),
+            os.getenv("PIFPAF_URL"))
+        self._run("psql template1 -c 'CREATE TABLE FOOBAR();'")
+
     @testtools.skipUnless(spawn.find_executable("redis-server"),
                           "redis-server not found")
     def test_redis(self):
@@ -469,6 +482,27 @@
         r = requests.get("http://localhost:%d/"; % port)
         self.assertEqual(r.json()["couchdb"], "Welcome")
 
+    @testtools.skipUnless(spawn.find_executable("artemis"),
+                          "Artemis not found")
+    def test_artemis(self):
+        self.useFixture(artemis.ArtemisDriver(port=54321))
+        self.assertEqual("amqp://localhost:54321",
+                         os.getenv("PIFPAF_URL"))
+        self.assertEqual("54321", os.getenv("PIFPAF_ARTEMIS_PORT"))
+        self.assertEqual("amqp://localhost:54321",
+                         os.getenv("PIFPAF_ARTEMIS_URL"))
+
+    @testtools.skipUnless(spawn.find_executable("qdrouterd"),
+                          "Qdrouterd not found")
+    def test_qdrouterd(self):
+        a = self.useFixture(qdrouterd.QdrouterdDriver(port=54321))
+        self.assertEqual("amqp://%s:%s@localhost:54321" % (a.username,
+                                                           a.password),
+                         os.getenv("PIFPAF_URL"))
+        self.assertEqual("54321", os.getenv("PIFPAF_QDROUTERD_PORT"))
+        self.assertEqual("amqp://localhost:54321",
+                         os.getenv("PIFPAF_QDROUTERD_URL"))
+
     @testtools.skipUnless(spawn.find_executable("kafka-server-start.sh"),
                           "Kafka not found")
     def test_kafka(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf.egg-info/PKG-INFO 
new/pifpaf-2.2.2/pifpaf.egg-info/PKG-INFO
--- old/pifpaf-2.0.5/pifpaf.egg-info/PKG-INFO   2018-02-09 21:05:38.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf.egg-info/PKG-INFO   2019-01-07 17:06:04.000000000 
+0100
@@ -1,12 +1,11 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
 Name: pifpaf
-Version: 2.0.5
+Version: 2.2.2
 Summary: Suite of tools and fixtures to manage daemons for testing
 Home-page: https://github.com/jd/pifpaf
 Author: Julien Danjou
 Author-email: [email protected]
 License: UNKNOWN
-Description-Content-Type: UNKNOWN
 Description: ==========
          Pifpaf
         ==========
@@ -178,6 +177,7 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Topic :: Software Development :: Testing
+Provides-Extra: test
+Provides-Extra: gnocchi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf.egg-info/SOURCES.txt 
new/pifpaf-2.2.2/pifpaf.egg-info/SOURCES.txt
--- old/pifpaf-2.0.5/pifpaf.egg-info/SOURCES.txt        2018-02-09 
21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf.egg-info/SOURCES.txt        2019-01-07 
17:06:04.000000000 +0100
@@ -1,3 +1,4 @@
+.mergify.yml
 .testr.conf
 .travis.yml
 AUTHORS
@@ -21,6 +22,7 @@
 pifpaf.egg-info/top_level.txt
 pifpaf/drivers/__init__.py
 pifpaf/drivers/aodh.py
+pifpaf/drivers/artemis.py
 pifpaf/drivers/ceph.py
 pifpaf/drivers/consul.py
 pifpaf/drivers/couchdb.py
@@ -35,12 +37,18 @@
 pifpaf/drivers/mongodb.py
 pifpaf/drivers/mysql.py
 pifpaf/drivers/postgresql.py
+pifpaf/drivers/qdrouterd.py
 pifpaf/drivers/rabbitmq.py
 pifpaf/drivers/redis.py
 pifpaf/drivers/s3rver.py
 pifpaf/drivers/swift.py
 pifpaf/drivers/vault.py
 pifpaf/drivers/zookeeper.py
+pifpaf/drivers/templates/artemis/broker.xml
+pifpaf/drivers/templates/qdrouterd/broker_om.conf.inc
+pifpaf/drivers/templates/qdrouterd/direct_om.conf.inc
+pifpaf/drivers/templates/qdrouterd/qdrouterd.conf
+pifpaf/drivers/templates/qdrouterd/sasl_qdrouterd.conf
 pifpaf/drivers/templates/swift/account.conf
 pifpaf/drivers/templates/swift/common.conf.inc
 pifpaf/drivers/templates/swift/container-sync-realms.conf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf.egg-info/entry_points.txt 
new/pifpaf-2.2.2/pifpaf.egg-info/entry_points.txt
--- old/pifpaf-2.0.5/pifpaf.egg-info/entry_points.txt   2018-02-09 
21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/pifpaf.egg-info/entry_points.txt   2019-01-07 
17:06:04.000000000 +0100
@@ -3,6 +3,7 @@
 
 [pifpaf.daemons]
 aodh = pifpaf.drivers.aodh:AodhDriver
+artemis = pifpaf.drivers.artemis:ArtemisDriver
 ceph = pifpaf.drivers.ceph:CephDriver
 consul = pifpaf.drivers.consul:ConsulDriver
 couchdb = pifpaf.drivers.couchdb:CouchDBDriver
@@ -17,6 +18,7 @@
 mongodb = pifpaf.drivers.mongodb:MongoDBDriver
 mysql = pifpaf.drivers.mysql:MySQLDriver
 postgresql = pifpaf.drivers.postgresql:PostgreSQLDriver
+qdrouterd = pifpaf.drivers.qdrouterd:QdrouterdDriver
 rabbitmq = pifpaf.drivers.rabbitmq:RabbitMQDriver
 redis = pifpaf.drivers.redis:RedisDriver
 s3rver = pifpaf.drivers.s3rver:S3rverDriver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/pifpaf.egg-info/pbr.json 
new/pifpaf-2.2.2/pifpaf.egg-info/pbr.json
--- old/pifpaf-2.0.5/pifpaf.egg-info/pbr.json   2018-02-09 21:05:38.000000000 
+0100
+++ new/pifpaf-2.2.2/pifpaf.egg-info/pbr.json   2019-01-07 17:06:04.000000000 
+0100
@@ -1 +1 @@
-{"git_version": "d094170", "is_release": true}
\ No newline at end of file
+{"git_version": "19420b3", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/setup.cfg new/pifpaf-2.2.2/setup.cfg
--- old/pifpaf-2.0.5/setup.cfg  2018-02-09 21:05:38.000000000 +0100
+++ new/pifpaf-2.2.2/setup.cfg  2019-01-07 17:06:04.000000000 +0100
@@ -13,7 +13,6 @@
        Programming Language :: Python :: 2
        Programming Language :: Python :: 2.7
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.5
        Programming Language :: Python :: 3.6
        Topic :: Software Development :: Testing
 
@@ -34,6 +33,7 @@
 [entry_points]
 pifpaf.daemons = 
        aodh = pifpaf.drivers.aodh:AodhDriver
+       artemis = pifpaf.drivers.artemis:ArtemisDriver
        consul = pifpaf.drivers.consul:ConsulDriver
        couchdb = pifpaf.drivers.couchdb:CouchDBDriver
        elasticsearch = pifpaf.drivers.elasticsearch:ElasticsearchDriver
@@ -49,6 +49,7 @@
        mongodb = pifpaf.drivers.mongodb:MongoDBDriver
        mysql = pifpaf.drivers.mysql:MySQLDriver
        postgresql = pifpaf.drivers.postgresql:PostgreSQLDriver
+       qdrouterd = pifpaf.drivers.qdrouterd:QdrouterdDriver
        rabbitmq = pifpaf.drivers.rabbitmq:RabbitMQDriver
        redis = pifpaf.drivers.redis:RedisDriver
        s3rver = pifpaf.drivers.s3rver:S3rverDriver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pifpaf-2.0.5/tox.ini new/pifpaf-2.2.2/tox.ini
--- old/pifpaf-2.0.5/tox.ini    2018-02-09 20:55:01.000000000 +0100
+++ new/pifpaf-2.2.2/tox.ini    2019-01-07 16:58:34.000000000 +0100
@@ -5,7 +5,7 @@
 usedevelop = True
 sitepackages = False
 deps = .[test,ceph,gnocchi]
-       
http://tarballs.openstack.org/gnocchi/gnocchi-master.tar.gz#egg=gnocchi[postgresql,file,ceph,ceph_recommended_lib,s3]
+       gnocchi[postgresql,file,ceph,ceph_recommended_lib,s3]
        
http://tarballs.openstack.org/aodh/aodh-master.tar.gz#egg=aodh[postgresql]
        http://tarballs.openstack.org/swift/swift-master.tar.gz#egg=swift
        python-swiftclient
@@ -29,7 +29,8 @@
 basepython = python3.6
 exclude = .tox,.eggs,doc
 show-source = true
-ignore = D100,D101,D102,D103,D104
+ignore = D100,D101,D102,D103,D104,G200,G201,W503,W504
+enable-extensions=G
 application-import-names = pifpaf
 
 [travis]


Reply via email to