332 Commits

Author SHA1 Message Date
Cyril Roelandt
303f37f4e0 Python 3: use next() instead of iterator.next()
The latter only works in Python 2.

Also define a __next__ method in the classes that define a next method.

Change-Id: Iaa1a1e500facab50d8bcdffda39ccad3f2e4e9bb
Blueprint: neutron-python3
2015-06-09 20:26:09 +02:00
Ihar Hrachyshka
d0be7bc57f Make pep8 job succeed when /etc/neutron/neutron.conf is not installed
Currently, if /etc/neutron/neutron.conf is not installed in the system,
neutron-db-manage fails in oslo.config code when trying to determine the
default configuration file to use.

Test job should not rely on any contents inside /etc/.

Instead, pass --config-file with test-only configuration explicitly into
the utility.

neutron.conf.test was renamed into neutron.conf since for some reason
oslo.config does not support a name that does not have .conf at its
filename end.

Change-Id: I719829fc83a7b20a49c338aaf1dbef916dcc768c
2015-06-09 12:50:35 +02:00
Cyril Roelandt
00899b5621 Python3: Enable all working tests in tox.ini
Thanks to the recent Python3-related changes, these tests can now be run on
Python 3.

Change-Id: I7f689e221e59128012d46da2c90e61d5206fe828
Blueprint: neutron-python3
2015-06-08 16:47:56 +02:00
Elena Ezhova
4a234ab1a3 Remove comment about hash seed in tox.ini
Enable random hash seeds change [1] has merged so the comment
can be safely removed.

[1] https://review.openstack.org/#/c/185572/

Change-Id: I93f64841792f9c38f5121ca47c130ad769c11dc4
2015-06-01 12:59:38 +03:00
Cedric Brandily
ef5b4f5274 Enable random hash seeds
Neutron tests have been updated in order to support random hash seed. It
allows to remove PYTHONHASHSEED=0 in tox.ini and remove hashtest tox
environment.

Closes-Bug: #1348818
Change-Id: I1063304dda887eb82c0de8516d5a483fa8943fc1
Depends-On: I8408365825ec1e97a83c2181f38ec1f9468df91e
Depends-On: I1b2bd4100c19004f12822c414aefc86aae9849db
Depends-On: I5077764045a34d1be0e85bb4b80f3655e87692cc
2015-05-30 01:23:05 +00:00
Ihar Hrachyshka
24ec6e214b py34: don't run any tests except unit tests
py34 job was intended for unit tests only. It's important to distinguish
between different types of tests, because they all have different
requirements to execution environment. E.g. functional tests are not
expected to run in a restricted env designed for unit tests, and that's
even more valid for fullstack tests.

Otherwise, the job may fail or apply irrecoverable changes to test
runner system, breaking the system.

If we ever want to support py3 for other types of tests, we should add
separate jobs just for that.

Note that the neutron-python3 blueprint was not intended to introduce
changes to support anything but unit test execution with the new Python
version, so strictly speaking, any effort to make other test types work
is out of scope.

Change-Id: Ia96f03f05269c1938b51ee26f4b4075b69967bb8
2015-05-28 14:52:55 +02:00
Assaf Muller
0933f26b2c Fix neutron tests
Tox updated to a new major version and changed some substitute
variables.

Change-Id: Ifd00abed7bf0a68d4d46d12230118022fa2292ef
2015-05-13 13:39:20 -04:00
Jenkins
96091cb976 Merge "Allow users to run 'tox -epy34'" 2015-05-12 16:09:48 +00:00
Jakub Libosvar
05daedff69 Remove H305 from tox.ini pep8 ignore list
H305 is about grouping imports. It seems like we meet the requirement. I
don't think there a reason to keep it.

Change-Id: Ia2ddd467288c3c3aad39aed98eefb532b0e1d280
2015-05-11 15:56:39 +00:00
Cyril Roelandt
8db41f04d5 Allow users to run 'tox -epy34'
With this commit, it is possible to successfully run 'tox -epy34', even though
only a small amount of tests will actually be run. This is a required step in
making Neutron compatible with Python 3, as described in the 'Porting to Python
3' specification.

This commit:
- fixes some broken imports, while making sure they still work with Python 3;
- updates a call to gettext.install;
- adds a py34 target in tox.ini.

