On Thu, Sep 26, 2019 at 1:18 AM Numan Siddique <nusid...@redhat.com> wrote:
> > > On Thu, Sep 26, 2019, 12:12 AM Ben Pfaff <b...@ovn.org> wrote: > >> Numan, please (re-)review this when you have time. >> > > Sure. I will do it tomorrow > This patch has merge conflicts. Can you please rebase it. Thanks Numan > > Thanks > Numan > > >> On Fri, Sep 20, 2019 at 08:44:48AM -0700, Ben Pfaff wrote: >> > Python 2 reaches end-of-life on January 1, 2020, which is only >> > a few months away. This means that OVS needs to stop depending >> > on in the next release that should occur roughly that same time. >> > Therefore, this commit removes all support for Python 2. It >> > also makes Python 3 a mandatory build dependency. >> > >> > Some of the interesting consequences: >> > >> > - HAVE_PYTHON, HAVE_PYTHON2, and HAVE_PYTHON3 conditionals have >> > been removed, since we now know that Python3 is available. >> > >> > - $PYTHON and $PYTHON2 are removed, and $PYTHON3 is always >> > available. >> > >> > - Many tests for Python 2 support have been removed, and the ones >> > that depended on Python 3 now run unconditionally. This allowed >> > several macros in the testsuite to be removed, making the code >> > clearer. This does make some of the changes to the testsuite >> > files large due to indentation level changes. >> > >> > - #! lines for Python now use /usr/bin/python3 instead of >> > /usr/bin/python. >> > >> > - Packaging depends on Python 3 packages. >> > --- >> > v1->v2: Bug fixes. >> > v2->v3: Update RPM spec file for Fedora packaging to delete the >> > Python 2 packaging and to move ovstest into the Python 3 >> > packaging. This is going to break compatibility with older >> > Fedora and RHEL releases that don't have Python 3. I do not >> > know whether this is important, and I don't know how to really >> > avoid it if it is. Comments requested. >> > >> > .cirrus.yml | 3 +- >> > .travis/osx-prepare.sh | 4 +- >> > Documentation/intro/install/fedora.rst | 4 +- >> > Documentation/intro/install/general.rst | 8 +- >> > Documentation/intro/install/netbsd.rst | 10 +- >> > Documentation/intro/install/rhel.rst | 2 +- >> > Documentation/intro/install/windows.rst | 4 +- >> > Documentation/intro/install/xenserver.rst | 4 +- >> > Makefile.am | 12 +- >> > Vagrantfile | 24 +- >> > Vagrantfile-FreeBSD | 2 +- >> > appveyor.yml | 2 +- >> > build-aux/check-structs | 2 +- >> > build-aux/extract-ofp-actions | 2 +- >> > build-aux/extract-ofp-errors | 2 +- >> > build-aux/extract-ofp-fields | 2 +- >> > build-aux/extract-ofp-msgs | 2 +- >> > build-aux/sodepends.py | 2 +- >> > build-aux/soexpand.py | 2 +- >> > build-aux/text2c | 2 +- >> > build-aux/xml2nroff | 2 +- >> > configure.ac | 3 +- >> > debian/.gitignore | 1 + >> > debian/automake.mk | 4 +- >> > debian/control | 35 +- >> > debian/openvswitch-test.install | 2 +- >> > debian/python-openvswitch.install | 1 - >> > ...nvswitch.dirs => python3-openvswitch.dirs} | 0 >> > debian/python3-openvswitch.install | 1 + >> > debian/rules | 2 +- >> > include/openflow/automake.mk | 2 - >> > ipsec/ovs-monitor-ipsec.in | 2 +- >> > m4/openvswitch.m4 | 101 +--- >> > manpages.mk | 6 - >> > ovn/automake.mk | 8 +- >> > ovsdb/ovsdb-dot.in | 2 +- >> > ovsdb/ovsdb-idlc.in | 2 +- >> > python/automake.mk | 9 +- >> > rhel/openvswitch-fedora.spec.in | 45 +- >> > tests/atlocal.in | 42 +- >> > tests/automake.mk | 2 +- >> > tests/check-structs.at | 3 +- >> > tests/checkpatch.at | 17 +- >> > tests/daemon-py.at | 453 ++++++++---------- >> > tests/flowgen.py | 2 +- >> > tests/interface-reconfigure.at | 2 +- >> > tests/json.at | 57 +-- >> > tests/jsonrpc-py.at | 67 +-- >> > tests/library.at | 42 +- >> > tests/ofproto-dpif.at | 10 +- >> > tests/ofproto.at | 4 +- >> > tests/ovs-macros.at | 2 +- >> > tests/ovs-xapi-sync.at | 3 +- >> > tests/ovsdb-data.at | 9 +- >> > tests/ovsdb-idl.at | 188 ++------ >> > tests/ovsdb-macros.at | 52 +- >> > tests/ovsdb-monitor.at | 20 +- >> > tests/reconnect.at | 13 +- >> > tests/system-common-macros.at | 2 +- >> > tests/system-kmod-macros.at | 3 +- >> > tests/system-traffic.at | 16 +- >> > tests/system-userspace-macros.at | 4 +- >> > tests/unixctl-py.at | 208 ++++---- >> > tests/vlog.at | 219 ++++----- >> > utilities/automake.mk | 5 +- >> > utilities/bugtool/automake.mk | 2 - >> > utilities/bugtool/ovs-bugtool.in | 2 +- >> > utilities/checkpatch.py | 2 +- >> > utilities/ovs-check-dead-ifs.in | 2 +- >> > utilities/ovs-dpctl-top.in | 2 +- >> > utilities/ovs-l3ping.in | 2 +- >> > utilities/ovs-parse-backtrace.in | 2 +- >> > utilities/ovs-pcap.in | 2 +- >> > utilities/ovs-tcpdump.in | 2 +- >> > utilities/ovs-tcpundump.in | 2 +- >> > utilities/ovs-test.in | 2 +- >> > utilities/ovs-vlan-test.in | 2 +- >> > vswitchd/automake.mk | 4 +- >> > vtep/automake.mk | 4 +- >> > vtep/ovs-vtep.in | 2 +- >> > 80 files changed, 651 insertions(+), 1151 deletions(-) >> > delete mode 100644 debian/python-openvswitch.install >> > rename debian/{python-openvswitch.dirs => python3-openvswitch.dirs} >> (100%) >> > create mode 100644 debian/python3-openvswitch.install >> > >> > diff --git a/.cirrus.yml b/.cirrus.yml >> > index eb6af0a719c8..bae5a089b248 100644 >> > --- a/.cirrus.yml >> > +++ b/.cirrus.yml >> > @@ -9,8 +9,7 @@ freebsd_build_task: >> > >> > env: >> > DEPENDENCIES: automake libtool gmake gcc wget openssl >> > - python py27-six py27-sphinx py27-openssl >> > - python3 py36-six py36-openssl >> > + python3 py36-six py36-openssl p36-sphinx >> > matrix: >> > COMPILER: gcc >> > COMPILER: clang >> > diff --git a/.travis/osx-prepare.sh b/.travis/osx-prepare.sh >> > index 58ccb67cddbd..78d5bb579217 100755 >> > --- a/.travis/osx-prepare.sh >> > +++ b/.travis/osx-prepare.sh >> > @@ -1,4 +1,4 @@ >> > #!/bin/bash >> > set -ev >> > -pip2 install --user six >> > -pip2 install --user --upgrade docutils >> > +pip3 install --user six >> > +pip3 install --user --upgrade docutils >> > diff --git a/Documentation/intro/install/fedora.rst >> b/Documentation/intro/install/fedora.rst >> > index f11d05a01041..6fe1fb5b2468 100644 >> > --- a/Documentation/intro/install/fedora.rst >> > +++ b/Documentation/intro/install/fedora.rst >> > @@ -102,7 +102,7 @@ in which `./configure` was executed: >> > >> > $ make rpm-fedora >> > >> > -This will create the RPMs `openvswitch`, `python-openvswitch`, >> > +This will create the RPMs `openvswitch`, `python3-openvswitch`, >> > `openvswitch-test`, `openvswitch-devel` and `openvswitch-debuginfo`. >> > >> > To enable DPDK support in the openvswitch package, the ``--with dpdk`` >> option >> > @@ -151,7 +151,7 @@ Refer to the :doc:`/faq/index` for more information >> about the various Open >> > vSwitch datapath options. >> > >> > In most cases only the `openvswitch` RPM will need to be installed. The >> > -`python-openvswitch`, `openvswitch-test`, `openvswitch-devel`, and >> > +`python3-openvswitch`, `openvswitch-test`, `openvswitch-devel`, and >> > `openvswitch-debuginfo` RPMs are optional unless required for a >> specific >> > purpose. >> > >> > diff --git a/Documentation/intro/install/general.rst >> b/Documentation/intro/install/general.rst >> > index b03d70f6fa6e..e62501be7fc1 100644 >> > --- a/Documentation/intro/install/general.rst >> > +++ b/Documentation/intro/install/general.rst >> > @@ -90,8 +90,8 @@ need the following software: >> > If libcap-ng is installed, then Open vSwitch will automatically >> build with >> > support for it. >> > >> > -- Python 2.7. You must also have the Python ``six`` library version >> 1.4.0 >> > - or later. >> > +- Python 3.4 or later. You must also have the Python ``six`` library >> > + version 1.4.0 or later. >> > >> > - Unbound library, from http://www.unbound.net, is optional but >> recommended if >> > you want to enable ovs-vswitchd and other utilities to use DNS names >> when >> > @@ -203,8 +203,8 @@ simply install and run Open vSwitch you require the >> following software: >> > from iproute2 (part of all major distributions and available at >> > https://wiki.linuxfoundation.org/networking/iproute2). >> > >> > -- Python 2.7. You must also have the Python six library version 1.4.0 >> > - or later. >> > +- Python 3.4 or later. You must also have the Python six library >> > + version 1.4.0 or later. >> > >> > On Linux you should ensure that ``/dev/urandom`` exists. To support TAP >> > devices, you must also ensure that ``/dev/net/tun`` exists. >> > diff --git a/Documentation/intro/install/netbsd.rst >> b/Documentation/intro/install/netbsd.rst >> > index 7eb7f0cebbaf..4f60dad869b6 100644 >> > --- a/Documentation/intro/install/netbsd.rst >> > +++ b/Documentation/intro/install/netbsd.rst >> > @@ -31,20 +31,18 @@ you need at least the following packages. >> > - automake >> > - libtool-base >> > - gmake >> > -- python27 >> > -- py27-six >> > -- py27-xml >> > +- python37 >> > +- py37-six >> > >> > Some components have additional requirements. Refer to :doc:`general` >> for more >> > information. >> > >> > -Assuming you are running NetBSD/amd64 6.1.2, you can download and >> install >> > +Assuming you are running NetBSD/amd64 7.0.2, you can download and >> install >> > pre-built binary packages as the following:: >> > >> > $ PKG_PATH= >> http://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/7.0.2/All/ >> > $ export PKG_PATH >> > - $ pkg_add automake libtool-base gmake python27 py27-six py27-xml \ >> > - pkg_alternatives >> > + $ pkg_add automake libtool-base gmake python37 py37-six >> pkg_alternatives >> > >> > .. note:: >> > You might get some warnings about minor version mismatch. These can >> be safely >> > diff --git a/Documentation/intro/install/rhel.rst >> b/Documentation/intro/install/rhel.rst >> > index 0e5ca2743ef5..17b3bc26f11d 100644 >> > --- a/Documentation/intro/install/rhel.rst >> > +++ b/Documentation/intro/install/rhel.rst >> > @@ -92,7 +92,7 @@ Once that is completed, remove the file >> ``/tmp/ovs.spec``. >> > If python3-sphinx package is not available in your version of RHEL, >> you can >> > install it via pip with 'pip install sphinx'. >> > >> > -Open vSwitch requires python 2.7 or newer which is not available in >> older >> > +Open vSwitch requires python 3.4 or newer which is not available in >> older >> > distributions. In the case of RHEL 6.x and its derivatives, one option >> is >> > to install python34 and python34-six from `EPEL`_. >> > >> > diff --git a/Documentation/intro/install/windows.rst >> b/Documentation/intro/install/windows.rst >> > index f696d2c9b621..019e83e64425 100644 >> > --- a/Documentation/intro/install/windows.rst >> > +++ b/Documentation/intro/install/windows.rst >> > @@ -56,9 +56,9 @@ The following explains the steps in some detail. >> > >> > 'C:/MinGW /mingw'. >> > >> > -- Python >> > +- Python 3.4 or later. >> > >> > - Install the latest Python 2.x from python.org and verify that its >> path is >> > + Install the latest Python 3.x from python.org and verify that its >> path is >> > part of Windows' PATH environment variable. >> > We require that you have Python six and pypiwin32 libraries >> installed. >> > The libraries can be installed via pip command: >> > diff --git a/Documentation/intro/install/xenserver.rst >> b/Documentation/intro/install/xenserver.rst >> > index c0f5e3156697..366e11ac27ad 100644 >> > --- a/Documentation/intro/install/xenserver.rst >> > +++ b/Documentation/intro/install/xenserver.rst >> > @@ -30,8 +30,8 @@ XenServer host. If you want to install Open vSwitch >> on a generic Linux or BSD >> > host, refer to :doc:`general` instead. >> > >> > Open vSwitch should work with XenServer 5.6.100 and later. However, >> Open >> > -vSwitch requires Python 2.7 or later, so using Open vSwitch with >> XenServer 6.5 >> > -or earlier requires installing Python 2.7. >> > +vSwitch requires Python 3.4 or later, so using Open vSwitch with >> XenServer 6.5 >> > +or earlier requires installing Python 3.x. >> > >> > Building >> > -------- >> > diff --git a/Makefile.am b/Makefile.am >> > index ff1f94b4841f..6030cdb495d6 100644 >> > --- a/Makefile.am >> > +++ b/Makefile.am >> > @@ -60,7 +60,7 @@ endif >> > # foo/__init__.pyc will cause Python to ignore foo.py. >> > run_python = \ >> > PYTHONPATH=$(top_srcdir)/python$(psep)$$PYTHONPATH \ >> > - PYTHONDONTWRITEBYTECODE=yes $(PYTHON) >> > + PYTHONDONTWRITEBYTECODE=yes $(PYTHON3) >> > >> > ALL_LOCAL = >> > BUILT_SOURCES = >> > @@ -147,13 +147,13 @@ ro_shell = printf '\043 Generated automatically >> -- do not modify! -*- buffer- >> > >> > SUFFIXES += .in >> > .in: >> > - $(AM_V_GEN)PYTHONPATH=$$PYTHONPATH$(psep)$(srcdir)/python >> $(PYTHON) $(srcdir)/build-aux/soexpand.py -I$(srcdir) < $< | \ >> > - $(PYTHON) $(srcdir)/build-aux/dpdkstrip.py $(DPDKSTRIP_FLAGS) | >> \ >> > + $(AM_V_GEN)PYTHONPATH=$$PYTHONPATH$(psep)$(srcdir)/python >> $(PYTHON3) $(srcdir)/build-aux/soexpand.py -I$(srcdir) < $< | \ >> > + $(PYTHON3) $(srcdir)/build-aux/dpdkstrip.py $(DPDKSTRIP_FLAGS) >> | \ >> > sed \ >> > -e 's,[@]PKIDIR[@],$(PKIDIR),g' \ >> > -e 's,[@]LOGDIR[@],$(LOGDIR),g' \ >> > -e 's,[@]DBDIR[@],$(DBDIR),g' \ >> > - -e 's,[@]PYTHON[@],$(PYTHON),g' \ >> > + -e 's,[@]PYTHON3[@],$(PYTHON3),g' \ >> > -e 's,[@]RUNDIR[@],$(RUNDIR),g' \ >> > -e 's,[@]VERSION[@],$(VERSION),g' \ >> > -e 's,[@]localstatedir[@],$(localstatedir),g' \ >> > @@ -177,7 +177,7 @@ SUFFIXES += .xml >> > PKIDIR='$(PKIDIR)' \ >> > LOGDIR='$(LOGDIR)' \ >> > DBDIR='$(DBDIR)' \ >> > - PYTHON='$(PYTHON)' \ >> > + PYTHON3='$(PYTHON3)' \ >> > RUNDIR='$(RUNDIR)' \ >> > VERSION='$(VERSION)' \ >> > localstatedir='$(localstatedir)' \ >> > @@ -414,7 +414,7 @@ CLEANFILES += flake8-check >> > >> > include $(srcdir)/manpages.mk >> > $(srcdir)/manpages.mk: $(MAN_ROOTS) build-aux/sodepends.py >> python/build/soutil.py >> > - @PYTHONPATH=$$PYTHONPATH$(psep)$(srcdir)/python $(PYTHON) >> $(srcdir)/build-aux/sodepends.py -I. -I$(srcdir) $(MAN_ROOTS) >$(@F).tmp >> > + @PYTHONPATH=$$PYTHONPATH$(psep)$(srcdir)/python $(PYTHON3) >> $(srcdir)/build-aux/sodepends.py -I. -I$(srcdir) $(MAN_ROOTS) >$(@F).tmp >> > @if cmp -s $(@F).tmp $@; then \ >> > touch $@; \ >> > rm -f $(@F).tmp; \ >> > diff --git a/Vagrantfile b/Vagrantfile >> > index fbd772a1bec5..236e3a7bdcb7 100644 >> > --- a/Vagrantfile >> > +++ b/Vagrantfile >> > @@ -8,12 +8,14 @@ Vagrant.require_version ">=1.7.0" >> > $bootstrap_fedora = <<SCRIPT >> > dnf -y update >> > dnf -y install autoconf automake openssl-devel libtool \ >> > - python-devel python3-devel \ >> > - python-twisted python-zope-interface \ >> > + python3-devel \ >> > + python3-twisted python3-zope-interface \ >> > desktop-file-utils groff graphviz rpmdevtools nc curl \ >> > - wget python-six pyftpdlib checkpolicy >> selinux-policy-devel \ >> > - libcap-ng-devel kernel-devel-`uname -r` ethtool >> python-tftpy \ >> > + wget python3-six python3-pyftpdlib checkpolicy \ >> > + selinux-policy-devel \ >> > + libcap-ng-devel kernel-devel-`uname -r` ethtool >> python3-pip \ >> > lftp >> > +pip-3 install tftpy # Not yet available for Python3 via >> dnf. >> > echo "search extra update built-in" >/etc/depmod.d/search_path.conf >> > SCRIPT >> > >> > @@ -24,21 +26,23 @@ aptitude -y install -R \ >> > build-essential dpkg-dev lintian devscripts fakeroot \ >> > debhelper dh-autoreconf uuid-runtime \ >> > autoconf automake libtool \ >> > - python-all python-twisted-core python-twisted-conch \ >> > + python3-all python3-twisted-core python3-twisted-conch >> \ >> > xdg-utils groff graphviz netcat curl \ >> > - wget python-six ethtool \ >> > - libcap-ng-dev libssl-dev python-dev openssl \ >> > - python-pyftpdlib python-flake8 python-tftpy \ >> > + wget python3-six ethtool \ >> > + libcap-ng-dev libssl-dev python3-dev openssl \ >> > + python3-pyftpdlib python3-flake8 \ >> > linux-headers-`uname -r` \ >> > lftp >> > +pip-3 install tftpy # Not yet available for Python3 via >> apt. >> > SCRIPT >> > >> > $bootstrap_centos = <<SCRIPT >> > yum -y update >> > yum -y install autoconf automake openssl-devel libtool \ >> > - python-twisted-core python-zope-interface \ >> > + python3-twisted-core python3-zope-interface \ >> > desktop-file-utils groff graphviz rpmdevtools nc curl \ >> > - wget python-six pyftpdlib checkpolicy >> selinux-policy-devel \ >> > + wget python3-six python3-pyftpdlib checkpolicy \ >> > + selinux-policy-devel \ >> > libcap-ng-devel kernel-devel-`uname -r` ethtool >> net-tools \ >> > lftp >> > SCRIPT >> > diff --git a/Vagrantfile-FreeBSD b/Vagrantfile-FreeBSD >> > index 52599eefaebe..d978faa1c2fe 100644 >> > --- a/Vagrantfile-FreeBSD >> > +++ b/Vagrantfile-FreeBSD >> > @@ -12,7 +12,7 @@ Vagrant.require_version ">=1.7.0" >> > $bootstrap_freebsd = <<SCRIPT >> > sed -e 's/\#DEFAULT_ALWAYS_YES = false/DEFAULT_ALWAYS_YES = true/g' >> -e 's/\#ASSUME_ALWAYS_YES = false/ASSUME_ALWAYS_YES = true/g' >> /usr/local/etc/pkg.conf > /tmp/pkg.conf >> > mv -f /tmp/pkg.conf /usr/local/etc/pkg.conf >> > -pkg install automake libtool wget python py27-six gmake lftp >> > +pkg install automake libtool wget py37 py37-six gmake lftp >> > SCRIPT >> > >> > $configure_ovs = <<SCRIPT >> > diff --git a/appveyor.yml b/appveyor.yml >> > index 2e5c37a37adc..b301227445d0 100644 >> > --- a/appveyor.yml >> > +++ b/appveyor.yml >> > @@ -33,7 +33,7 @@ init: >> > >> > cd C:\openvswitch >> > >> > - python -m pip install six pypiwin32 --disable-pip-version-check >> > + python3 -m pip install six pypiwin32 --disable-pip-version-check >> > >> > build_script: >> > - '"C:\Program Files (x86)\Microsoft Visual Studio >> 12.0\Common7\Tools\VsDevCmd"' >> > diff --git a/build-aux/check-structs b/build-aux/check-structs >> > index 37ffa06b3ab3..2c088b446943 100755 >> > --- a/build-aux/check-structs >> > +++ b/build-aux/check-structs >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import os.path >> > import sys >> > diff --git a/build-aux/extract-ofp-actions >> b/build-aux/extract-ofp-actions >> > index 64de0f31f4a0..2d1dbe70973f 100755 >> > --- a/build-aux/extract-ofp-actions >> > +++ b/build-aux/extract-ofp-actions >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import getopt >> > import sys >> > diff --git a/build-aux/extract-ofp-errors b/build-aux/extract-ofp-errors >> > index 03f40ea3e4c2..2c3fbfc881b1 100755 >> > --- a/build-aux/extract-ofp-errors >> > +++ b/build-aux/extract-ofp-errors >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import sys >> > import os.path >> > diff --git a/build-aux/extract-ofp-fields b/build-aux/extract-ofp-fields >> > index 7a4e8e170171..8766995d9ab1 100755 >> > --- a/build-aux/extract-ofp-fields >> > +++ b/build-aux/extract-ofp-fields >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import getopt >> > import sys >> > diff --git a/build-aux/extract-ofp-msgs b/build-aux/extract-ofp-msgs >> > index 3d50724aebd3..6b3295cf64c2 100755 >> > --- a/build-aux/extract-ofp-msgs >> > +++ b/build-aux/extract-ofp-msgs >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import sys >> > import os.path >> > diff --git a/build-aux/sodepends.py b/build-aux/sodepends.py >> > index 90cfaa0f7fb4..45812bcbd700 100755 >> > --- a/build-aux/sodepends.py >> > +++ b/build-aux/sodepends.py >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/env python >> > +#! /usr/bin/env python3 >> > >> > # Copyright (c) 2008, 2011, 2017 Nicira, Inc. >> > # >> > diff --git a/build-aux/soexpand.py b/build-aux/soexpand.py >> > index 53ca640739fe..00adcf47a356 100755 >> > --- a/build-aux/soexpand.py >> > +++ b/build-aux/soexpand.py >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/env python >> > +#! /usr/bin/env python3 >> > >> > # Copyright (c) 2008, 2017 Nicira, Inc. >> > # >> > diff --git a/build-aux/text2c b/build-aux/text2c >> > index cb1f256f1775..dca58648b90c 100755 >> > --- a/build-aux/text2c >> > +++ b/build-aux/text2c >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > import re >> > import sys >> > diff --git a/build-aux/xml2nroff b/build-aux/xml2nroff >> > index bd4e87928e4f..ee5553f4564e 100755 >> > --- a/build-aux/xml2nroff >> > +++ b/build-aux/xml2nroff >> > @@ -1,4 +1,4 @@ >> > -#! /usr/bin/python >> > +#! /usr/bin/python3 >> > >> > # Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc. >> > # >> > diff --git a/configure.ac b/configure.ac >> > index 1d45c4fdd153..afd1e83450eb 100644 >> > --- a/configure.ac >> > +++ b/configure.ac >> > @@ -92,9 +92,8 @@ OVS_CHECK_NETLINK >> > OVS_CHECK_OPENSSL >> > OVS_CHECK_LIBCAPNG >> > OVS_CHECK_LOGDIR >> > -OVS_CHECK_PYTHON2 >> > OVS_CHECK_PYTHON3 >> > -OVS_CHECK_PYTHON >> > +OVS_CHECK_SIX >> > OVS_CHECK_FLAKE8 >> > OVS_CHECK_SPHINX >> > OVS_CHECK_DOT >> > diff --git a/debian/.gitignore b/debian/.gitignore >> > index 441a8ffb702d..d02526b21fa7 100644 >> > --- a/debian/.gitignore >> > +++ b/debian/.gitignore >> > @@ -23,4 +23,5 @@ >> > /openvswitch-testcontroller >> > /openvswitch-vtep >> > /python-openvswitch >> > +/python3-openvswitch >> > /tmp >> > diff --git a/debian/automake.mk b/debian/automake.mk >> > index 03a1d68c2635..37b1a243390c 100644 >> > --- a/debian/automake.mk >> > +++ b/debian/automake.mk >> > @@ -52,8 +52,8 @@ EXTRA_DIST += \ >> > debian/openvswitch-vtep.init \ >> > debian/openvswitch-vtep.install \ >> > debian/openvswitch-vtep.manpages \ >> > - debian/python-openvswitch.dirs \ >> > - debian/python-openvswitch.install \ >> > + debian/python3-openvswitch.dirs \ >> > + debian/python3-openvswitch.install \ >> > debian/rules \ >> > debian/rules.modules \ >> > debian/ifupdown.sh \ >> > diff --git a/debian/control b/debian/control >> > index 2ad35f2cea6f..ad4b187860f3 100644 >> > --- a/debian/control >> > +++ b/debian/control >> > @@ -13,10 +13,10 @@ Build-Depends: graphviz, >> > libtool, >> > openssl, >> > procps, >> > - python-all (>= 2.7), >> > - python-twisted-conch, >> > - python-zopeinterface, >> > - python-six, >> > + python3-all, >> > + python3-twisted-conch, >> > + python3-zopeinterface, >> > + python3-six, >> > libunbound-dev >> > Standards-Version: 3.9.3 >> > Homepage: http://openvswitch.org/ >> > @@ -41,7 +41,7 @@ Description: Open vSwitch datapath module source - >> module-assistant version >> > >> > Package: openvswitch-datapath-dkms >> > Architecture: all >> > -Depends: dkms (>= 1.95), libc6-dev, libelf-dev, make, ${misc:Depends}, >> ${python:Depends} >> > +Depends: dkms (>= 1.95), libc6-dev, libelf-dev, make, ${misc:Depends}, >> ${python3:Depends} >> > Description: Open vSwitch datapath module source - DKMS version >> > Open vSwitch is a production quality, multilayer, software-based, >> > Ethernet virtual switch. It is designed to enable massive network >> > @@ -58,8 +58,8 @@ Description: Open vSwitch datapath module source - >> DKMS version >> > Package: openvswitch-common >> > Architecture: linux-any >> > Multi-Arch: foreign >> > -Depends: python (>= 2.7), >> > - python-six, >> > +Depends: python3, >> > + python3-six, >> > libopenvswitch (= ${binary:Version}), >> > ${misc:Depends}, >> > ${shlibs:Depends} >> > @@ -102,10 +102,9 @@ Depends: kmod | module-init-tools, >> > netbase, >> > openvswitch-common (= ${binary:Version}), >> > procps, >> > - python-argparse, >> > uuid-runtime, >> > ${misc:Depends}, >> > - ${python:Depends}, >> > + ${python3:Depends}, >> > ${shlibs:Depends} >> > Description: Open vSwitch switch implementations >> > Open vSwitch is a production quality, multilayer, software-based, >> > @@ -171,10 +170,10 @@ Description: Debug symbols for Open vSwitch >> packages >> > packages. Install it to debug one of them or to examine a core dump >> > produced by one of them. >> > >> > -Package: python-openvswitch >> > +Package: python3-openvswitch >> > Architecture: all >> > Section: python >> > -Depends: ${misc:Depends}, ${python:Depends}, python-six >> > +Depends: ${misc:Depends}, ${python3:Depends}, python3-six >> > Description: Python bindings for Open vSwitch >> > Open vSwitch is a production quality, multilayer, software-based, >> > Ethernet virtual switch. It is designed to enable massive network >> > @@ -188,10 +187,10 @@ Description: Python bindings for Open vSwitch >> > >> > Package: openvswitch-test >> > Architecture: all >> > -Depends: python (>= 2.7) | python-argparse, >> > - python-twisted-web, >> > +Depends: python3, >> > + python3-twisted-web, >> > ${misc:Depends}, >> > - ${python:Depends} >> > + ${python3:Depends} >> > Description: Open vSwitch test package >> > Open vSwitch is a production quality, multilayer, software-based, >> > Ethernet virtual switch. It is designed to enable massive network >> > @@ -208,8 +207,8 @@ Package: openvswitch-vtep >> > Architecture: linux-any >> > Depends: openvswitch-common (>= ${binary:Version}), >> > openvswitch-switch (>= ${binary:Version}), >> > - python, >> > - python-openvswitch (>= ${source:Version}), >> > + python3, >> > + python3-openvswitch (>= ${source:Version}), >> > ${misc:Depends}, >> > ${shlibs:Depends} >> > Description: Open vSwitch VTEP utilities >> > @@ -250,8 +249,8 @@ Architecture: linux-any >> > Depends: iproute2, >> > openvswitch-common (= ${binary:Version}), >> > openvswitch-switch (= ${binary:Version}), >> > - python, >> > - python-openvswitch (= ${source:Version}), >> > + python3, >> > + python3-openvswitch (= ${source:Version}), >> > strongswan, >> > ${misc:Depends}, >> > ${shlibs:Depends} >> > diff --git a/debian/openvswitch-test.install >> b/debian/openvswitch-test.install >> > index 8a01a51259b7..cb371c906d94 100644 >> > --- a/debian/openvswitch-test.install >> > +++ b/debian/openvswitch-test.install >> > @@ -1,3 +1,3 @@ >> > usr/bin/ovs-l3ping >> > usr/bin/ovs-test >> > -usr/share/openvswitch/python/ovstest usr/lib/python2.7/dist-packages/ >> > +usr/share/openvswitch/python/ovstest usr/lib/python3.7/dist-packages/ >> > diff --git a/debian/python-openvswitch.install >> b/debian/python-openvswitch.install >> > deleted file mode 100644 >> > index 0472d413f627..000000000000 >> > --- a/debian/python-openvswitch.install >> > +++ /dev/null >> > @@ -1 +0,0 @@ >> > -usr/share/openvswitch/python/ovs usr/lib/python2.7/dist-packages/ >> > diff --git a/debian/python-openvswitch.dirs >> b/debian/python3-openvswitch.dirs >> > similarity index 100% >> > rename from debian/python-openvswitch.dirs >> > rename to debian/python3-openvswitch.dirs >> > diff --git a/debian/python3-openvswitch.install >> b/debian/python3-openvswitch.install >> > new file mode 100644 >> > index 000000000000..7ba956e3be63 >> > --- /dev/null >> > +++ b/debian/python3-openvswitch.install >> > @@ -0,0 +1 @@ >> > +usr/share/openvswitch/python/ovs usr/lib/python3.7/dist-packages/ >> > diff --git a/debian/rules b/debian/rules >> > index 77f3a19841e5..4dc05c39ba6c 100755 >> > --- a/debian/rules >> > +++ b/debian/rules >> > @@ -22,7 +22,7 @@ PARALLEL = >> > endif >> > >> > %: >> > - dh $@ --with autoreconf,python2 --parallel >> > + dh $@ --with autoreconf,python3 --parallel >> > >> > # use --as-needed only if supported by dh-autoreconf (to simplify >> backporting) >> > DH_AS_NEEDED=$(shell dpkg --compare-versions $$(dpkg --status >> dh-autoreconf | grep Version | cut -d' ' -f2) ge 6 && echo --as-needed) >> > diff --git a/include/openflow/automake.mk b/include/openflow/ >> automake.mk >> > index 18cc649899f8..a1d75756c9d7 100644 >> > --- a/include/openflow/automake.mk >> > +++ b/include/openflow/automake.mk >> > @@ -12,7 +12,6 @@ openflowinclude_HEADERS = \ >> > include/openflow/openflow-common.h \ >> > include/openflow/openflow.h >> > >> > -if HAVE_PYTHON >> > SUFFIXES += .h .hstamp >> > >> > .h.hstamp: >> > @@ -23,7 +22,6 @@ HSTAMP_FILES = $(openflowinclude_HEADERS:.h=.hstamp) >> > CLEANFILES += $(HSTAMP_FILES) >> > ALL_LOCAL += $(HSTAMP_FILES) >> > $(HSTAMP_FILES): build-aux/check-structs $(openflowinclude_HEADERS) >> > -endif >> > >> > EXTRA_DIST += build-aux/check-structs >> > >> > diff --git a/ipsec/ovs-monitor-ipsec.in b/ipsec/ovs-monitor-ipsec.in >> > index 4710be039ac7..37e370324562 100755 >> > --- a/ipsec/ovs-monitor-ipsec.in >> > +++ b/ipsec/ovs-monitor-ipsec.in >> > @@ -1,4 +1,4 @@ >> > -#! @PYTHON@ >> > +#! @PYTHON3@ >> > # Copyright (c) 2017 Nicira, Inc. >> > # >> > # Licensed under the Apache License, Version 2.0 (the "License"); >> > diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 >> > index 4379d16b4203..78d70fb4e17e 100644 >> > --- a/m4/openvswitch.m4 >> > +++ b/m4/openvswitch.m4 >> > @@ -354,57 +354,16 @@ dnl Checks for valgrind/valgrind.h. >> > AC_DEFUN([OVS_CHECK_VALGRIND], >> > [AC_CHECK_HEADERS([valgrind/valgrind.h])]) >> > >> > -dnl Checks for Python 2.x, x >= 7. >> > -AC_DEFUN([OVS_CHECK_PYTHON2], >> > - [AC_CACHE_CHECK( >> > - [for Python 2.x for x >= 7], >> > - [ovs_cv_python2], >> > - [if test -n "$PYTHON2"; then >> > - ovs_cv_python2=$PYTHON2 >> > - else >> > - ovs_cv_python2=no >> > - for binary in python2 python2.7 python; do >> > - ovs_save_IFS=$IFS; IFS=$PATH_SEPARATOR >> > - for dir in $PATH; do >> > - IFS=$ovs_save_IFS >> > - test -z "$dir" && dir=. >> > - if test -x "$dir"/"$binary" && "$dir"/"$binary" -c 'import >> sys >> > -if sys.hexversion >= 0x02070000 and sys.hexversion < 0x03000000: >> > - sys.exit(0) >> > -else: >> > - sys.exit(1)'; then >> > - ovs_cv_python2=$dir/$binary >> > - break 2 >> > - fi >> > - done >> > - done >> > - if test "$ovs_cv_python2" != no && test -x "$ovs_cv_python2"; >> then >> > - if ! "$ovs_cv_python2" -c 'import six ; six.moves.range' >> >&AS_MESSAGE_LOG_FD 2>&1; then >> > - ovs_cv_python2=no >> > - AC_MSG_WARN([Missing Python six library or version too >> old.]) >> > - fi >> > - fi >> > - fi]) >> > - AC_SUBST([HAVE_PYTHON2]) >> > - AM_MISSING_PROG([PYTHON2], [python2]) >> > - if test "$ovs_cv_python2" != no; then >> > - PYTHON2=$ovs_cv_python2 >> > - HAVE_PYTHON2=yes >> > - else >> > - HAVE_PYTHON2=no >> > - fi >> > - AM_CONDITIONAL([HAVE_PYTHON2], [test "$HAVE_PYTHON2" = yes])]) >> > - >> > -dnl Checks for Python 3.x, x >= 4. >> > +dnl Checks for Python 3.4 or later. >> > AC_DEFUN([OVS_CHECK_PYTHON3], >> > [AC_CACHE_CHECK( >> > - [for Python 3.x for x >= 4], >> > + [for Python 3 (version 3.4 or later)], >> > [ovs_cv_python3], >> > [if test -n "$PYTHON3"; then >> > ovs_cv_python3=$PYTHON3 >> > else >> > ovs_cv_python3=no >> > - for binary in python3 python3.4; do >> > + for binary in python3 python3.4 python3.5 python3.6 python3.7; >> do >> > ovs_save_IFS=$IFS; IFS=$PATH_SEPARATOR >> > for dir in $PATH; do >> > IFS=$ovs_save_IFS >> > @@ -419,46 +378,24 @@ else: >> > fi >> > done >> > done >> > - if test "$ovs_cv_python3" != no; then >> > - if test -x "$ovs_cv_python3" && ! "$ovs_cv_python3" -c >> 'import six' >/dev/null 2>&1; then >> > - ovs_cv_python3=no >> > - AC_MSG_WARN([Missing Python six library.]) >> > - fi >> > - fi >> > fi]) >> > - AC_SUBST([HAVE_PYTHON3]) >> > - AM_MISSING_PROG([PYTHON3], [python3]) >> > - if test "$ovs_cv_python3" != no; then >> > - PYTHON3=$ovs_cv_python3 >> > - HAVE_PYTHON3=yes >> > - else >> > - HAVE_PYTHON3=no >> > + if test "$ovs_cv_python3" = no; then >> > + AC_MSG_ERROR([Python 3.4 or later is required but not found in >> $PATH, please install it or set $PYTHON3 to point to it]) >> > fi >> > - AM_CONDITIONAL([HAVE_PYTHON3], [test "$HAVE_PYTHON3" = yes])]) >> > - >> > -dnl Checks if you have any compatible Python version installed. >> > -dnl Python 2.7+ has the preference to 3.4+ >> > -AC_DEFUN([OVS_CHECK_PYTHON], >> > - [AC_CACHE_CHECK( >> > - [for Python 2 or 3], >> > - [ovs_cv_python], >> > - [if test -n "$PYTHON"; then >> > - ovs_cv_python=$PYTHON >> > + AC_ARG_VAR([PYTHON3]) >> > + PYTHON3=$ovs_cv_python3]) >> > + >> > +dnl Checks for python six library. >> > +AC_DEFUN([OVS_CHECK_SIX], >> > + [AC_REQUIRE([OVS_CHECK_PYTHON3]) >> > + AC_CACHE_CHECK( >> > + [where Python six library is available], >> > + [ovs_cv_six], >> > + [if $PYTHON3 -c 'import six' >/dev/null 2>&1; then >> > + ovs_cv_six=yes >> > else >> > - ovs_cv_python=no >> > - if test "$ovs_cv_python2" != no; then >> > - ovs_cv_python=$ovs_cv_python2 >> > - elif test "$ovs_cv_python3" != no; then >> > - ovs_cv_python=$ovs_cv_python3 >> > - else >> > - AC_MSG_ERROR([Missing Python.]) >> > - fi >> > - fi]) >> > - AC_SUBST([PYTHON]) >> > - PYTHON=$ovs_cv_python >> > - AC_SUBST([HAVE_PYTHON]) >> > - HAVE_PYTHON=yes >> > - AM_CONDITIONAL([HAVE_PYTHON], [test "$HAVE_PYTHON" = yes])]) >> > + AC_MSG_ERROR([Missing Python six library.]) >> > + fi])]) >> > >> > dnl Checks for flake8. >> > AC_DEFUN([OVS_CHECK_FLAKE8], >> > @@ -477,7 +414,7 @@ AC_DEFUN([OVS_CHECK_SPHINX], >> > [AC_CHECK_PROGS( >> > [SPHINXBUILD], [sphinx-build-3 sphinx-build-2 sphinx-build], >> [none]) >> > AC_ARG_VAR([SPHINXBUILD]) >> > - AM_CONDITIONAL([HAVE_SPHINX], [test "$ac_cv_prog_SPHINXBUILD" != >> none])]) >> > + AM_CONDITIONAL([HAVE_SPHINX], [test "$SPHINXBUILD" != none])]) >> > >> > dnl Checks for dot. >> > AC_DEFUN([OVS_CHECK_DOT], >> > diff --git a/manpages.mk b/manpages.mk >> > index a66d109e347f..b43deaef1ae5 100644 >> > --- a/manpages.mk >> > +++ b/manpages.mk >> > @@ -116,12 +116,6 @@ lib/vlog-syn.man: >> > lib/vlog.man: >> > ovsdb/ovsdb-schemas.man: >> > >> > -utilities/bugtool/ovs-bugtool.8: \ >> > - utilities/bugtool/ovs-bugtool.8.in \ >> > - lib/ovs.tmac >> > -utilities/bugtool/ovs-bugtool.8.in: >> > -lib/ovs.tmac: >> > - >> > utilities/ovs-appctl.8: \ >> > utilities/ovs-appctl.8.in \ >> > lib/common.man \ >> > diff --git a/ovn/automake.mk b/ovn/automake.mk >> > index afaf0688c0da..df92f25d8439 100644 >> > --- a/ovn/automake.mk >> > +++ b/ovn/automake.mk >> > @@ -6,18 +6,16 @@ pkgdata_DATA += ovn/ovn-sb.ovsschema >> > # >> > # If "python" or "dot" is not available, then we do not add graphical >> diagram >> > # to the documentation. >> > -if HAVE_PYTHON >> > if HAVE_DOT >> > ovn/ovn-sb.gv: ovsdb/ovsdb-dot.in ovn/ovn-sb.ovsschema >> > $(AM_V_GEN)$(OVSDB_DOT) --no-arrows >> $(srcdir)/ovn/ovn-sb.ovsschema > $@ >> > ovn/ovn-sb.pic: ovn/ovn-sb.gv ovsdb/dot2pic >> > - $(AM_V_GEN)(dot -T plain < ovn/ovn-sb.gv | $(PYTHON) >> $(srcdir)/ovsdb/dot2pic -f 3) > $@.tmp && \ >> > + $(AM_V_GEN)(dot -T plain < ovn/ovn-sb.gv | $(PYTHON3) >> $(srcdir)/ovsdb/dot2pic -f 3) > $@.tmp && \ >> > mv $@.tmp $@ >> > OVN_SB_PIC = ovn/ovn-sb.pic >> > OVN_SB_DOT_DIAGRAM_ARG = --er-diagram=$(OVN_SB_PIC) >> > CLEANFILES += ovn/ovn-sb.gv ovn/ovn-sb.pic >> > endif >> > -endif >> > >> > # OVN southbound schema documentation >> > EXTRA_DIST += ovn/ovn-sb.xml >> > @@ -40,18 +38,16 @@ pkgdata_DATA += ovn/ovn-nb.ovsschema >> > # >> > # If "python" or "dot" is not available, then we do not add graphical >> diagram >> > # to the documentation. >> > -if HAVE_PYTHON >> > if HAVE_DOT >> > ovn/ovn-nb.gv: ovsdb/ovsdb-dot.in ovn/ovn-nb.ovsschema >> > $(AM_V_GEN)$(OVSDB_DOT) --no-arrows >> $(srcdir)/ovn/ovn-nb.ovsschema > $@ >> > ovn/ovn-nb.pic: ovn/ovn-nb.gv ovsdb/dot2pic >> > - $(AM_V_GEN)(dot -T plain < ovn/ovn-nb.gv | $(PYTHON) >> $(srcdir)/ovsdb/dot2pic -f 3) > $@.tmp && \ >> > + $(AM_V_GEN)(dot -T plain < ovn/ovn-nb.gv | $(PYTHON3) >> $(srcdir)/ovsdb/dot2pic -f 3) > $@.tmp && \ >> > mv $@.tmp $@ >> > OVN_NB_PIC = ovn/ovn-nb.pic >> > OVN_NB_DOT_DIAGRAM_ARG = --er-diagram=$(OVN_NB_PIC) >> > CLEANFILES += ovn/ovn-nb.gv ovn/ovn-nb.pic >> > endif >> > -endif >> > >> > # OVN northbound schema documentation >> > EXTRA_DIST += ovn/ovn-nb.xml >> > diff --git a/ovsdb/ovsdb-dot.in b/ovsdb/ovsdb-dot.in >> > index 8eea6172455d..41b986c0ac7f 100755 >> > --- a/ovsdb/ovsdb-dot.in >> > +++ b/ovsdb/ovsdb-dot.in >> > @@ -1,4 +1,4 @@ >> > -#! @PYTHON@ >> > +#! @PYTHON3@ >> > >> > from datetime import date >> > import ovs.db.error >> > diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in >> > index 40fef39edff7..238aaee3189c 100755 >> > --- a/ovsdb/ovsdb-idlc.in >> > +++ b/ovsdb/ovsdb-idlc.in >> > @@ -1,4 +1,4 @@ >> > -#! @PYTHON@ >> > +#! @PYTHON3@ >> > >> > from __future__ import print_function >> > import getopt >> > diff --git a/python/automake.mk b/python/automake.mk >> > index 5a1e1da8a79a..2f08c7701484 100644 >> > --- a/python/automake.mk >> > +++ b/python/automake.mk >> > @@ -69,7 +69,6 @@ FLAKE8_PYFILES += \ >> > python/build/nroff.py \ >> > python/ovs/dirs.py.template >> > >> > -if HAVE_PYTHON >> > nobase_pkgdata_DATA = $(ovs_pyfiles) $(ovstest_pyfiles) >> > ovs-install-data-local: >> > $(MKDIR_P) python/ovs >> > @@ -88,14 +87,10 @@ ovs-install-data-local: >> > rm python/ovs/dirs.py.tmp >> > >> > python-sdist: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) >> python/ovs/dirs.py >> > - (cd python/ && $(PYTHON) setup.py sdist) >> > + (cd python/ && $(PYTHON3) setup.py sdist) >> > >> > pypi-upload: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) >> python/ovs/dirs.py >> > - (cd python/ && $(PYTHON) setup.py sdist upload) >> > -else >> > -ovs-install-data-local: >> > - @: >> > -endif >> > + (cd python/ && $(PYTHON3) setup.py sdist upload) >> > install-data-local: ovs-install-data-local >> > >> > UNINSTALL_LOCAL += ovs-uninstall-local >> > diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/ >> openvswitch-fedora.spec.in >> > index 614c5f9f08ea..fc113c9f1642 100644 >> > --- a/rhel/openvswitch-fedora.spec.in >> > +++ b/rhel/openvswitch-fedora.spec.in >> > @@ -45,17 +45,6 @@ >> > %define _rundir /run >> > %endif >> > >> > -# define the python package prefix based on distribution version so >> that we can >> > -# simultaneously support RHEL-based and later Fedora versions in this >> spec file. >> > -%if 0%{?fedora} >= 25 >> > -%define _py2 python2 >> > -%endif >> > - >> > -%if 0%{?rhel} || 0%{?fedora} < 25 >> > -%define _py2 python >> > -%endif >> > - >> > - >> > Name: openvswitch >> > Summary: Open vSwitch >> > Group: System Environment/Daemons >> > @@ -72,7 +61,6 @@ Source: >> http://openvswitch.org/releases/%{name}-%{version}.tar.gz >> > BuildRequires: gcc gcc-c++ >> > BuildRequires: autoconf automake libtool >> > BuildRequires: systemd-units openssl openssl-devel >> > -BuildRequires: %{_py2}-devel >> > %if 0%{?fedora} > 22 || %{with build_python3} >> > BuildRequires: python3-devel >> > %endif >> > @@ -81,7 +69,6 @@ BuildRequires: groff graphviz >> > BuildRequires: checkpolicy, selinux-policy-devel >> > BuildRequires: /usr/bin/sphinx-build-3 >> > # make check dependencies >> > -BuildRequires: %{_py2}-twisted%{?rhel:-core} %{_py2}-zope-interface >> %{_py2}-six >> > BuildRequires: procps-ng >> > %if %{with libcapng} >> > BuildRequires: libcap-ng libcap-ng-devel >> > @@ -122,16 +109,6 @@ Requires: selinux-policy-targeted >> > %description selinux-policy >> > Tailored Open vSwitch SELinux policy >> > >> > -%package -n %{_py2}-openvswitch >> > -Summary: Open vSwitch python2 bindings >> > -License: ASL 2.0 >> > -BuildArch: noarch >> > -Requires: %{_py2} >> > -Requires: %{_py2}-six >> > -%{?python_provide:%python_provide python2-openvswitch = >> %{version}-%{release}} >> > -%description -n %{_py2}-openvswitch >> > -Python bindings for the Open vSwitch database >> > - >> > %if 0%{?fedora} > 22 || %{with build_python3} >> > %package -n python3-openvswitch >> > Summary: Open vSwitch python3 bindings >> > @@ -149,8 +126,6 @@ Python bindings for the Open vSwitch database >> > Summary: Open vSwitch testing utilities >> > License: ASL 2.0 >> > BuildArch: noarch >> > -Requires: %{_py2}-openvswitch = %{version}-%{release} >> > -Requires: %{_py2} %{_py2}-netifaces %{_py2}-twisted >> > >> > %description test >> > Utilities that are useful to diagnose performance and connectivity >> > @@ -179,7 +154,7 @@ service. >> > %package ipsec >> > Summary: Open vSwitch IPsec tunneling support >> > License: ASL 2.0 >> > -Requires: openvswitch %{_py2}-openvswitch libreswan >> > +Requires: openvswitch python3-openvswitch libreswan >> > >> > %description ipsec >> > This package provides IPsec tunneling support for OVS tunnels. >> > @@ -201,12 +176,7 @@ This package provides IPsec tunneling support for >> OVS tunnels. >> > --disable-static \ >> > --enable-shared \ >> > --with-pkidir=%{_sharedstatedir}/openvswitch/pki \ >> > -%if 0%{?fedora} > 22 || %{with build_python3} >> > - PYTHON3=%{__python3} \ >> > - PYTHON=%{__python2} >> > -%else >> > - PYTHON=%{__python} >> > -%endif >> > + PYTHON3=%{__python3} >> > >> > build-aux/dpdkstrip.py \ >> > %if %{with dpdk} >> > @@ -274,13 +244,9 @@ install -p -m 0755 >> rhel/etc_sysconfig_network-scripts_ifdown-ovs \ >> > install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \ >> > >> $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs >> > >> > -install -d -m 0755 $RPM_BUILD_ROOT%{python2_sitelib} >> > -cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/* \ >> > - $RPM_BUILD_ROOT%{python2_sitelib} >> > - >> > %if 0%{?fedora} > 22 || %{with build_python3} >> > install -d -m 0755 $RPM_BUILD_ROOT%{python3_sitelib} >> > -cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/ovs \ >> > +cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/* \ >> > $RPM_BUILD_ROOT%{python3_sitelib} >> > %endif >> > >> > @@ -435,9 +401,6 @@ fi >> > %defattr(-,root,root) >> > %{_datadir}/selinux/packages/%{name}/openvswitch-custom.pp >> > >> > -%files -n %{_py2}-openvswitch >> > -%{python2_sitelib}/ovs >> > - >> > %if 0%{?fedora} > 22 || %{with build_python3} >> > %files -n python3-openvswitch >> > %{python3_sitelib}/ovs >> > @@ -456,7 +419,7 @@ fi >> > %{_mandir}/man1/ovs-pcap.1* >> > %{_mandir}/man8/ovs-tcpdump.8* >> > %{_mandir}/man1/ovs-tcpundump.1* >> > -%{python2_sitelib}/ovstest >> > +%{python3_sitelib}/ovstest >> > >> > %files devel >> > %{_libdir}/lib*.so >> > diff --git a/tests/atlocal.in b/tests/atlocal.in >> > index 556f8681cf12..1dc7cd5d087a 100644 >> > --- a/tests/atlocal.in >> > +++ b/tests/atlocal.in >> > @@ -1,28 +1,14 @@ >> > # -*- shell-script -*- >> > HAVE_OPENSSL='@HAVE_OPENSSL@' >> > OPENSSL_SUPPORTS_SNI='@OPENSSL_SUPPORTS_SNI@' >> > -HAVE_PYTHON='@HAVE_PYTHON@' >> > -HAVE_PYTHON2='@HAVE_PYTHON2@' >> > -HAVE_PYTHON3='@HAVE_PYTHON3@' >> > HAVE_UNBOUND='@HAVE_UNBOUND@' >> > EGREP='@EGREP@' >> > +PYTHON3='@PYTHON3@' >> > >> > -if test x"$PYTHON" = x; then >> > - PYTHON='@PYTHON@' >> > -fi >> > - >> > -if test x"$PYTHON2" = x; then >> > - PYTHON2='@PYTHON2@' >> > -fi >> > - >> > -if test x"$PYTHON3" = x; then >> > - PYTHON3='@PYTHON3@' >> > - >> > - # PYTHONCOERCECLOCALE=0 disables the Unicode compatibility warning >> on >> > - # stderr that breaks almost any Python3 test (PEP 0538) >> > - PYTHONCOERCECLOCALE=0 >> > - export PYTHONCOERCECLOCALE >> > -fi >> > +# PYTHONCOERCECLOCALE=0 disables the Unicode compatibility warning on >> > +# stderr that breaks almost any Python3 test (PEP 0538) >> > +PYTHONCOERCECLOCALE=0 >> > +export PYTHONCOERCECLOCALE >> > >> > PYTHONPATH=$abs_top_srcdir/python:$abs_top_builddir/tests:$PYTHONPATH >> > export PYTHONPATH >> > @@ -63,7 +49,7 @@ Linux) >> > # in particular the patch attached there, which was applied to >> glibc CVS as >> > # "Restore locking in free_check." between 1.11 and 1.11.1. >> > vswitchd=$abs_top_builddir/vswitchd/ovs-vswitchd >> > - glibc=`ldd $vswitchd | sed -n 's/^ libc\.[^ ]* => \([^ ]*\) >> .*/\1/p'` >> > + glibc=`ldd $vswitchd | sed -n 's/^ libc\.[^ ]* => \([^ ]*\) >> .*/\1/p'` >> > glibc_version=`$glibc | sed -n '1s/.*version >> \([0-9]\{1,\}\.[0-9]\{1,\}\).*/\1/p'` >> > case $glibc_version in >> > 2.[0-9] | 2.1[01]) mcheck=disabled ;; >> > @@ -116,7 +102,7 @@ FreeBSD|NetBSD) >> > ;; >> > esac >> > >> > -if test x"$PYTHON3" != x && test "$IS_WIN32" = yes; then >> > +if test "$IS_WIN32" = yes; then >> > # enables legacy windows unicode printing needed for Python3 >> compatibility >> > # with the Python2 tests >> > PYTHONLEGACYWINDOWSFSENCODING=true >> > @@ -126,7 +112,7 @@ if test x"$PYTHON3" != x && test "$IS_WIN32" = yes; >> then >> > fi >> > >> > # Check whether to run IPv6 tests. >> > -$PYTHON -c ' >> > +$PYTHON3 -c ' >> > import errno >> > import socket >> > import sys >> > @@ -140,7 +126,7 @@ except socket.error as e: >> > case $? in >> > 0) HAVE_IPV6=yes ;; >> > 2) HAVE_IPV6=no ;; >> > - *) echo "$0: unexpected error probing $PYTHON for IPv6 support" >> >&2 ;; >> > + *) echo "$0: unexpected error probing $PYTHON3 for IPv6 support" >> >&2 ;; >> > esac >> > >> > # Look for a python L7 library 'LIB' in the system. If it is found, >> defines >> > @@ -149,13 +135,9 @@ find_l7_lib() >> > { >> > set +x >> > var=HAVE_`echo "$1" | tr '[a-z]' '[A-Z]'` >> > - if test "$HAVE_PYTHON" = "yes"; then >> > - result=$($PYTHON $abs_top_srcdir/tests/test-l7.py --help | >> grep "$1") >> > - if test "x${result}" != x; then >> > - eval ${var}="yes" >> > - else >> > - eval ${var}="no" >> > - fi >> > + result=$($PYTHON3 $abs_top_srcdir/tests/test-l7.py --help | grep >> "$1") >> > + if test "x${result}" != x; then >> > + eval ${var}="yes" >> > else >> > eval ${var}="no" >> > fi >> > diff --git a/tests/automake.mk b/tests/automake.mk >> > index 0b4f29486bc7..0442334ecb78 100644 >> > --- a/tests/automake.mk >> > +++ b/tests/automake.mk >> > @@ -199,7 +199,7 @@ check-local: >> > COVERAGE = coverage >> > COVERAGE_FILE='$(abs_srcdir)/.coverage' >> > check-pycov: all clean-pycov >> > - PYTHONDONTWRITEBYTECODE=yes COVERAGE_FILE=$(COVERAGE_FILE) >> PYTHON='$(COVERAGE) run -p' $(SHELL) '$(TESTSUITE)' -C tests >> AUTOTEST_PATH=$(AUTOTEST_PATH) $(TESTSUITEFLAGS) >> > + PYTHONDONTWRITEBYTECODE=yes COVERAGE_FILE=$(COVERAGE_FILE) >> PYTHON3='$(COVERAGE) run -p' $(SHELL) '$(TESTSUITE)' -C tests >> AUTOTEST_PATH=$(AUTOTEST_PATH) $(TESTSUITEFLAGS) >> > @cd $(srcdir) && $(COVERAGE) combine && >> COVERAGE_FILE=$(COVERAGE_FILE) $(COVERAGE) annotate >> > @echo >> > @echo >> '----------------------------------------------------------------------' >> > diff --git a/tests/check-structs.at b/tests/check-structs.at >> > index 4163c30d6dbe..15ca536112e6 100644 >> > --- a/tests/check-structs.at >> > +++ b/tests/check-structs.at >> > @@ -3,10 +3,9 @@ AT_BANNER([struct alignment checker unit tests]) >> > m4_define([check_structs], [$top_srcdir/build-aux/check-structs]) >> > m4_define([RUN_STRUCT_CHECKER], >> > [AT_KEYWORDS([check-structs]) >> > - AT_SKIP_IF([test $HAVE_PYTHON = no]) >> > AT_DATA([test.h], [$1 >> > ]) >> > - AT_CHECK_UNQUOTED([$PYTHON check_structs test.h], [$2], [$3], >> [$4])]) >> > + AT_CHECK_UNQUOTED([$PYTHON3 check_structs test.h], [$2], [$3], >> [$4])]) >> > >> > AT_SETUP([check struct tail padding]) >> > RUN_STRUCT_CHECKER( >> > diff --git a/tests/checkpatch.at b/tests/checkpatch.at >> > index fe21acdf2d22..6c7394772270 100755 >> > --- a/tests/checkpatch.at >> > +++ b/tests/checkpatch.at >> > @@ -3,10 +3,9 @@ AT_BANNER([checkpatch]) >> > OVS_START_SHELL_HELPERS >> > # try_checkpatch PATCH [ERRORS] >> > # >> > -# Runs checkpatch under Python 2 and Python 3, if installed, on the >> given >> > -# PATCH, expecting the specified set of ERRORS (and warnings). >> > +# Runs checkpatch, if installed, on the given PATCH, expecting the >> > +# specified set of ERRORS (and warnings). >> > try_checkpatch() { >> > - AT_SKIP_IF([test $HAVE_PYTHON2 = no && test $HAVE_PYTHON3 = no]) >> > # Take the patch to test from $1. Remove an initial four-space >> indent >> > # from it and, if it is just headers with no body, add a null body. >> > echo "$1" | sed 's/^ //' > test.patch >> > @@ -22,18 +21,12 @@ try_checkpatch() { >> > : > expout >> > fi >> > >> > - try_checkpatch__ "$HAVE_PYTHON2" "$PYTHON2" >> > - try_checkpatch__ "$HAVE_PYTHON3" "$PYTHON3" >> > -} >> > -try_checkpatch__() { >> > - if test $1 = no; then >> > - : >> > - elif test -s expout; then >> > - AT_CHECK([$2 $top_srcdir/utilities/checkpatch.py -q >> test.patch], >> > + if test -s expout; then >> > + AT_CHECK([$PYTHON3 $top_srcdir/utilities/checkpatch.py -q >> test.patch], >> > [1], [stdout]) >> > AT_CHECK([sed '/^Lines checked:/,$d' stdout], [0], [expout]) >> > else >> > - AT_CHECK([$2 $top_srcdir/utilities/checkpatch.py -q >> test.patch]) >> > + AT_CHECK([$PYTHON3 $top_srcdir/utilities/checkpatch.py -q >> test.patch]) >> > fi >> > } >> > OVS_END_SHELL_HELPERS >> > diff --git a/tests/daemon-py.at b/tests/daemon-py.at >> > index 6adea3c85dfc..883e45a5ac21 100644 >> > --- a/tests/daemon-py.at >> > +++ b/tests/daemon-py.at >> > @@ -1,252 +1,205 @@ >> > -AT_BANNER([daemon unit tests - Python]) >> > - >> > -m4_define([DAEMON_PYN], >> > - [AT_SETUP([daemon - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - # Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - AT_KEYWORDS([python daemon]) >> > - >> > - on_exit 'kill $(cat *.pid)' >> > - pidfile=test-daemon.py.pid >> > - >> > - # Start the daemon and wait for the pidfile to get created >> > - # and that its contents are the correct pid. >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile & echo $!], [0], >> [stdout]) >> > - pid=$(cat stdout) >> > - >> > - OVS_WAIT_UNTIL([test -s $pidfile], [kill $pid]) >> > - AT_CHECK([test $pid = $(cat $pidfile)]) >> > - AT_CHECK([kill -0 $pid]) >> > - >> > - # Kill the daemon and make sure that the pidfile gets deleted. >> > - kill $pid >> > - OVS_WAIT_WHILE([kill -0 $pid]) >> > - AT_CHECK([test ! -e $pidfile]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_MONITOR_PYN], >> > - [AT_SETUP([daemon --monitor - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - >> > - # Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - >> > - on_exit 'kill $(cat *.pid)' >> > - pidfile=test-daemon.py.pid >> > - >> > - # Start the daemon and wait for the pidfile to get created. >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --monitor & echo $!], >> [0], [stdout]) >> > - monitor=$(cat stdout) >> > - OVS_WAIT_UNTIL([test -s $pidfile]) >> > - child=$(cat $pidfile) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is our child process. >> > - check_ancestors $child $monitor >> > - >> > - # Kill the daemon process, making it look like a segfault, >> > - # and wait for a new child process to get spawned. >> > - AT_CHECK([kill -SEGV $child]) >> > - OVS_WAIT_WHILE([kill -0 $child]) >> > - OVS_WAIT_UNTIL([test -s $pidfile && test $(cat $pidfile) != $child]) >> > - child2=$(cat $pidfile) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is our child process. >> > - check_ancestors $child2 $monitor >> > - >> > - # Kill the daemon process with SIGTERM, and wait for the daemon >> > - # and the monitor processes to go away and the pidfile to get >> deleted. >> > - AT_CHECK([kill $child2]) >> > - OVS_WAIT_WHILE([kill -0 $monitor || kill -0 $child2 || test -e >> $pidfile]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_MONITOR_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_MONITOR_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_MONITOR_RESTART_PYN], >> > - [AT_SETUP([daemon --monitor restart exit code - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - # Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - >> > - on_exit 'kill $(cat *.pid)' >> > - pidfile=test-daemon.py.pid >> > - >> > - # Start the daemon and wait for the pidfile to get created. >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --monitor & echo $!], >> [0], [stdout]) >> > - monitor=$(cat stdout) >> > - OVS_WAIT_UNTIL([test -s $pidfile]) >> > - child=$(cat $pidfile) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is our child process. >> > - check_ancestors $child $monitor >> > - >> > - # HUP the daemon process causing it to throw an exception, >> > - # and wait for a new child process to get spawned. >> > - AT_CHECK([kill -HUP $child]) >> > - OVS_WAIT_WHILE([kill -0 $child]) >> > - OVS_WAIT_UNTIL([test -s $pidfile && test $child != $(cat $pidfile)]) >> > - child2=$(cat $pidfile) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is our child process. >> > - check_ancestors $child2 $monitor >> > - >> > - # Kill the daemon process with SIGTERM, and wait for the daemon >> > - # and the monitor processes to go away and the pidfile to get >> deleted. >> > - AT_CHECK([kill $child2]) >> > - OVS_WAIT_WHILE([kill -0 $monitor || kill -0 $child2 || test -e >> $pidfile]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_MONITOR_RESTART_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_MONITOR_RESTART_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_DETACH_PYN], >> > - [AT_SETUP([daemon --detach - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - >> > - # Skip this test for Windows, the pid file not removed if the >> daemon is killed >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - >> > - on_exit 'kill $(cat *.pid)' >> > - pidfile=test-daemon.py.pid >> > - >> > - # Start the daemon and make sure that the pidfile exists >> immediately. >> > - # We don't wait for the pidfile to get created because the daemon is >> > - # supposed to do so before the parent exits. >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --detach --no-chdir], >> [0]) >> > - AT_CHECK([test -s $pidfile]) >> > - pid=$(cat $pidfile) >> > - check_ancestors $pid 1 >> > - >> > - # Kill the daemon and make sure that the pidfile gets deleted. >> > - AT_CHECK([kill $pid]) >> > - OVS_WAIT_WHILE([kill -0 $pid]) >> > - AT_CHECK([test ! -e $pidfile]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_DETACH_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_DETACH_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_DETACH_MONITOR_PYN], >> > - [AT_SETUP([daemon --detach --monitor - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - >> > - # Skip this test for Windows, uses Linux specific kill signal >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - >> > - on_exit 'kill $(cat *.pid)' >> > - pidfile=test-daemon.py.pid >> > - >> > - # Start the daemon and make sure that the pidfile exists >> immediately. >> > - # We don't wait for the pidfile to get created because the daemon is >> > - # supposed to do so before the parent exits. >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --detach --no-chdir >> --monitor], [0]) >> > - AT_CHECK([test -s $pidfile]) >> > - child=$(cat $pidfile) >> > - AT_CHECK([parent_pid $child], [0], [stdout]) >> > - monitor=$(cat stdout) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is a running process, >> > - # and that the parent process of that process is init. >> > - check_ancestors $child $monitor 1 >> > - >> > - # Kill the daemon process, making it look like a segfault, >> > - # and wait for a new daemon process to get spawned. >> > - AT_CHECK([kill -SEGV $child]) >> > - OVS_WAIT_WHILE([kill -0 $child]) >> > - OVS_WAIT_UNTIL([test -s $pidfile && test $(cat $pidfile) != $child]) >> > - child2=$(cat $pidfile) >> > - >> > - # Check that the pidfile names a running process, >> > - # and that the parent process of that process is our child process. >> > - check_ancestors $child2 $monitor 1 >> > - >> > - # Kill the daemon process with SIGTERM, and wait for the daemon >> > - # and the monitor processes to go away and the pidfile to get >> deleted. >> > - AT_CHECK([kill $child2]) >> > - OVS_WAIT_WHILE([kill -0 $child2 || kill -0 $monitor || test -e >> $pidfile]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_DETACH_MONITOR_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_DETACH_MONITOR_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_DETACH_ERRORS_PYN], >> > - [AT_SETUP([daemon --detach startup errors - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --detach --no-chdir >> --bail], [1], [], [stderr]) >> > - AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as >> requested' stderr], >> > - [0], [ignore]) >> > - AT_CHECK([test ! -s test-daemon.py.pid]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_DETACH_ERRORS_PYN([Python2], [$HAVE_PYTHON2], [$PYTHON2]) >> > -DAEMON_DETACH_ERRORS_PYN([Python3], [$HAVE_PYTHON3], [$PYTHON3]) >> > - >> > -m4_define([DAEMON_DETACH_MONITOR_ERRORS_PYN], >> > - [AT_SETUP([daemon --detach --monitor startup errors - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - AT_CAPTURE_FILE([pid]) >> > - AT_CHECK([$3 $srcdir/test-daemon.py --pidfile --detach --no-chdir >> --monitor --bail], [1], [], [stderr]) >> > - AT_CHECK([grep 'test-daemon.py: exiting after daemonize_start() as >> requested' stderr], >> > - [0], [ignore]) >> > - AT_CHECK([test ! -s test-daemon.py.pid]) >> > - AT_CLEANUP]) >> > - >> > -DAEMON_DETACH_MONITOR_ERRORS_PYN([Python2], [$HAVE_PYTHON2], >> [$PYTHON2]) >> > -DAEMON_DETACH_MONITOR_ERRORS_PYN([Python3], [$HAVE_PYTHON3], >> [$PYTHON3]) >> > - >> > -m4_define([DAEMON_DETACH_CLOSES_FDS_PYN], >> > - [AT_SETUP([daemon --detach closes standard fds - $1]) >> > - AT_SKIP_IF([test $2 = no]) >> > - >> > - # Skip this test for Windows, uses Linux specific kill signal >> > - AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > - >> > - AT_CHECK([(yes 2>stderr; echo $? > status) | $3 >> $srcdir/test-daemon.py --pidfile --detach --no-chdir]) >> > - AT_CHECK([kill $(cat test-daemon.py.pid)]) >> > - AT_CHECK([test -s status]) >> > - if grep '[[bB]]roken pipe' stderr >/dev/null 2>&1; then >> > - # Something in the environment caused SIGPIPE to be ignored, but >> > - # 'yes' at least told us that it got EPIPE. Good enough; we know >> > - # that stdout was closed. >> > - : >> > - else >> > - # Otherwise make sure that 'yes' died from SIGPIPE. >> > - AT_CHECK([kill -l `cat status`], [0], [PIPE >> > +AT_BANNER([daemon unit tests - Python3]) >> > + >> > +AT_SETUP([daemon - Python3]) >> > +# Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > +AT_KEYWORDS([python daemon]) >> > + >> > +on_exit 'kill $(cat *.pid)' >> > +pidfile=test-daemon.py.pid >> > + >> > +# Start the daemon and wait for the pidfile to get created >> > +# and that its contents are the correct pid. >> > +AT_CHECK([$PYTHON3 $srcdir/test-daemon.py --pidfile & echo $!], [0], >> [stdout]) >> > +pid=$(cat stdout) >> > + >> > +OVS_WAIT_UNTIL([test -s $pidfile], [kill $pid]) >> > +AT_CHECK([test $pid = $(cat $pidfile)]) >> > +AT_CHECK([kill -0 $pid]) >> > + >> > +# Kill the daemon and make sure that the pidfile gets deleted. >> > +kill $pid >> > +OVS_WAIT_WHILE([kill -0 $pid]) >> > +AT_CHECK([test ! -e $pidfile]) >> > +AT_CLEANUP >> > + >> > +AT_SETUP([daemon --monitor - Python3]) >> > +# Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > + >> > +on_exit 'kill $(cat *.pid)' >> > +pidfile=test-daemon.py.pid >> > + >> > +# Start the daemon and wait for the pidfile to get created. >> > +AT_CHECK([$PYTHON3 $srcdir/test-daemon.py --pidfile --monitor & echo >> $!], [0], [stdout]) >> > +monitor=$(cat stdout) >> > +OVS_WAIT_UNTIL([test -s $pidfile]) >> > +child=$(cat $pidfile) >> > + >> > +# Check that the pidfile names a running process, >> > +# and that the parent process of that process is our child process. >> > +check_ancestors $child $monitor >> > + >> > +# Kill the daemon process, making it look like a segfault, >> > +# and wait for a new child process to get spawned. >> > +AT_CHECK([kill -SEGV $child]) >> > +OVS_WAIT_WHILE([kill -0 $child]) >> > +OVS_WAIT_UNTIL([test -s $pidfile && test $(cat $pidfile) != $child]) >> > +child2=$(cat $pidfile) >> > + >> > +# Check that the pidfile names a running process, >> > +# and that the parent process of that process is our child process. >> > +check_ancestors $child2 $monitor >> > + >> > +# Kill the daemon process with SIGTERM, and wait for the daemon >> > +# and the monitor processes to go away and the pidfile to get deleted. >> > +AT_CHECK([kill $child2]) >> > +OVS_WAIT_WHILE([kill -0 $monitor || kill -0 $child2 || test -e >> $pidfile]) >> > +AT_CLEANUP >> > + >> > +AT_SETUP([daemon --monitor restart exit code - Python3]) >> > +# Skip this test for Windows, echo $! gives shell pid instead of >> parent process >> > +AT_SKIP_IF([test "$IS_WIN32" = "yes"]) >> > + >> > +on_exit 'kill $(cat *.pid)' >> > +pidfile=test-daemon.py.pid >> > + >> > +# Start the daemon and wait for the pidfile to get created. >> > +AT_CHECK([$PYTHON3 $srcdir/test-daemon.py --pidfile --monitor & echo >> $!], [0], [stdout]) >> > +monitor=$(cat stdout) >> > +OVS_WAIT_UNTIL([test -s $pidfile]) >> > +child=$(cat $pidfile) >> > + >> > +# Check that the pidfile names a running process, >> > +# and that the parent process of that process is our child process. >> > +check_ancestors $child $monitor >> > + >> > +# HUP the daemon process causing it to throw an exception, >> > +# and wait for a new child process to get spawned. >> > +AT_CHECK([kill -HUP $child]) >> > +OVS_WAIT_WHILE([kill -0 $child]) >> > +OVS_WAIT_UNTIL([test -s $pidfile && test $child != $(cat $pidfile)]) >> > +child2=$(cat $pidfile) >> > + >> > +# Check that the pidfile names a running process, >> > +# and that the parent process of that process is our child process. >> > +check_an > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev