summaryrefslogtreecommitdiff
path: root/tests/disabled_shell_task.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/disabled_shell_task.py')
-rw-r--r--tests/disabled_shell_task.py231
1 files changed, 231 insertions, 0 deletions
diff --git a/tests/disabled_shell_task.py b/tests/disabled_shell_task.py
new file mode 100644
index 0000000..407e335
--- /dev/null
+++ b/tests/disabled_shell_task.py
@@ -0,0 +1,231 @@
+# Copyright 2014 Rackspace Australia
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import base
+import fakes
+import json
+import logging
+import mock
+import os
+import uuid
+
+from turbo_hipster.lib.models import ShellTask, Task
+
+
+class TestTaskRunner(base.TestWithGearman):
+ log = logging.getLogger("TestTaskRunner")
+
+ def test_simple_job_passes(self):
+ self.start_server()
+ zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
+ self.config['zuul_server']['gearman_port'])
+
+ job_uuid = str(uuid.uuid1())[:8]
+ data_req = {
+ 'ZUUL_UUID': job_uuid,
+ 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
+ 'ZUUL_PIPELINE': 'check',
+ 'ZUUL_URL': 'git://git.openstack.org/',
+ 'BRANCH': 'master',
+ 'BASE_LOG_PATH': '56/123456/8',
+ 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
+ }
+
+ zuul.submit_job('build:do_something_shelly', data_req)
+ zuul.wait_for_completion()
+
+ last_data = json.loads(zuul.job.data[-1])
+ self.log.debug(last_data)
+
+ self.assertTrue(zuul.job.complete)
+ self.assertFalse(zuul.job.failure)
+ self.assertEqual("SUCCESS", last_data['result'])
+
+ task_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'task_output.log'
+ ))
+
+ self.assertIn("Step 1: Setup environment", task_output_file.readline())
+
+ git_prep_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'git_prep.log'
+ ))
+
+ self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
+
+ shell_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'shell_output.log'
+ ))
+
+ self.assertIn("ls -lah", shell_output_file.readline())
+
+ def test_simple_job_fails(self):
+ # Test when the script fails
+ self.start_server()
+ zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
+ self.config['zuul_server']['gearman_port'])
+
+ job_uuid = str(uuid.uuid1())[:8]
+ data_req = {
+ 'ZUUL_UUID': job_uuid,
+ 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
+ 'ZUUL_PIPELINE': 'check',
+ 'ZUUL_URL': 'git://git.openstack.org/',
+ 'BRANCH': 'master',
+ 'BASE_LOG_PATH': '56/123456/8',
+ 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
+ }
+
+ # Modify the job to fail. The git_path, job_working_dir and unqiue_id
+ # are all passed to the shell script. If we 'ls unique_id' it'll fail
+ # since it doesn't exist.
+ self.config['jobs'][0]['shell_script'] = 'ls -lah'
+
+ zuul.submit_job('build:do_something_shelly', data_req)
+ zuul.wait_for_completion()
+
+ last_data = json.loads(zuul.job.data[-1])
+ self.log.debug(last_data)
+
+ self.assertTrue(zuul.job.complete)
+ self.assertTrue(zuul.job.failure)
+ self.assertEqual("Return code from test script was non-zero (2)",
+ last_data['result'])
+
+ task_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'task_output.log'
+ ))
+
+ self.assertIn("Step 1: Setup environment", task_output_file.readline())
+
+ git_prep_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'git_prep.log'
+ ))
+
+ self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
+
+ shell_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'shell_output.log'
+ ))
+
+ self.assertIn("ls -lah", shell_output_file.readline())
+
+ @mock.patch.object(ShellTask, '_parse_and_check_results')
+ def test_logs_uploaded_during_failure(self,
+ mocked_parse_and_check_results):
+ # When turbo-hipster itself fails (eg analysing results) it should
+ # still upload the python logging log if it can
+
+ def side_effect():
+ raise Exception('check results failed!')
+
+ #ShellTask._parse_and_check_results = _fake_parse_and_check_results
+ mocked_parse_and_check_results.side_effect = side_effect
+
+ self.start_server()
+ zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
+ self.config['zuul_server']['gearman_port'])
+
+ job_uuid = str(uuid.uuid1())[:8]
+ data_req = {
+ 'ZUUL_UUID': job_uuid,
+ 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
+ 'ZUUL_PIPELINE': 'check',
+ 'ZUUL_URL': 'git://git.openstack.org/',
+ 'BRANCH': 'master',
+ 'BASE_LOG_PATH': '56/123456/8',
+ 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
+ }
+
+ zuul.submit_job('build:do_something_shelly', data_req)
+ zuul.wait_for_completion()
+
+ last_data = json.loads(zuul.job.data[-1])
+ self.log.debug(last_data)
+
+ self.assertTrue(zuul.job.complete)
+ self.assertTrue(zuul.job.failure)
+ self.assertEqual("FAILURE running the job\n"
+ "Exception: check results failed!",
+ last_data['result'])
+
+ git_prep_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'git_prep.log'
+ ))
+
+ self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
+
+ shell_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'shell_output.log'
+ ))
+
+ self.assertIn("ls -lah", shell_output_file.readline())
+
+ task_output_file = open(os.path.join(
+ self.config['publish_logs']['path'], data_req['LOG_PATH'],
+ 'task_output.log'
+ ))
+
+ task_output_lines = task_output_file.readlines()
+ self.assertIn("Step 1: Setup environment", task_output_lines[0])
+ self.assertIn("Something failed running the job!",
+ task_output_lines[6])
+ self.assertIn("Exception: check results failed!",
+ task_output_lines[len(task_output_lines) - 1])
+
+ @mock.patch.object(Task, '_upload_results')
+ def test_exception_when_uploading_fails(self, mocked_upload_results):
+
+ def side_effect():
+ raise Exception('uploading results failed!')
+
+ mocked_upload_results.side_effect = side_effect
+
+ self.start_server()
+ zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
+ self.config['zuul_server']['gearman_port'])
+
+ job_uuid = str(uuid.uuid1())[:8]
+ data_req = {
+ 'ZUUL_UUID': job_uuid,
+ 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
+ 'ZUUL_PIPELINE': 'check',
+ 'ZUUL_URL': 'git://git.openstack.org/',
+ 'BRANCH': 'master',
+ 'BASE_LOG_PATH': '56/123456/8',
+ 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
+ }
+
+ zuul.submit_job('build:do_something_shelly', data_req)
+ zuul.wait_for_completion()
+
+ last_data = json.loads(zuul.job.data[-1])
+ self.log.debug(last_data)
+
+ self.assertTrue(zuul.job.complete)
+ self.assertTrue(zuul.job.failure)
+ self.assertEqual("FAILURE during cleanup and log upload\n"
+ "Exception: uploading results failed!",
+ last_data['result'])
+
+ def test_failure_during_setup(self):
+ pass