def setup(self): self.detector = Dummy("") self.misuse = create_misuse("-m1-") self.misuses = [self.misuse, create_misuse("-m2-")] self.uut = AllFindings(self.detector)
def test_finds_only_own_misuses(self): project = create_project(self.project_id, base_path=self.temp_dir) misuse1 = create_misuse("1", project=project) create_file(misuse1.misuse_file) misuse2 = create_misuse("2", project=project) create_file(misuse2.misuse_file) self.uut._YAML = {"misuses": ["2"]} misuses = self.uut.misuses assert_equals([misuse2], misuses)
def test_white_list_misuse(self): project = create_project("-p-") misuse1 = create_misuse("-m1-", project=project) misuse2 = create_misuse("-m2-", project=project) version1 = create_version("-v1-", misuses=[misuse1], project=project) create_version("-v2-", misuses=[misuse2], project=project) self.uut.white_list = [misuse1.id] self.uut.process_project(project) assert_equals([call(project, version1)], self.uut.process_project_version.call_args_list)
def test_white_list_misuse(self): uut = ProjectMisuseTask() uut.process_project_misuse = MagicMock() project = create_project("-p-") misuse1 = create_misuse("-m1-", project=project) misuse2 = create_misuse("-m2-", project=project) create_version("-v-", misuses=[misuse1, misuse2], project=project) uut.white_list = [misuse1.id] uut.process_project(project) assert_equals([call(project, misuse1)], uut.process_project_misuse.call_args_list)
def test_process_misuse(self): uut = ProjectVersionMisuseTask() uut.process_project_version_misuse = MagicMock() project = create_project("p1") m1 = create_misuse("m1") m2 = create_misuse("m2") m3 = create_misuse("m3") v1 = create_version("v1", misuses=[m1, m2], project=project) v2 = create_version("v2", misuses=[m3], project=project) uut.process_project(project) assert_equals([call(project, v1, m1), call(project, v1, m2), call(project, v2, m3)], uut.process_project_version_misuse.call_args_list)
def test_copies_misuse_sources(self): create_file(join(self.source_path, "mu.file")) self.version.misuses.append(create_misuse("1", meta={"location": {"file": "mu.file"}}, project=self.project)) self.uut.process_project_version(self.project, self.version) assert exists(join(self.misuse_source_path, "mu.file"))
def test_skips_compile_patterns_if_no_pattern(self): self.create_misuse_with_pattern("mwp", "a.java") makedirs(join(self.pattern_classes_path, "mwp")) self.version._MISUSES.append(create_misuse("mwop", project=self.project)) self.uut.process_project_version(self.project, self.version) assert not exists(join(self.pattern_classes_path, "mwp", "a.class"))
def test_finds_misuses(self): misuse = create_misuse("1", project=create_project(self.project_id, base_path=self.temp_dir)) create_file(misuse.misuse_file) self.uut._YAML = {"misuses": ["1"]} actual_misuses = self.uut.misuses assert_equals([misuse], actual_misuses)
def test_publish_url(self, post_mock): misuse = create_misuse("-m-") task = PublishMetadataTask("http://test.url") task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[0][0], "http://test.url/api/upload/metadata")
def test_process_misuse(self): uut = ProjectMisuseTask() uut.process_project_misuse = MagicMock() project = create_project("p1") m1 = create_misuse("m1") m2 = create_misuse("m2") m3 = create_misuse("m3") create_version("v1", misuses=[m1, m2], project=project) create_version("v2", misuses=[m3], project=project) uut.process_project(project) actual_call = uut.process_project_misuse.call_args_list assert_equals(3, len(actual_call)) assert_in(call(project, m1), actual_call) assert_in(call(project, m2), actual_call) assert_in(call(project, m3), actual_call)
def test_publishes_pattern_code_without_trailing_newlines(self, open_mock, post_mock): pattern_code = "public class P1 {}" open_mock.return_value = StringIO(pattern_code + "\n\n\n") misuse = create_misuse("-m-", project=self.project, patterns=[Pattern("/", "P1.java")]) task = PublishMetadataTask("http://test.url") task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[0][1][0]["patterns"][0]["snippet"]["code"], pattern_code)
def test_post_auth_provided(self, pass_mock, post_mock): misuse = create_misuse("-m-") pass_mock.side_effect = UserWarning("should skip prompt") task = PublishMetadataTask("http://test.url", "-username-", "-password-") task.start() # should not ask for password, since already set task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[1]["username"], "-username-") assert_equals(post_mock.call_args[1]["password"], "-password-")
def test_post_auth_prompt(self, pass_mock, post_mock): misuse = create_misuse("-m-") pass_mock.return_value = "-password-" task = PublishMetadataTask("http://test.url", "-username-") task.start() # should ask for password once task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[1]["username"], "-username-") assert_equals(post_mock.call_args[1]["password"], "-password-")
def test_white_list_project(self): uut = ProjectVersionMisuseTask() uut.process_project_version_misuse = MagicMock() project = create_project("-p-") misuse1 = create_misuse("-m1-", project=project) version = create_version("-v-", misuses=[misuse1], project=project) uut.white_list = [misuse1.project_id] uut.process_project_version(project, version) assert_equals([call(project, version, misuse1)], uut.process_project_version_misuse.call_args_list)
def test_publishes_pattern_code(self, open_mock, post_mock): pattern_code = "public class P1 {\n" \ " void m() { return; }\n" \ "}" open_mock.return_value = StringIO(pattern_code) misuse = create_misuse("-m-", project=self.project, patterns=[Pattern("/base/path", "P1.java")]) task = PublishMetadataTask("http://test.url") task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[0][1][0]["patterns"], [ {"id": "P1", "snippet": {"code": pattern_code, "first_line": 1}} ])
def test_publishes_pattern_code_without_preamble(self, open_mock, post_mock): pattern_preamble = "package foo;\n" \ "import Bar;\n" \ "\n" pattern_code = "public class P1 {\n" \ " void m() { return; }\n" \ "}" open_mock.return_value = StringIO(pattern_preamble + pattern_code) misuse = create_misuse("-m-", project=self.project, patterns=[Pattern("/", "P1.java")]) task = PublishMetadataTask("http://test.url") task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[0][1][0]["patterns"][0]["snippet"]["code"], pattern_code)
def setup(self): self.misuse = create_misuse("-misuse-", meta={"location": {"file": "a", "method": "m()"}}) self.version = create_version("-version-", misuses=[self.misuse], project=create_project("-project-")) self.detector = Dummy("-detectors-") self.findings_base_path = "-findings-" self.logger = logging.getLogger("test") self.__orig_shell_exec = Shell.exec Shell.exec = MagicMock() self.uut = DetectOnlyExecution( self.detector, self.version, self.misuse, self.findings_base_path, PotentialHits(self.detector, self.misuse) ) self.uut.save = MagicMock()
def test_publishes_metadata(self, post_mock): misuse = create_misuse("-m-", meta={ "description": "-description-", "fix": { "description": "-fix-description-", "commit": "http://fake.diff/url" }, "characteristics": [ "-violation-type-1-", "-violation-type-2-" ], "location": { "file": "/some/file.java", "method": "-some.method()-" } }, project=self.project) task = PublishMetadataTask("http://test.url") task.process_project_misuse(self.project, misuse) task.end() assert_equals(post_mock.call_args[0][1], [{ "misuse": misuse.id, "description": "-description-", "fix": { "description": "-fix-description-", "diff-url": "http://fake.diff/url" }, "violation_types": [ "-violation-type-1-", "-violation-type-2-" ], "location": { "file": "/some/file.java", "method": "-some.method()-" }, "patterns": [] }])
def test_derives_compile_base_path(self): self.uut._MISUSES = [create_misuse("m")] # prevent version from loading misuses project_compile = self.uut.get_compile("/base/path") assert_equals(join("/base/path", self.project_id, self.version_id), project_compile.base_path)
def test_reads_fix(self): misuse = create_misuse("", meta={"fix": {"commit": "http://link.to/commit", "description": "blub", "revision": 42}}) assert_equals("http://link.to/commit", misuse.fix.commit) assert_equals("blub", misuse.fix.description) assert_equals("42", misuse.fix.revision)
def test_reads_description(self): misuse = create_misuse("", meta={"description": "bla bla bla"}) assert_equals("bla bla bla", misuse.description)
def test_reads_location(self): uut = create_misuse('', meta={"location": {"file": "file.name", "method": "foo()"}}) assert_equals(Location("file.name", "foo()"), uut.location)
def setup(self): self.misuse = create_misuse('misuse', meta={"location": {"file": "a", "method": "m()"}})
def setup(self): self.detector = Dummy("") self.misuse = create_misuse("-m1-") self.misuses = [self.misuse, create_misuse("-m2-")] self.uut = PotentialHits(self.detector, self.misuses)
def create_misuse_with_pattern(self, misuse_id, pattern_file): misuse = create_misuse(misuse_id, project=self.project) create_file(join(self.source_path, misuse.location.file)) misuse._PATTERNS = {self.create_pattern(pattern_file)} self.version._MISUSES = [misuse]