def setUp(self): self.data_service = FakeDataService() self.model_repository = FakeModelRepository() self.manager = AnalyzerManager([FakeAnalyzer, FakeAnalyzer], self.model_repository, self.data_service) FakeAnalyzer.stub = None
class AnalyzerManagerTests(unittest.TestCase): def setUp(self): self.data_service = FakeDataService() self.model_repository = FakeModelRepository() self.manager = AnalyzerManager([FakeAnalyzer, FakeAnalyzer], self.model_repository, self.data_service) FakeAnalyzer.stub = None def test_process_review_event(self): request = ReviewEvent() request.configuration.update({"FakeAnalyzer": {"one": "two"}}) request.commit_revision.base.internal_repository_url = "foo" request.commit_revision.base.reference_name = "refs/heads/master" request.commit_revision.base.hash = "00" * 20 request.commit_revision.head.internal_repository_url = "bar" request.commit_revision.head.reference_name = "refs/heads/master" request.commit_revision.head.hash = "ff" * 20 response = self.manager.process_review_event(request) self.assertIsInstance(response, EventResponse) self.assertEqual(response.analyzer_version, "FakeAnalyzer/1 FakeAnalyzer/1") self.assertEqual(len(response.comments), 2) self.assertEqual(*response.comments) self.assertEqual(response.comments[0].text, "%s|%s" % ("00" * 20, "ff" * 20)) self.assertEqual(self.model_repository.get_calls, [("FakeAnalyzer/1", FakeModel, "foo")] * 2) self.assertEqual(FakeAnalyzer.instance.one, "two") self.assertEqual(FakeAnalyzer.stub, "XXX") def test_process_push_event(self): request = PushEvent() request.commit_revision.head.internal_repository_url = "wow" request.commit_revision.head.reference_name = "refs/heads/master" request.commit_revision.head.hash = "80" * 20 response = self.manager.process_push_event(request) self.assertIsInstance(response, EventResponse) self.assertEqual(response.analyzer_version, "FakeAnalyzer/1 FakeAnalyzer/1") self.assertEqual(len(response.comments), 0) self.assertEqual(len(self.model_repository.set_calls), 2) self.assertEqual(self.model_repository.set_calls[0][:2], ("FakeAnalyzer/1", "wow")) self.assertIsInstance(self.model_repository.set_calls[0][2], FakeModel) self.assertEqual(self.model_repository.set_calls[1][:2], ("FakeAnalyzer/1", "wow")) self.assertIsInstance(self.model_repository.set_calls[1][2], FakeModel) self.assertEqual(FakeAnalyzer.stub, "XXX")
def run_analyzers(args: argparse.Namespace): """ Launch the service with the specified analyzers. Blocks until a KeyboardInterrupt. :param args: Parsed command line arguments. :return: None """ log = logging.getLogger("run") model_repository = create_model_repo_from_args(args) log.info("Created %s", model_repository) if args.request_server == "auto": data_request_address = "%s:10301" % args.server.split(":")[0] else: data_request_address = args.request_server data_service = DataService(data_request_address) log.info("Created %s", data_service) sys.path.append(os.getcwd()) manager = AnalyzerManager( analyzers=[ importlib.import_module(a).analyzer_class for a in args.analyzer ], model_repository=model_repository, data_service=data_service, ) sys.path = sys.path[:-1] log.info("Created %s", manager) listener = EventListener(address=args.server, handlers=manager, n_workers=args.workers) log.info("Created %s", listener) listener.start() log.info("Listening %s", args.server) listener.block() model_repository.shutdown() data_service.shutdown()
def __enter__(self) -> "AnalyzerContextManager": self.manager = AnalyzerManager( analyzers=self.analyzer, model_repository=self.model_repository, data_service=self.data_service, ) self.listener = EventListener(address="0.0.0.0:%d" % self.port, handlers=self.manager, n_workers=self.args.workers) self.listener.start() return self
def __enter__(self) -> "AnalyzerContextManager": self.model_repository = create_model_repo_from_args( self._sql_alchemy_model_args) if self.init: self.model_repository.init() self.data_service = DataService(self.data_request_address) self.manager = AnalyzerManager(analyzers=[self.analyzer], model_repository=self.model_repository, data_service=self.data_service) self.listener = EventListener(address="0.0.0.0:%d" % self.port, handlers=self.manager, n_workers=1) self.listener.start() return self
def __enter__(self) -> "AnalyzerContextManager": """ Create the context and run the events listener. """ self.model_repository = create_model_repo_from_args(self._sql_alchemy_model_args) if self.init: self.model_repository.init() self.data_service = DataService(self.data_request_address) self.manager = AnalyzerManager(analyzers=[self.analyzer], model_repository=self.model_repository, data_service=self.data_service) if not check_port_free(self._port): self._port = find_port() self.listener = EventListener(address="0.0.0.0:%d" % self._port, handlers=self.manager, n_workers=1) self.listener.start() self._lookout_sdk = LookoutSDK() return self
class AnalyzerManagerTests(unittest.TestCase): @classmethod def setUpClass(cls): slogging.setup(logging.DEBUG, False) def setUp(self): self.data_service = FakeDataService() self.model_repository = FakeModelRepository() self.manager = AnalyzerManager( [FakeAnalyzer, FakeAnalyzer, FakeDummyAnalyzer], self.model_repository, self.data_service) FakeAnalyzer.stub = None FakeDummyAnalyzer.skip_train = False FakeAnalyzer.service = None def test_process_review_event(self): request = ReviewEvent() request.configuration.update( {"fake.analyzer.FakeAnalyzer": { "one": "two" }}) request.commit_revision.base.internal_repository_url = "foo" request.commit_revision.base.reference_name = "refs/heads/master" request.commit_revision.base.hash = "00" * 20 request.commit_revision.head.internal_repository_url = "bar" request.commit_revision.head.reference_name = "refs/heads/master" request.commit_revision.head.hash = "ff" * 20 response = self.manager.process_review_event(request) self.assertIsInstance(response, EventResponse) self.assertEqual( response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeDummyAnalyzer/1") self.assertEqual(len(response.comments), 2) self.assertEqual(*response.comments) self.assertEqual(response.comments[0].text, "%s|%s" % ("00" * 20, "ff" * 20)) self.assertEqual(self.model_repository.get_calls, [("fake.analyzer.FakeAnalyzer/1", FakeModel, "foo")] * 2) self.assertEqual(FakeAnalyzer.instance.config["one"], "two") self.assertEqual(FakeAnalyzer.service.get_data(), "XXX") self.assertTrue(FakeDummyAnalyzer.instance.analyzed) def test_process_push_event(self): request = PushEvent() request.commit_revision.head.internal_repository_url = "wow" request.commit_revision.head.reference_name = "refs/heads/master" request.commit_revision.head.hash = "80" * 20 response = self.manager.process_push_event(request) self.assertIsInstance(response, EventResponse) self.assertEqual( response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeDummyAnalyzer/1") self.assertEqual(len(response.comments), 0) self.assertEqual(len(self.model_repository.set_calls), 2) self.assertEqual(self.model_repository.set_calls[0][:2], ("fake.analyzer.FakeAnalyzer/1", "wow")) self.assertIsInstance(self.model_repository.set_calls[0][2], FakeModel) self.assertEqual(self.model_repository.set_calls[1][:2], ("fake.analyzer.FakeAnalyzer/1", "wow")) self.assertIsInstance(self.model_repository.set_calls[1][2], FakeModel) self.assertEqual(FakeAnalyzer.service.get_bblfsh(), "YYY") self.assertFalse(FakeDummyAnalyzer.trained) def test_process_push_event_skip(self): FakeAnalyzer.skip_train = True request = PushEvent() request.commit_revision.head.internal_repository_url = "wow" request.commit_revision.head.reference_name = "refs/heads/master" request.commit_revision.head.hash = "80" * 20 response = self.manager.process_push_event(request) self.assertIsInstance(response, EventResponse) self.assertEqual( response.analyzer_version, "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeAnalyzer/1 " "fake.analyzer.FakeDummyAnalyzer/1") self.assertEqual(len(response.comments), 0) self.assertEqual(len(self.model_repository.get_calls), 2) self.assertEqual(len(self.model_repository.set_calls), 0) self.assertIsNone(FakeAnalyzer.service)