You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ke...@apache.org on 2014/11/20 02:05:54 UTC

incubator-aurora git commit: Fix test_version to use explicit injection points.

Repository: incubator-aurora
Updated Branches:
  refs/heads/master 1d78ac564 -> 065a3c5c8


Fix test_version to use explicit injection points.

Testing Done:
./pants src/test/python:all
./pants src/main/python/apache/aurora/client/bin:aurora_client
dist/aurora_client.pex version

Bugs closed: AURORA-938

Reviewed at https://reviews.apache.org/r/28250/


Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/065a3c5c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/065a3c5c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/065a3c5c

Branch: refs/heads/master
Commit: 065a3c5c82b50b703662b4eb99c1529c951c5899
Parents: 1d78ac5
Author: Kevin Sweeney <ke...@apache.org>
Authored: Wed Nov 19 14:59:16 2014 -0800
Committer: Kevin Sweeney <ke...@apache.org>
Committed: Wed Nov 19 17:05:45 2014 -0800

----------------------------------------------------------------------
 .../apache/aurora/client/commands/core.py       | 34 +++++----
 .../aurora/client/commands/test_version.py      | 73 +++++++++++++++-----
 2 files changed, 76 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/065a3c5c/src/main/python/apache/aurora/client/commands/core.py
----------------------------------------------------------------------
diff --git a/src/main/python/apache/aurora/client/commands/core.py b/src/main/python/apache/aurora/client/commands/core.py
index 852b6b1..ee22716 100644
--- a/src/main/python/apache/aurora/client/commands/core.py
+++ b/src/main/python/apache/aurora/client/commands/core.py
@@ -148,27 +148,35 @@ def wait_kill_tasks(scheduler, job_key, instances=None):
     die('Tasks were not killed in time.')
 
 
-@app.command
-def version(args):
-  """usage: version
+_API_VERSION_MESSAGE = "Aurora API version: %s" % CURRENT_API_VERSION
+_BUILD_INFO_HEADER = "Aurora client build info:"
+_NO_BUILD_INFO_MESSAGE = "Aurora client build info not available"
 
-  Prints information about the version of the aurora client being run.
-  """
+
+def _version(_argv=sys.argv, _print=print, _from_pex=PexInfo.from_pex):
   try:
-    pex_info = PexInfo.from_pex(sys.argv[0])
-    properties = pex_info.build_properties
+    properties = _from_pex(_argv[0]).build_properties
     # Different versions of pants/pex set different keys in the PEX-INFO file. This approach
     # attempts to work regardless of the pants/pex version used.
     build_sha = properties.get('sha', properties.get('revision'))
     build_date = properties.get('date', properties.get('datetime'))
 
-    print("Aurora client build info:")
-    print("\tsha: %s" % build_sha)
-    print("\tdate: %s" % build_date)
+    _print(_BUILD_INFO_HEADER)
+    _print("\tsha: %s" % build_sha)
+    _print("\tdate: %s" % build_date)
+
+  except (AttributeError, IOError, OSError, BadZipfile):
+    _print(_NO_BUILD_INFO_MESSAGE)
+  _print(_API_VERSION_MESSAGE)
 
-  except (IOError, OSError, BadZipfile):
-    print("Aurora client build info not available")
-  print("Aurora API version: %s" % CURRENT_API_VERSION)
+
+@app.command
+def version():
+  """usage: version
+
+  Prints information about the version of the aurora client being run.
+  """
+  _version()
 
 
 def maybe_disable_hooks(options):

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/065a3c5c/src/test/python/apache/aurora/client/commands/test_version.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/commands/test_version.py b/src/test/python/apache/aurora/client/commands/test_version.py
index 5c3c45a..d3b315e 100644
--- a/src/test/python/apache/aurora/client/commands/test_version.py
+++ b/src/test/python/apache/aurora/client/commands/test_version.py
@@ -13,33 +13,70 @@
 #
 from __future__ import print_function
 
-from mock import patch, PropertyMock
+from unittest import TestCase
+from zipfile import BadZipfile
 
-from apache.aurora.client.commands.core import version
+from mock import call, create_autospec
+from twitter.common.python.pex import PexInfo
 
-from .util import AuroraClientCommandTest
+from apache.aurora.client.commands.core import (
+    _API_VERSION_MESSAGE,
+    _BUILD_INFO_HEADER,
+    _NO_BUILD_INFO_MESSAGE,
+    _version
+)
 
 
-class TestVersionCommand(AuroraClientCommandTest):
+class TestVersionCommand(TestCase):
 
-  @patch('__builtin__.print')
-  @patch('twitter.common.python.pex.PexInfo.build_properties', new_callable=PropertyMock)
-  def test_version_with_old_pants(self, mock_buildinfo, mock_print):
+  def setUp(self):
+    self.mock_print = create_autospec(print, spec_set=True)
+    self.mock_from_pex = create_autospec(PexInfo.from_pex, spec_set=True)
+    self.mock_argv = ['test-aurora.pex']
+
+    self.mock_pex_info = create_autospec(PexInfo, instance=True, spec_set=True)
+
+  def _invoke_version(self):
+    _version(_argv=self.mock_argv, _print=self.mock_print, _from_pex=self.mock_from_pex)
+
+  def test_version_with_old_pants(self):
     # Old versions of pants wrote out sha and date keys
-    mock_buildinfo.return_value = {'sha': 'foo', 'date': 'somedate'}
-    version([])
-    assert mock_print.call_count == 4
-    calls = mock_print.mock_calls
+    self.mock_pex_info.build_properties = {'sha': 'foo', 'date': 'somedate'}
+    self.mock_from_pex.return_value = self.mock_pex_info
+
+    self._invoke_version()
+
+    self.mock_from_pex.assert_called_once_with(self.mock_argv[0])
+    assert self.mock_print.call_count == 4
+    calls = self.mock_print.mock_calls
+    assert calls[0] == call(_BUILD_INFO_HEADER)
     assert "foo" in calls[1][1][0]
     assert "somedate" in calls[2][1][0]
+    assert calls[3] == call(_API_VERSION_MESSAGE)
 
-  @patch('__builtin__.print')
-  @patch('twitter.common.python.pex.PexInfo.build_properties', new_callable=PropertyMock)
-  def test_version_with_new_pants(self, mock_buildinfo, mock_print):
+  def test_version_with_new_pants(self):
     # New versions of pants write out revision and datetime
-    mock_buildinfo.return_value = {'revision': 'bar', 'datetime': 'somedatetime'}
-    version([])
-    assert mock_print.call_count == 4
-    calls = mock_print.mock_calls
+    self.mock_pex_info.build_properties = {'revision': 'bar', 'datetime': 'somedatetime'}
+    self.mock_from_pex.return_value = self.mock_pex_info
+
+    self._invoke_version()
+
+    self.mock_from_pex.assert_called_once_with(self.mock_argv[0])
+    assert self.mock_print.call_count == 4
+    calls = self.mock_print.mock_calls
+    assert calls[0] == call(_BUILD_INFO_HEADER)
     assert "bar" in calls[1][1][0]
     assert "somedatetime" in calls[2][1][0]
+    assert calls[3] == call(_API_VERSION_MESSAGE)
+
+  def test_version_with_no_pants(self):
+    # If we aren't a PEX we'll be a bad zip file.
+    self.mock_from_pex.side_effect = BadZipfile
+
+    self._invoke_version()
+
+    self.mock_from_pex.assert_called_once_with(self.mock_argv[0])
+    self.mock_print.assert_has_calls([
+      call(_NO_BUILD_INFO_MESSAGE),
+      call(_API_VERSION_MESSAGE),
+    ])