Merge "Clean up stdout/stderr leakage in cmd testing"

This commit is contained in:
Jenkins
2016-09-26 17:03:22 +00:00
committed by Gerrit Code Review
4 changed files with 29 additions and 11 deletions

View File

@@ -12,9 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import fixtures
import mock
from oslo_log import log as logging
from oslo_reports import guru_meditation_report as gmr
from six.moves import StringIO
from nova.cmd import baseproxy
from nova import config
@@ -26,6 +28,11 @@ from nova import version
@mock.patch.object(config, 'parse_args', new=lambda *args, **kwargs: None)
class BaseProxyTestCase(test.NoDBTestCase):
def setUp(self):
super(BaseProxyTestCase, self).setUp()
self.stderr = StringIO()
self.useFixture(fixtures.MonkeyPatch('sys.stderr', self.stderr))
@mock.patch('os.path.exists', return_value=False)
# NOTE(mriedem): sys.exit raises TestingException so we can actually exit
# the test normally.
@@ -35,6 +42,8 @@ class BaseProxyTestCase(test.NoDBTestCase):
self.assertRaises(test.TestingException, baseproxy.proxy,
'0.0.0.0', '6080')
mock_exit.assert_called_once_with(-1)
self.assertEqual(self.stderr.getvalue(),
"SSL only and self.pem not found\n")
@mock.patch('os.path.exists', return_value=False)
@mock.patch('sys.exit', side_effect=test.TestingException)
@@ -63,13 +72,12 @@ class BaseProxyTestCase(test.NoDBTestCase):
RequestHandlerClass=websocketproxy.NovaProxyRequestHandler)
mock_start.assert_called_once_with()
@mock.patch('sys.stderr.write')
@mock.patch('os.path.exists', return_value=False)
@mock.patch('sys.exit', side_effect=test.TestingException)
def test_proxy_exit_with_error(self, mock_exit, mock_exists, mock_stderr):
def test_proxy_exit_with_error(self, mock_exit, mock_exists):
self.flags(ssl_only=True)
self.assertRaises(test.TestingException, baseproxy.proxy,
'0.0.0.0', '6080')
mock_stderr.assert_called_once_with(
'SSL only and self.pem not found\n')
self.assertEqual(self.stderr.getvalue(),
"SSL only and self.pem not found\n")
mock_exit.assert_called_once_with(-1)

View File

@@ -17,7 +17,9 @@
Unit tests for the common functions used by different CLI interfaces.
"""
import fixtures
import mock
from six.moves import StringIO
from nova.cmd import common as cmd_common
from nova.db import api
@@ -128,6 +130,8 @@ class TestCmdCommon(test.NoDBTestCase):
@mock.patch.object(cmd_common.utils, 'validate_args')
@mock.patch.object(cmd_common, 'CONF')
def test_get_action_fn_missing_args(self, mock_CONF, mock_validate_args):
# Don't leak the actual print call
self.useFixture(fixtures.MonkeyPatch('sys.stdout', StringIO()))
mock_validate_args.return_value = ['foo']
mock_CONF.category.action_fn = mock.sentinel.action_fn
mock_CONF.category.action_args = []

View File

@@ -14,7 +14,9 @@
import argparse
import fixtures
import mock
from six.moves import StringIO
from nova.cmd import idmapshift
from nova import test
@@ -35,8 +37,10 @@ class FakeStat(object):
class BaseTestCase(test.NoDBTestCase):
def __init__(self, *args, **kwargs):
super(BaseTestCase, self).__init__(*args, **kwargs)
def setUp(self):
super(BaseTestCase, self).setUp()
self.useFixture(fixtures.MonkeyPatch('sys.stdout', StringIO()))
self.uid_maps = [(0, 10000, 10), (10, 20000, 1000)]
self.gid_maps = [(0, 10000, 10), (10, 20000, 1000)]

View File

@@ -17,7 +17,9 @@
Unit tests for the nova-policy-check CLI interfaces.
"""
import fixtures
import mock
from six.moves import StringIO
from nova.cmd import policy_check
import nova.conf
@@ -27,7 +29,6 @@ from nova import exception
from nova.policies import base as base_policies
from nova.policies import instance_actions as ia_policies
from nova import test
from nova.tests import fixtures
from nova.tests.unit import fake_instance
from nova.tests.unit import policy_fixture
@@ -38,7 +39,8 @@ class TestPolicyCheck(test.NoDBTestCase):
def setUp(self):
super(TestPolicyCheck, self).setUp()
self.output = self.useFixture(fixtures.OutputStreamCapture())
self.output = StringIO()
self.useFixture(fixtures.MonkeyPatch('sys.stdout', self.output))
self.policy = self.useFixture(policy_fixture.RealPolicyFixture())
self.cmd = policy_check.PolicyCommands()
@@ -57,7 +59,7 @@ class TestPolicyCheck(test.NoDBTestCase):
mock.sentinel.target)
mock_filter_rules.assert_called_once_with(
mock_get_context.return_value, '', mock_get_target.return_value)
self.assertEqual('\n'.join(fake_rules), self.output.stdout)
self.assertEqual('\n'.join(fake_rules) + '\n', self.output.getvalue())
@mock.patch.object(nova_context, 'RequestContext')
@mock.patch.object(policy_check, 'CONF')
@@ -170,7 +172,7 @@ class TestPolicyCheck(test.NoDBTestCase):
return_value="x.x.x")
def test_main_version(self, mock_version_string):
self._check_main(category_name='version')
self.assertEqual("x.x.x", self.output.stdout)
self.assertEqual("x.x.x\n", self.output.getvalue())
@mock.patch.object(policy_check.cmd_common, 'print_bash_completion')
def test_main_bash_completion(self, mock_print_bash):
@@ -195,4 +197,4 @@ class TestPolicyCheck(test.NoDBTestCase):
mock_get_action_fn.return_value = (mock_fn, [], {})
self._check_main(expected_return_value=1)
self.assertIn("error: ", self.output.stdout)
self.assertIn("error: ", self.output.getvalue())