Change-Id: I91cc7a992d05ea85f7004d1c5a45a1c02cbf1c85
Blueprint: neutron-python3
2015-05-11 16:09:51 +02:00
Maru Newby
81098620c2 Double functional testing timeout to 180s
The increase in ovs testing is resulting in job failure due to
timeouts in test_killed_monitor_respawns.  Giving the test more
time to complete should reduce the failure rate.

Change-Id: I2ba9b1eb388bfbbebbd6b0f3edb6d5a5ae0bfead
Closes-Bug: #1442272
2015-04-09 17:00:57 +00:00
Maru Newby
e37dcd4c76 Remove check for bash usage
Arbitrarily restricting ourselves from using bash because developers on
platforms like netbsd don't want to install bash from ports doesn't
make sense.  Any non-trivial shell script is likely to use features
like arrays or string manipulation that are poorly supported (if at
all) by sh, and the continued bumping of the number of expected bash
scripts is an indication that the check is not serving its purpose
anyway.

Along with removing the check, all shebang references to /bin/bash
have been replaced with /usr/bin/env bash in an attempt to be more
compatible across different hosts.

Change-Id: Ief72dc380cc88af38959c330897e2c127e33c332
Closes-Bug: #1440824
2015-04-07 15:15:33 +00:00
Maru Newby
1105782e39 Reorganize unit test tree
This change ensures that the structure of the unit test tree matches
that of the code tree to make it obvious where to find tests for a
given module.  A check is added to the pep8 job to protect against
regressions.

The plugin test paths are relocated to neutron/tests/unit/plugins
but are otherwise ignored for now.

Change-Id: If307593259139171be21a71c58e3a34bf148cc7f
Partial-Bug: #1440834
2015-04-06 23:28:31 +00:00
Maru Newby
5723970e5f Simplify retargetable test framework
The retargetable testing prototype previously relied on each test case
defining the 'scenarios' attribute used to parametize testing with
testscenarios.  Anticipating the requirement to retrofit the imported
tempest api test cases, this change moves scenario definition to a
base class since scenarios are common across all api tests.

This change also sets the retargetable test to skip when invoked
against rest.  Tempest uses class-level setup for auth and this needs
to be broken out into fixtures before the retargetable testing will
work again.

Change-Id: I70eb21db9b983d45e9bcc7ea90e36f202d3e3e45
2015-03-31 20:13:04 +00:00
John Schwarz
e0ea5edc12 Add full-stack tests framework
This patch introduces the full-stack tests framework, as specified in
the blueprint. In short, this adds the neutron.tests.fullstack module,
which supports test-managed neutron daemons. Currently only
neutron-server is supported and follow-up patches will support for
multiple agents.

Implements: blueprint integration-tests
Co-Authored-By: Maru Newby <marun@redhat.com>
Change-Id: Iff24fc7cd428488e918c5f06bc7f923095760b07
2015-03-26 20:21:40 +02:00
Jenkins
84243b2f08 Merge "Add rootwrap daemon mode support" 2015-03-13 23:30:35 +00:00
Maru Newby
4c32405c55 Set TEMPEST_CONFIG_DIR in the api tox env
TEMPEST_CONFIG_DIR needs to be set for the api job to execute
successfully.  Previously this was being set by the gate but local
execution required manually setting the variable.

Change-Id: Ic1364388e812a5fca26f37049242f7d09ee75fef
2015-03-13 18:17:29 +00:00
Terry Wilson
0df884ac93 Add rootwrap daemon mode support
This patch introduces support for rootwrap daemon mode. It adds
a new config option, AGENT.root_helper_daemon with no default. To
enable, set to something like:

root_helper_daemon = sudo neutron-rootwrap-daemon /etc/neutron/rootwrap.conf

The patch currently assumes that the root_helper_daemon value, and specifically
the rootwrap config, will not change once calls to execute() happen. While it
would not be hard to generate a rootwrap daemon client for each new config, I
couldn't think of a legitimate reason to support it and left it out as YAGNI.

This patch does change the behavior of the addl_env argument to create_process
and execute. Previously, an environment dict would be passed to Popen. If
a root helper was used, this environemnt would actually be passed to 'sudo'
which would filter it before passing it to the underlying command. In the case
of daemon mode, this would cause a problem as the enviornment is filtered by
sudo only once, at daemon startup. Any environment variables added at execute
time would then just be passed directly to the underyling command unfiltered.

