def test_worker_mixed_source_swift_destination(self):
        service = MoveService()
        service.configure(self.settings)

        file_1 = "scp://the_source/url/to/download_1.txt"
        file_2 = "http://www.someurl.com"
        file_3 = "ala://ala/?lsid=some_lsid"
        file_4 = "swift+http://nectar/my_container/local/dataset/myfile"
        file_5 = "file:///tmp/filename"
        source = [file_1, file_2, file_3, file_4, file_5]
        destination = "swift+http://nectar/my_container2/myfile"
        move_job = MoveJob(source, destination, "userid", False)

        with mock.patch("org.bccvl.movelib.move") as mock_move:
            service.worker(move_job)
            dest = build_destination(move_job.destination, service._config)
            calls = []

            for s in move_job.source:
                src = build_source(s, None, service._config)
                calls.append(mock.call(src, dest))
            mock_move.assert_has_calls(calls)

        self.assertEqual(move_job.status, MoveJob.STATUS_COMPLETE)
        self.assertEqual(move_job.reason, None)
    def test_configure(self):
        service = MoveService()
        service.configure(self.settings)

        cookie_settings = service._config["cookie"]
        swift_settings = service._config["swift"]
        self.assertEqual(cookie_settings["secret"], self.settings["authtkt.cookie.secret"])
        self.assertEqual(swift_settings["os_auth_url"], self.settings["swift_service.nectar.auth_url"])
        self.assertEqual(swift_settings["os_auth_version"], str(self.settings["swift_service.nectar.auth_version"]))
        self.assertEqual(swift_settings["os_tenant_name"], self.settings["swift_service.nectar.tenant_name"])
        self.assertEqual(swift_settings["os_username"], self.settings["swift_service.nectar.user"])
        self.assertEqual(swift_settings["os_password"], self.settings["swift_service.nectar.key"])
        self.assertTrue(service._has_credential())
    def test_worker_scp_ok(self, dummy=None):
        service = MoveService()
        service.configure(self.settings)

        source = "ala://ala?lsid=someid"
        destination = "scp://localhost/usr/local/dataset/"
        move_job = MoveJob(source, destination, "userid", False)

        with mock.patch("org.bccvl.movelib.move") as mock_move:
            service.worker(move_job)
            dest = build_destination(move_job.destination)
            src = build_source(move_job.source)
            mock_move.assert_called_with(src, dest)
        self.assertEqual(move_job.status, MoveJob.STATUS_COMPLETE)
    def test_worker_download_failed(self):
        service = MoveService()
        service.configure(self.settings)

        source = "http://www.intersect.org.au"
        destination = "scp://visualiser/usr/local/dataset/"
        move_job = mock.MagicMock(MoveJob(source, destination, "userid", False))

        with mock.patch("data_mover.move_job.MoveJob.update"):
            service.worker(move_job)

            call1 = mock.call(status=MoveJob.STATUS_IN_PROGRESS, start_timestamp=mock.ANY)
            call2 = mock.call(status=MoveJob.STATUS_FAILED, end_timestamp=mock.ANY, reason=mock.ANY)
            move_job.update.assert_has_calls([call1, call2])
    def test_worker_bad_source_type(self):
        service = MoveService()
        service.configure(self.settings)

        source = "bad"
        destination = "scp://visualiser/usr/local/dataset/"
        move_job = mock.MagicMock(MoveJob(source, destination, "userid", False))

        with mock.patch("data_mover.move_job.MoveJob.update"):
            service.worker(move_job)

            # This is how we declare multiple calls to the same method
            call1 = mock.call(status=MoveJob.STATUS_IN_PROGRESS, start_timestamp=mock.ANY)
            call2 = mock.call(status=MoveJob.STATUS_FAILED, end_timestamp=mock.ANY, reason=mock.ANY)
            move_job.update.assert_has_calls([call1, call2])
    def test_worker_scp_failed(self):
        service = MoveService()
        service.configure(self.settings)

        source = "ala://ala?lsid=someid"
        destination = "scp://localhost/usr/local/dataset/"
        move_job = MoveJob(source, destination, "userid", False)

        with mock.patch("org.bccvl.movelib.move", side_effect=Exception("Bad source")) as mock_move:
            service.worker(move_job)
            dest = build_destination(move_job.destination)
            src = build_source(move_job.source)
            mock_move.assert_called_with(src, dest)
        reason = "Move has failed for job with id {0}. Reason: Bad source".format(move_job.id)
        self.assertEqual(move_job.status, MoveJob.STATUS_FAILED)
        self.assertEqual(move_job.reason, reason)
 def test_has_credential(self):
     service = MoveService()
     self.assertFalse(service._has_credential())