예제 #1
0
    def test_lando_client_and_router(self):
        """
        Test to verify that messages sent from LandoClient through rabbit make it to Lando
        """
        queue_name = "lando"
        lando_client = LandoClient(self.config, queue_name)
        fake_lando = FakeLando()
        router = MessageRouter.make_lando_router(self.config, fake_lando, queue_name)
        fake_lando.router = router

        # Messages sent to lando from a user
        # Send message to fake_lando to start job 1
        lando_client.start_job(job_id=1)
        # Send message to fake_lando to cancel job 2
        lando_client.cancel_job(job_id=2)
        # Send message to fake_lando to restart job 33
        lando_client.restart_job(job_id=33)

        # Send message to fake_lando that the worker VM has finished launching
        lando_client.worker_started("test")

        # Messages sent to lando from a lando_worker after receiving a message from lando
        stage_job_payload = StageJobPayload(credentials=None, job_details=FakeJobDetails(3), input_files=[],
                                            vm_instance_name='test')
        # Send message to fake_lando that some stage job is complete
        lando_client.job_step_complete(stage_job_payload)
        # Send message to fake_lando that some stage job had an error
        lando_client.job_step_error(stage_job_payload, "Oops1")

        run_job_payload = RunJobPayload(job_details=FakeJobDetails(4), workflow=FakeWorkflow(), vm_instance_name='test')
        # Send message to fake_lando that a job has been run
        lando_client.job_step_complete(run_job_payload)
        # Send message to fake_lando that a job failed while running
        lando_client.job_step_error(run_job_payload, "Oops2")

        store_job_output_payload = StoreJobOutputPayload(None, FakeJobDetails(5), vm_instance_name='test')
        # Send message to fake_lando that we finished storing output
        lando_client.job_step_store_output_complete(store_job_output_payload, output_project_info='project_id')
        # Send message to fake_lando that we had an error while storing output
        lando_client.job_step_error(store_job_output_payload, "Oops3")

        router.run()
        self.assertEqual(fake_lando.start_job_payload.job_id, 1)
        self.assertEqual(fake_lando.cancel_job_payload.job_id, 2)
        self.assertEqual(fake_lando.restart_job_payload.job_id, 33)

        self.assertEqual(fake_lando.stage_job_complete_payload.job_id, 3)
        self.assertEqual(fake_lando.stage_job_error_payload.message, "Oops1")

        self.assertEqual(fake_lando.run_job_complete_payload.job_id, 4)
        self.assertEqual(fake_lando.run_job_error_payload.message, "Oops2")

        self.assertEqual(fake_lando.store_job_output_complete_payload.job_id, 5)
        self.assertEqual(fake_lando.store_job_output_complete_payload.output_project_info, 'project_id')
        self.assertEqual(fake_lando.store_job_output_error_payload.message, "Oops3")
예제 #2
0
 def _make_router(self):
     work_queue_config = self.config.work_queue_config
     return MessageRouter.make_lando_router(self.config, self,
                                            work_queue_config.listen_queue)