# -*- encoding: UTF8 -*- # Test harness for RequireJob.py from __future__ import print_function import sys import unittest import os import re sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) import testp4 import P4 import logging from RequireJob import RequireJob os.environ["LOGS"] = "." LOGGER_NAME = "TestRequireJob" LOG_FILE = "log-RequireJob.log" python3 = sys.version_info[0] >= 3 def ensureDirectory(directory): if not os.path.isdir(directory): os.makedirs(directory) def localDirectory(root, *dirs): "Create and ensure it exists" dir_path = os.path.join(root, *dirs) ensureDirectory(dir_path) return dir_path def create_file(file_name, contents): "Create file with specified contents" ensureDirectory(os.path.dirname(file_name)) if python3: contents = bytes(contents.encode()) with open(file_name, 'wb') as f: f.write(contents) def append_to_file(file_name, contents): "Append contents to file" if python3: contents = bytes(contents.encode()) with open(file_name, 'ab+') as f: f.write(contents) class TestRequireJob(unittest.TestCase): def __init__(self, methodName='runTest'): super(TestRequireJob, self).__init__(methodName=methodName) self.logger = logging.getLogger(LOGGER_NAME) self.logger.setLevel(logging.DEBUG) logformat = '%(levelname)s [%(asctime)s] [%(filename)s : %(lineno)d] - %(message)s' logging.basicConfig(format=logformat, filename=LOG_FILE, level=logging.DEBUG) def assertRegex(self, *args, **kwargs): if python3: return super(TestRequireJob, self).assertRegex(*args, **kwargs) else: return super(TestRequireJob, self).assertRegexpMatches(*args, **kwargs) def setUp(self): pass def tearDown(self): pass def testRequireJob(self): """trigger fires and sends expected info to Swarm""" self.server = testp4.P4Server() trig_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "RequireJob.py") config_path = os.path.join(self.server.root, "test_config.yaml") p4 = self.server.p4 p4.logger = self.logger # This works if no spaces in server root pathname! port = p4.port.replace('"', '') self.logger.debug("port: |%s|" % port) triggers = p4.fetch_triggers() triggers['Triggers'] = ['require-job change-submit //... " python ' + trig_path + " -p %quote%" + port + "%quote% -u " + p4.user + " -c %s " % config_path + ' %change% "'] self.logger.debug(triggers) p4.save_triggers(triggers) # Reconnect to pick up changes p4.disconnect() p4.connect() inside = localDirectory(self.server.client_root, "inside") inside_file1 = os.path.join(inside, "inside_file1") create_file(inside_file1, 'Test content') # Submit without a config file still works fine p4.run('add', inside_file1) result = p4.run('submit', '-d', 'inside_file1 added') self.assertEquals("1", result[-1]['submittedChange']) with open(config_path, "w") as f: f.write(""" api: "api/v6" user: swarmtest ticket: A123453 review_description: "Please review me!\nDon't forget to check YYYY" projects: - name: ProjectA create_review: y require_job: y update_review: n depot_paths: - //depot/inside/... - "-//depot/inside/A..." """) # Now submit fails due to no job p4.run('edit', inside_file1) append_to_file(inside_file1, "more text") try: result = p4.run('submit', '-d', 'inside_file1 added') self.assertEquals("2", result[-1]['submittedChange']) self.assertTrue(False, "Expected exception not found") except P4.P4Exception as e: self.assertRegex(str(e), r"this codeline requires a job") job = p4.fetch_job() job["Description"] = "test job" p4.save_job(job) p4.run_fix("-c", "2", "job000001") result = p4.run('submit', '-c', '2') self.assertEquals("2", result[-1]['submittedChange']) if __name__ == '__main__': unittest.main()
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#3 | 23150 | Robert Cowham | Refactor to move tests into subdir | ||
#2 | 23132 | Robert Cowham |
Search for jobs and update existing review Also add default reviewers |
||
#1 | 23131 | Robert Cowham | New RequireJob pre-submit trigger. |