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)
Beispiel #6
0
    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"))
Beispiel #7
0
    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": []
        }])
Beispiel #19
0
    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)
Beispiel #20
0
 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)
Beispiel #21
0
 def test_reads_description(self):
     misuse = create_misuse("", meta={"description": "bla bla bla"})
     assert_equals("bla bla bla", misuse.description)
Beispiel #22
0
 def test_reads_location(self):
     uut = create_misuse('', meta={"location": {"file": "file.name", "method": "foo()"}})
     assert_equals(Location("file.name", "foo()"), uut.location)
Beispiel #23
0
 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)
Beispiel #25
0
 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]