# -*- encoding: UTF8 -*- # Test harness for ValidateContentFormat.py from __future__ import print_function import sys import unittest import os import P4 from p4testutils import TestCase, P4Server, localDirectory, create_file, append_to_file parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parent_dir) from ValidateContentFormat import ValidateContentFormat os.environ["LOGS"] = "." LOGGER_NAME = "TestValidateContentFormat" LOG_FILE = "log-ValidateContentFormat.log" python3 = sys.version_info[0] >= 3 class TestValidateContentFormat(TestCase): def __init__(self, methodName='runTest'): super(TestValidateContentFormat, self).__init__(LOGGER_NAME, LOG_FILE, methodName=methodName) def setUp(self): pass def tearDown(self): pass def create_test_file(self, contents): fname = "~temp_file" with open(fname, "w") as f: f.write(contents) return fname def testValidateYaml(self): """Some basic yaml tests""" trig = ValidateContentFormat("1") tfile = self.create_test_file(""" api: "api/v6" user: swarmtest ticket: A123453 """) result = trig.yaml_load_errors(tfile) self.assertEqual("", result) tfile = self.create_test_file(""" review_description: - "Please review me!" - "Don't forget to check YYYY" projects: - name: ProjectA post_submit_create_review: y require_job: y update_review: n depot_paths: - //depot/inside/... - "-//depot/inside/*_file1" default_reviewers: - user1 - user2 """) result = trig.yaml_load_errors(tfile) self.assertEqual("", result) tfile = self.create_test_file(""" review_description: - "Please review me! - "Don't forget to check YYYY" """) result = trig.yaml_load_errors(tfile) self.assertNotEqual("", result) def testValidateContentFormat(self): """trigger fires and sends expected info to Swarm""" self.server = P4Server() trig_path = os.path.join(parent_dir, "ValidateContentFormat.py") 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'] = ['validate-content change-content //... " python ' + trig_path + " -p %quote%" + port + "%quote% -u " + p4.user + ' --yaml %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.yaml") create_file(inside_file1, """ api: "api/v6" user: swarmtest ticket: A123453 """) p4.run('add', inside_file1) result = p4.run('submit', '-d', 'inside_file1 added') self.assertEqual("1", result[-1]['submittedChange']) # Bad yaml format is found p4.run('edit', inside_file1) create_file(inside_file1, """ review_description: - "Please review me! - "Don't forget to check YYYY" """) try: result = p4.run('submit', '-d', 'inside_file1 edited') self.assertTrue(False, "Expected exception not found") except P4.P4Exception as e: self.assertRegex(str(e), r"Invalid format for") # Bad file without appropriate extension is OK because skipped inside_file2 = os.path.join(inside, "inside_file2") create_file(inside_file2, """ review_description: - "Please review me! - "Don't forget to check YYYY" """) p4.run('add', inside_file2) result = p4.run('submit', '-d', 'inside_file2 added') self.assertEqual("3", result[-1]['submittedChange']) if __name__ == '__main__': unittest.main()