oslo.rootwrap 1.6.0 fixes this issue by denying the passing of environment
variables to the daemon altogether. Instead, anything using rootwrap and needing
to pass additional environment variables should define an EnvFilter and run the
command with env var=val cmd. utils.execute/create_process have been modified to
run code in this way (which netns.execute already did).

No code in neutron currently uses both run_as_root=True and addl_env, so this
change does not require any change in code or filters.

DocImpact
Implements: blueprint rootwrap-daemon-mode
Change-Id: I567334bb611253c7b9d830d50c5be308a5153baf
2015-03-12 21:12:07 -05:00
Jenkins
9ea22db68e Merge "Update default tox envlist to match voting gate checks" 2015-03-10 15:55:50 +00:00
Maru Newby
30c6f56365 Add script to copy neutron api tests from tempest
This change adds a script to automate the copying of api tests from
tempest in the style of oslo_incubator.  The target path will be
neutron/tests/tempest and no manual modifications should be made to
this path until such time as neutron api test development is frozen in
tempest and development can proceed in the neutron tree.  Until that
occurs, a policy of manual once-daily synchronization is suggested.

The target path includes the name 'tempest' as a clear indication that
this is not part of neutron, and that once development is allowed to
proceed, its contents should be rewritten and removed until there is
nothing left.

So long as the tests exist in both the tempest and neutron trees,
testing effort will be duplicated.  The larger goal is to have the
tests in question removed from tempest as per the qa guidelines [1],
so this should be temporary.

1: https://wiki.openstack.org/wiki/QA/Tempest-test-removal

Change-Id: I3cd55983e610a1d61aae565f88fe5017edba1090
2015-03-06 19:57:27 +00:00
armando-migliaccio
1ed0dcf978 Add ability to run pylint check on modified files only
Change c0aa0b fused pylint with the checks done with the pep8 testenv.
This has the drawback of increasing the execution time of the command
'tox -epep8' fourfold.

This change introduces the ability to execute the pylint check on just
the list of python files affected by a specific patch. For instance,
this can be done with the following command:

   tox -epep8 HEAD~1

A kind reminder is added, so that folks who end up noticing the spike of
time execution when they run tox -epep8 without posargs, can learn how
they can get their precious minutes back.

Change-Id: Ie2a2b3a0171908d8d8aa8713baaa875adccb7efe
2015-03-05 09:24:05 -08:00
Angus Lees
40783cee5e Ensure tests run under python2.7
tox uses whatever python version that tox ran with as the default python
version for environments (py27,py3x, etc are given a more specific
default).

Debian's python-tox (for example) uses python3, but we require python2.7
- and a naive `apt-get install python-tox; tox -epep8` fails with
py3-related errors on Debian.

This change explicitly sets `basepython = python2.7` in several testing
environments that would otherwise have used the default basepython.

Change-Id: I377ac6d72dec5b85c105d8a1a74f6974efb84dcf
2015-03-02 17:06:54 +11:00
Angus Lees
dc4942d21a Update default tox envlist to match voting gate checks
Remove not-yet supported py3* environments.

Note the removed environments (py33,py34) are still supported via
explicit `tox -e`, it's only the default set that is changed here.

ObPoliticalDisclaimer:

This in no way diminishes the importance of py3 support.  In fact, the
intention is quite the opposite:

One day py3x will be supported and the py3x test will be expected to
pass.  Meanwhile, if everyone has been trained to run selective `tox
-epy27` tests then they will be unaware of the py3x status change and
won't be testing their code against py3 - or alternatively they will
believe that py3x failures are "normal" and to be ignored.

The hope with doing this change now is that we will (re)train people
that the default list of tox tests are expected to pass, and any
failures need to be investigated.

Change-Id: I992e1d6b35aa7c516c9ce14e606bbe32e895a4f0
2015-02-27 14:56:07 +11:00
armando-migliaccio
c0aa0b37c0 Move pylint checks to pep8 testenv
This change proposes to move pylint violation checks to the pep8
testenv. This changes make pylint gating within Neutron as it would
participate in the vote.  Having pylint executed on a separate job makes
it difficult to handle potential unexpected breakages, because we need
to get infra involved. When we need to renable the job, it is equally
painful.

Furthermore, it also causes us to spin an extra node, when the checks
can easily be handled by the node for the pep8 job.

Finally, having pylint running with tox -epep8 "helps" developers
become aware of pylint violations sooner rather than later, if they
"forget" to run the pylint testenv too before submitting the change.

In order to make this patch succeed, a couple of pylint violation
checks were skipped, as they slipped in, whilst the job was non-voting.

