Index: client/tests/swarming_test.py |
diff --git a/client/tests/swarming_test.py b/client/tests/swarming_test.py |
index 6685581ea1e19522eff0da944af95551fc85192f..55f778f52a30b8cb6d8baf3a57850c8eab356282 100755 |
--- a/client/tests/swarming_test.py |
+++ b/client/tests/swarming_test.py |
@@ -14,6 +14,7 @@ import sys |
import tempfile |
import threading |
import time |
+import traceback |
import unittest |
# net_utils adjusts sys.path. |
@@ -102,7 +103,11 @@ def gen_request_data(properties=None, **kwargs): |
'extra_args': ['--some-arg', '123'], |
'grace_period_secs': 30, |
'idempotent': False, |
- 'inputs_ref': None, |
+ 'inputs_ref': { |
+ 'isolated': None, |
+ 'isolatedserver': '', |
+ 'namespace': 'default-gzip', |
+ }, |
'io_timeout_secs': 60, |
'outputs': [], |
'secret_bytes': None, |
@@ -236,11 +241,9 @@ class Common(object): |
try: |
return main(args) |
except: |
- logging.exception('Unexpected exception thrown in main') |
- logging.error( |
- 'STDOUT:\n%s\nSTDERR:\n%s', |
- sys.stdout.getvalue(), sys.stderr.getvalue()) |
- self.fail() |
+ data = '%s\nSTDOUT:\n%s\nSTDERR:\n%s' % ( |
+ traceback.format_exc(), sys.stdout.getvalue(), sys.stderr.getvalue()) |
+ self.fail(data) |
class NetTestCase(net_utils.TestCase, Common): |
@@ -340,7 +343,11 @@ class TestSwarmingTrigger(NetTestCase): |
extra_args=[], |
grace_period_secs=30, |
idempotent=False, |
- inputs_ref=None, |
+ inputs_ref={ |
+ 'isolated': None, |
+ 'isolatedserver': '', |
+ 'namespace': 'default-gzip', |
+ }, |
io_timeout_secs=60, |
outputs=[], |
secret_bytes=None), |
@@ -411,7 +418,11 @@ class TestSwarmingTrigger(NetTestCase): |
extra_args=[], |
grace_period_secs=30, |
idempotent=False, |
- inputs_ref=None, |
+ inputs_ref={ |
+ 'isolated': None, |
+ 'isolatedserver': '', |
+ 'namespace': 'default-gzip', |
+ }, |
io_timeout_secs=60, |
outputs=[], |
secret_bytes=None), |
@@ -474,7 +485,11 @@ class TestSwarmingTrigger(NetTestCase): |
extra_args=[], |
grace_period_secs=30, |
idempotent=False, |
- inputs_ref=None, |
+ inputs_ref={ |
+ 'isolated': None, |
+ 'isolatedserver': '', |
+ 'namespace': 'default-gzip', |
+ }, |
io_timeout_secs=60, |
outputs=[], |
secret_bytes=None), |
@@ -913,6 +928,68 @@ class TestMain(NetTestCase): |
' https://localhost:1/user/task/12300\n', |
'') |
+ def test_run_raw_cmd_isolated(self): |
+ # Minimalist use. |
+ request = { |
+ 'expiration_secs': 21600, |
+ 'name': u'None/foo=bar/' + FILE_HASH, |
+ 'parent_task_id': '', |
+ 'priority': 100, |
+ 'properties': { |
+ 'caches': [], |
+ 'cipd_input': None, |
+ 'command': ['python', '-c', 'print(\'hi\')'], |
+ 'dimensions': [ |
+ {'key': 'foo', 'value': 'bar'}, |
+ ], |
+ 'env': [], |
+ 'execution_timeout_secs': 3600, |
+ 'extra_args': None, |
+ 'grace_period_secs': 30, |
+ 'idempotent': False, |
+ 'inputs_ref': { |
+ 'isolated': FILE_HASH, |
+ 'isolatedserver': 'https://localhost:2', |
+ 'namespace': 'default-gzip', |
+ }, |
+ 'io_timeout_secs': 1200, |
+ 'outputs': [], |
+ 'secret_bytes': None, |
+ }, |
+ 'tags': [], |
+ 'user': None, |
+ } |
+ result = gen_request_response(request) |
+ self.expected_requests( |
+ [ |
+ ( |
+ 'https://localhost:1/api/swarming/v1/tasks/new', |
+ {'data': request}, |
+ result, |
+ ), |
+ ]) |
+ ret = self.main_safe([ |
+ 'trigger', |
+ '--swarming', 'https://localhost:1', |
+ '--dimension', 'foo', 'bar', |
+ '--raw-cmd', |
+ '--isolate-server', 'https://localhost:2', |
+ '--isolated', FILE_HASH, |
+ '--', |
+ 'python', |
+ '-c', |
+ 'print(\'hi\')', |
+ ]) |
+ actual = sys.stdout.getvalue() |
+ self.assertEqual(0, ret, (actual, sys.stderr.getvalue())) |
+ self._check_output( |
+ u'Triggered task: None/foo=bar/' + FILE_HASH + u'\n' |
+ u'To collect results, use:\n' |
+ u' swarming.py collect -S https://localhost:1 12300\n' |
+ u'Or visit:\n' |
+ u' https://localhost:1/user/task/12300\n', |
+ u'') |
+ |
def test_run_raw_cmd_with_service_account(self): |
# Minimalist use. |
request = { |
@@ -979,7 +1056,7 @@ class TestMain(NetTestCase): |
properties={ |
'command': None, |
'inputs_ref': { |
- 'isolated': u'1111111111111111111111111111111111111111', |
+ 'isolated': FILE_HASH, |
'isolatedserver': 'https://localhost:2', |
'namespace': 'default-gzip', |
}, |
@@ -1154,7 +1231,7 @@ class TestMain(NetTestCase): |
}, |
'command': None, |
'inputs_ref': { |
- 'isolated': u'1111111111111111111111111111111111111111', |
+ 'isolated': FILE_HASH, |
'isolatedserver': 'https://localhost:2', |
'namespace': 'default-gzip', |
}, |
@@ -1212,8 +1289,8 @@ class TestMain(NetTestCase): |
'Usage: swarming.py trigger [options] (hash|isolated) ' |
'[-- extra_args|raw command]\n' |
'\n' |
- 'swarming.py: error: Use --isolated, --raw-cmd or \'--\' to pass ' |
- 'arguments to the called process.\n') |
+ 'swarming.py: error: Specify at least one of --raw-cmd or --isolated ' |
+ 'or both\n') |
def test_trigger_no_env_vars(self): |
with self.assertRaises(SystemExit): |
@@ -1247,8 +1324,8 @@ class TestMain(NetTestCase): |
'Usage: swarming.py trigger [options] (hash|isolated) ' |
'[-- extra_args|raw command]' |
'\n\n' |
- 'swarming.py: error: --isolate-server is required.' |
- '\n') |
+ 'swarming.py: error: Specify at least one of --raw-cmd or --isolated ' |
+ 'or both\n') |
def test_trigger_no_dimension(self): |
with self.assertRaises(SystemExit): |
@@ -1290,7 +1367,7 @@ class TestMain(NetTestCase): |
'grace_period_secs': 30, |
'idempotent': True, |
'inputs_ref': { |
- 'isolated': '1'*40, |
+ 'isolated': FILE_HASH, |
'isolatedserver': 'https://localhost:2', |
'namespace': 'default-gzip', |
}, |