We'll tackle them in due course.

Change-Id: Ida6ae44a837d1761f5ce3e8a92f8850407f5cd16
2015-02-25 17:45:38 -08:00
Ihar Hrachyshka
754b99668f devref: consider sphinx warnings as failures
We previously introduced issues in our documentation due to not checking
for sphinx warnings [1], so let's enforce documentation validation.

This commit also fixes minor syntax issues caught by sphinx. Among
those, contribute.rst is now properly attached to ToC.

[1]: I48ab899077458d99eee6f643577d574106c1ca88

Change-Id: I9170883a20137c343f03d8b052399eacab4ae130
2015-02-23 18:48:18 +00:00
Brian Haley
71ea690727 Un-break tox for unit tests
Running 'tox -e py27 $some_unit_test' is always failing now
with tox 1.6.0, with this being printed at the beginning:

ERROR: InvocationError: could not find executable 'dsvm-functional:'

Seems commit 540e4d791ff2573aae38810f4c39f2d6f46d8898
(Automate host configuration for functional testing)
added some code to tox.ini that requires version 1.8 or later,
so make that the minimum.

Change-Id: I56313d0a22dbc4007142b8bb4890d1ac8bebff94
2015-02-17 17:22:52 -05:00
Maru Newby
540e4d791f Automate host configuration for functional testing
This change adds a new script, configure_for_func_testing.sh, that
automates configuration of a host to support functional testing.  The
script's functionality is consumed by a refactored version of
gate_hook.sh, and both minimizes runtime and removes the previous
dependency on the devstack-gate repo.

Additionally, the dsvm-functional tox env is no longer dependent on
devstack to deploy neutron's rootwrap configuration system-wide.
Rootwrap configuration is now deployed to the target tox venv on each
tox invocation.

Change-Id: Iaf43be458bdf3c4535f95ee5a3a3b47a744020a0
2015-02-14 05:13:03 +00:00
armando-migliaccio
c229b58cf2 Revert "monkey patch stdlib before importing other modules"
The projects that depend on Neutron do not play nicely with this.

This reverts commit 24b11ded7f6ff12f9484aecdb8d30498bf1b9025.

Change-Id: Ic7afd7de9db97cc3a085bc842a2d990519cf42f6
2015-02-11 17:26:33 -08:00
Terry Wilson
24b11ded7f monkey patch stdlib before importing other modules
Some oslo libraries assume that stdlib is already patched when
they are imported (e.g. oslo_concurrency.processutils tests the
'time' module for monkey_patching to detect which 'subprocess'
module to import.

This can cause issues when things like test frameworks import
modules that monkey_patch, as the order imports are made can break
this kind of check. It is always good to monkey patch as soon as
possible, hence trying to do the patching in neutron/__init__.py.

This is an alternative to https://review.openstack.org/#/c/153225/
which just patches neutron/tests/__init__.py. Unfortunately, just
monkey_patching in tests/__init__.py didn't fix all of the issues
I ran into. For example, tempest tests were failing with timeouts.

Closes-bug: #1418541
Change-Id: I7f2115a99acae5b6d61aab2f7334f498b8d99858
2015-02-09 19:49:27 -06:00
Salvatore Orlando
568f3562ae Restore and fix vmware unit tests
This patch actually restores vmware unit tests, by adding back
the __init__.py file which was renamed during the advanced
service spinoff and not reinstated when fixing vmware code to
comply with the spinoff.

Furthermore, this patch also fixes a minor issue with context
usage in vmware unit tests which is triggering failures because
of the new database constraint introduced with the commit
79c97120de9cff4d0992b5d41ff4bbf05e890f89

Finally, flake8 tests on vmware directories are also restored
with this patch.

Change-Id: Ib63463fca28bbb4a1eb60b8f5f4b63b3d3367c9e
Closes-Bug: #1416593
Closes-Bug: #1416596
2015-02-05 10:10:34 -08:00
Terry Wilson
2843bc8af0 Fix flake exclude matching of .*
When using \.* for a match, flake8 tests all files in .venv on my
machine. Replacing this match with ./.* fixes the issue.

Change-Id: If5617daad95e8b33888b672e36f38ade07d7cb89
2015-01-30 11:05:34 -06:00
Ihar Hrachyshka
7f37bf413a pep8: cleaned up excludes
Don't over-exclude files from pep8 automation. Specifically, tools/*
should maintain common Python style as any other Neutron code.

Don't exclude every single dot-file/dot-dir separately but instead
apply .* wildcard.

Drop rally-scenarios exclusion. First, the directory is now rally-jobs,
so exclusion didn't work. Second, it's better to also apply pep8 checks
for those files (there are some Python files inside the directory).

Change-Id: Ife1d8a538c1bdddac30ca1c30c48a71564860624
2015-01-23 15:04:56 +01:00
Ihar Hrachyshka
8714ab2809 Remove check_i18n tox target
Now that we have hacking rules to check proper localization, drop the
target.

Change-Id: Idf6e6c9e6096c4b7b2034be94c88460b744b7532
2015-01-23 15:04:43 +01:00
Ihar Hrachyshka
35d838ff60 Migrate to oslo.concurrency
Namespaces are not used anymore, so imports are for oslo_concurrency,
not oslo.concurrency.

lockutils direct call is not supported anymore, so using shipped
lockutils-wrapper instead.

Use ExternalLockFixture to set lock_path for unit testing.

Updated cache and cache/_backends module from oslo-incubator to use
oslo.concurrency and not incubator version of lockutils module.

Dropped lockutils incubator module that is now moved to oslo.concurrency. Not
dropping fixture module that includes lockutils fixture since other fixtures
are still used in the tree.

Closes-Bug: #1387092
Change-Id: I2ba2295f8f5d55f272a9d23555940586b25b5a1c
2015-01-15 21:01:06 +01:00
Ihar Hrachyshka
548ab45a50 hacking: enable H238 (old style class declaration, use new style)
The rule was added in hacking 0.10 and is useful for migration to Python 3.

Change-Id: I8b45413cf34e5a9db8074f9029410e3b22a92640
2015-01-12 23:46:11 +01:00
Ihar Hrachyshka
967d458981 hacking: enable W292 (no newline at end of file)
This check was added in hacking 0.10.

Change-Id: If063742bc1be595d1d91b60d9059a01e94d31696
2015-01-12 23:46:11 +01:00
Ihar Hrachyshka
1de25088b4 Update hacking to 0.10
Release notes:
http://git.openstack.org/cgit/openstack-dev/hacking/tag/?id=0.10.0

* Remove references in tox.ini to removed rules.
* Remove custom @author check since it's now implemented in hacking.
* Move N323 to N322 that is freed due to @author check removal.
* Temporarily skip W292 (no newline at the end of file).
* Temporarily skip H238 (old style classes).

Change-Id: I6d990a564df6a312bd09b2a152315bbdba732082
2015-01-12 23:46:06 +01:00
Maru Newby
501df939a5 Add support for retargetable functional api testing
This patch introduces the concept of a 'retargetable' functional api
test.  Such a test targets an abstract client class, and by varying
the implementation of the client, the test can target multiple
backends.

The test added by this patch (test_network_lifecycle) can be run
against the programmatic plugin api (for configured plugins) via both
tox -e functional and tox -e dsvm-functional.  The latter env is used
by the gating neutron-dsvm-functional job.

The test can also be run against a live Neutron service via 'tox -e api'
which will soon be run as part of the check queue by the
neutron-dsvm-api job [1].  Running this tox env requires
devstack-deployed Neutron and Tempest.

The intention is to refactor the existing plugin tests
(e.g. NeutronDbPluginV2TestCase) to use this model.  Functional tests
don't have to isolate functionality - they just need to exercise it -
so fewer tests will be required.  The new tests will be able to target
plugins directly rather than through the wsgi stack, so execution time
will be decreased.  The refactored tests should be easier to maintain
and take less time to run.

Perhaps best of all, since the same tests will be able to target a
deployed service in the neutron-dsvm-api job, the deployed behaviour
of api changes will finally be able to gate merges to the Neutron
tree.

Notable parts of the change:

- tests/api
  - base_v2 -      defines the client interface (BaseNeutronClient)
                   and the base class (BaseTestApi) for the
                   retargetable test (test_network_lifecycle)

  - test_v2_rest - implements the client interface for the tempest
                   rest client and configures the retargetable test
                   with scenarios for json serialization

- tests/functional/api
  - test_v2_plugin - implements the client interface for the
                     programmatic plugin api and configures the
                     retargetable test with scenarios targeting the
                     linuxbridge and openvswitch plugins

- tests/unit
  - refactor bits of the existing plugin tests for reuse

1: https://review.openstack.org/#/c/82226/

Implements: bp retargetable-functional-testing
Change-Id: Ib5470040c0fa91ec143f38d273e1e259b3adfb2e
2015-01-06 02:37:59 +00:00
armando-migliaccio
4fdda65a5b Clean-up sanity checks done via shell scripts
Move the various checks done via shell into a single file;
this is cleaner and we'll have a lot more space to explain
what is going on.

Related-bug: #1404605

Change-Id: Ibb451c6a25217f37b73983c30891f55b35f143cd
2014-12-23 16:25:06 -08:00
armando-migliaccio
3bf7e45742 Prevent symlinks to be added to the tree
Symlinks cannot be allowed because they are not supported by distutils.
Adding them results into package build failures.

This patch add a check that verifies that no symlinks can slip in.

Closes-bug: #1404605

Change-Id: I0d308127081bb2fa4ff7d7e0ed2f1b6e915163c9
2014-12-20 20:57:54 -08:00
Henry Gessau
3e0745827f Move DB TestModelsMigrations from unit to functional
The tests to check that DB migrations and models are in sync depends
on the mysql and postgresql backends being available with a specific
DB user and database created. This violates the principles for unit
tests and therefore these tests should be moved to functional tests.

For these tests to work in the functional job in the gate, the
backends must be installed and the DB user and database created.
We do this via the functional gate hook.

Closes-bug: #1372981

Change-Id: I7b89feef3f19ca07dbfb05acfaa30529a5bf683d
2014-12-18 22:41:05 -05:00
Jakub Libosvar
60e802a566 Set timeout for functional job
As functional jobs take more time to finish than unit tests and also
there is a chance that test will hang due to system interaction, this
patch sets maximum execution time to 90 seconds per test.

Change-Id: Ib58a1b53ace178e1bf99150628fa5576b079e8bc
2014-12-15 13:30:53 +00:00
Jenkins
764619df9a Merge "Services split, pass 2" 2014-12-10 22:14:55 +00:00
armando-migliaccio
0504420324 Prettify tox output for functional tests
Change I6a079ad introduced some magic to enable showing test output
as the test run. Do the same for *-functional tests too, by reusing
the default testenv

Change-Id: I6d1ede1c66e7b62c68449224f274417a5d66c12f
2014-12-10 10:33:11 -08:00
Doug Wiegley
ec5fb4327e Services split, pass 2
- Nuke more services code, killing some refs in vmware plugin
- Vmware plugin foreign key relationships are temporary disabled
- Vmware unit tests are temporarily disabled
- Remove router insertion test, as its only user is going away
- Add thin service plugin shims
- Temporarily disable model sync test

Post services-split, existing neutron.conf configurations may contain
references to in-tree plugin classes.  Add thin shims so that those configs
will continue to work.

Change-Id: I5dd26def685bcc643e35badc23885afc6240ae94
2014-12-10 08:01:11 -07:00
Maru Newby
acde1b60dd Remove TODO for H404
There is no timeline or intention to fix this - it's a non-functional
formatting change.

Change-Id: Ib8e75bca41dbcd9dbb188ba8ee03ef51a479d9cc
2014-12-09 13:04:38 -07:00
YAMAMOTO Takashi
846ae08d87 tox.ini: Prevent casual addition of bash dependency
While bash is not available on every environments, there seems to be
a tendency to introduce more bash dependency very casually.  This check
is intended to be a reminder to give people a chance to consider
alternatives.

Related-Bug: #1398266
Change-Id: I5103e0d7c111880d9a02dd93de56c567066ed14c
2014-12-05 03:25:47 +00:00
YAMAMOTO Takashi
828afa4afa pretty_tox.sh: Portablity improvement
A recent change (commit 0d5a11d9c722870f9c5e31a993219c7e240b4e19)
introduced bash dependency.  It broke my environment, where bash
is not available.  This change aims to restore it.

As far as I undestand, the change in question requires bash for
the "pipefail" feature.  Fortunately there's a more portable
well-known trick for the purpose.

Closes-Bug: #1398266
Change-Id: Id3561d81462923d20ad39584ba4cf8e1a294a8a8
2014-12-02 13:27:46 +09:00
Jenkins
af49bd7d10 Merge "enable H401 hacking check" 2014-11-30 16:59:05 +00:00
Jenkins
988bd650d2 Merge "Migrate to oslo.i18n" 2014-11-28 12:14:32 +00:00