def test_download(self, _get_unit, _get_downloader, container, request): twisted_request = Mock() unit = Mock(unit_id=12, unit_type_id='test') listener = Mock( succeeded_reports=[ Mock() ], failed_reports=[]) downloader = Mock(event_listener=listener) responder = Mock() entry = Mock(url='url-a') _get_unit.return_value = unit _get_downloader.return_value = downloader # test streamer = Streamer(Mock()) report = streamer._download(twisted_request, entry, responder) # validation _get_unit.assert_called_once_with(entry) _get_downloader.assert_called_once_with(twisted_request, entry) request.assert_called_once_with( entry.unit_type_id, unit.unit_key, entry.url, responder) container.assert_called_once_with(threaded=False) container.return_value.download(downloader, [request.return_value], listener) downloader.config.finalize.assert_called_once_with() self.assertEqual(report, listener.succeeded_reports[0])
def test_handle_get(self, model, _download, _on_succeeded, responder): """ Three catalog entries. The 1st download fails but succeeds on the 2nd. The 3rd is not tried. """ request = Mock(uri='http://content-world.com/content/bear.rpm') responder.return_value.__enter__.return_value = responder.return_value report = DownloadReport('', '') _download.side_effect = SideEffect(DownloadFailed(report), report, None) catalog = [ Mock(url='url-a'), Mock(url='url-b'), Mock(url='url-c'), # not tried. ] model.objects.filter.return_value.order_by.return_value.all.return_value = catalog model.objects.filter.return_value.order_by.return_value.count.return_value = len( catalog) # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation model.objects.filter.assert_called_once_with(path='/content/bear.rpm') model.objects.filter.return_value.order_by.\ assert_called_once_with('-_id', '-revision') responder.assert_called_once_with(request) _on_succeeded.assert_called_once_with(catalog[1], request, report) self.assertEqual(_download.call_args_list, [ call(request, catalog[0], responder.return_value), call(request, catalog[1], responder.return_value) ])
def test_handle_get_all_failed(self, model, _download, _on_all_failed, responder): """ Three catalog entries. All (3) failed. """ request = Mock(uri='http://content-world.com/content/bear.rpm') responder.return_value.__enter__.return_value = responder.return_value report = DownloadReport('', '') _download.side_effect = SideEffect(PluginNotFound(), DoesNotExist(), DownloadFailed(report)) catalog = [ Mock(url='url-a'), Mock(url='url-b'), Mock(url='url-c'), ] model.objects.filter.return_value.order_by.return_value.all.return_value = catalog model.objects.filter.return_value.order_by.return_value.count.return_value = len( catalog) # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation model.objects.filter.assert_called_once_with(path='/content/bear.rpm') model.objects.filter.return_value.order_by.\ assert_called_once_with('-_id', '-revision') responder.assert_called_once_with(request) _on_all_failed.assert_called_once_with(request) self.assertEqual(_download.call_args_list, [ call(request, catalog[0], responder.return_value), call(request, catalog[1], responder.return_value), call(request, catalog[2], responder.return_value) ])
def test_render_GET(self, reactor): request = Mock() # test streamer = Streamer(Mock()) streamer.render_GET(request) # validation reactor.callInThread.assert_called_once_with(streamer._handle_get, request)
def test_handle_get_failed_badly(self, model): request = Mock() model.objects.filter.side_effect = ValueError() # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation request.setResponseCode.assert_called_once_with(INTERNAL_SERVER_ERROR)
def test_insert_deferred(self, model): entry = Mock(unit_id=123, unit_type_id='xx') model.return_value.save.side_effect = NotUniqueError() # test streamer = Streamer(Mock()) streamer._insert_deferred(entry) # validation model.assert_called_once_with(unit_id=entry.unit_id, unit_type_id=entry.unit_type_id) model.return_value.save.assert_called_once_with()
def test_on_all_failed(self): request = Mock(uri='http://content-world.com/content/bear.rpm') request.getHeader.side_effect = { constants.PULP_STREAM_REQUEST_HEADER: True }.__getitem__ # test streamer = Streamer(Mock()) streamer._on_all_failed(request) # validation request.setHeader.assert_called_once_with('Content-Length', '0') request.setResponseCode.assert_called_once_with(NOT_FOUND)
def test_get_downloader_not_found(self, controller, listener): entry = Mock(importer_id='123') controller.get_importer_by_id.side_effect = PluginNotFound() # test streamer = Streamer(Mock()) self.assertRaises(PluginNotFound, streamer._get_downloader, Mock(), entry)
def test_on_succeeded_pulp_requested(self, _insert_deferred): entry = Mock(url='url-a') request = Mock(uri='http://content-world.com/content/bear.rpm') request.getHeader.side_effect = { constants.PULP_STREAM_REQUEST_HEADER: True }.__getitem__ report = DownloadReport('', '') report.headers = { 'A': 1, 'B': 2, } # test streamer = Streamer(Mock()) streamer._on_succeeded(entry, request, report) # validation self.assertFalse(_insert_deferred.called)
def test_get_unit(self, plugin_api): q_set = Mock() q_set.filter.return_value = q_set q_set.only.return_value = q_set model = Mock(objects=q_set, unit_key_fields=[1, 2]) entry = Mock(importer_id='123', unit_id=345, unit_type_id='xx') plugin_api.get_unit_model_by_id.return_value = model # test streamer = Streamer(Mock()) unit = streamer._get_unit(entry) # validation plugin_api.get_unit_model_by_id.assert_called_once_with( entry.unit_type_id) q_set.filter.assert_called_once_with(id=entry.unit_id) q_set.only.assert_called_once_with(*model.unit_key_fields) self.assertEqual(unit, q_set.get.return_value)
def test_get_unit(self, plugin_api): q_set = Mock() q_set.filter.return_value = q_set q_set.only.return_value = q_set model = Mock( objects=q_set, unit_key_fields=[1, 2]) entry = Mock(importer_id='123', unit_id=345, unit_type_id='xx') plugin_api.get_unit_model_by_id.return_value = model # test streamer = Streamer(Mock()) unit = streamer._get_unit(entry) # validation plugin_api.get_unit_model_by_id.assert_called_once_with(entry.unit_type_id) q_set.filter.assert_called_once_with(id=entry.unit_id) q_set.only.assert_called_once_with(*model.unit_key_fields) self.assertEqual(unit, q_set.get.return_value)
def test_handle_get_no_catalog_matched(self, model, _download, responder): """ No catalog entries matched. """ responder.return_value.__enter__.return_value = responder.return_value request = Mock(uri='http://content-world.com/content/bear.rpm') catalog = [] model.objects.filter.return_value.order_by.return_value.all.return_value = catalog model.objects.filter.return_value.order_by.return_value.count.return_value = len(catalog) # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation model.objects.filter.assert_called_once_with(path='/content/bear.rpm') model.objects.filter.return_value.order_by.\ assert_called_once_with('-_id', '-revision') request.setResponseCode.assert_called_once_with(NOT_FOUND) self.assertFalse(_download.called)
def test_get_unit_not_found(self, plugin_api): q_set = Mock() q_set.filter.return_value = q_set q_set.only.return_value = q_set model = Mock(objects=q_set, unit_key_fields=[1, 2]) entry = Mock(importer_id='123', unit_id=345, unit_type_id='xx') plugin_api.get_unit_model_by_id.return_value = model q_set.get.side_effect = DoesNotExist # test streamer = Streamer(Mock()) self.assertRaises(DoesNotExist, streamer._get_unit, entry)
def test_get_downloader(self, controller, listener): request = Mock() entry = Mock(importer_id='123') importer = Mock() config = Mock() model = Mock() plugin = (importer, config, model) controller.get_importer_by_id.return_value = plugin # test streamer = Streamer(Mock()) streamer.session = Mock() downloader = streamer._get_downloader(request, entry) # validation controller.get_importer_by_id.assert_called_once_with(entry.importer_id) config.flatten.assert_called_once_with() importer.get_downloader_for_db_importer.assert_called_once_with( model, entry.url, working_dir='/tmp') listener.assert_called_once_with(streamer, request) self.assertEqual(downloader, importer.get_downloader_for_db_importer.return_value) self.assertEqual(downloader.event_listener, listener.return_value) self.assertEqual(downloader.session, streamer.session)
def test_handle_get(self, model, _download, _on_succeeded, responder): """ Three catalog entries. The 1st download fails but succeeds on the 2nd. The 3rd is not tried. """ request = Mock(uri='http://content-world.com/content/bear.rpm') responder.return_value.__enter__.return_value = responder.return_value report = DownloadReport('', '') _download.side_effect = SideEffect( DownloadFailed(report), report, None) catalog = [ Mock(url='url-a'), Mock(url='url-b'), Mock(url='url-c'), # not tried. ] model.objects.filter.return_value.order_by.return_value.all.return_value = catalog model.objects.filter.return_value.order_by.return_value.count.return_value = len(catalog) # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation model.objects.filter.assert_called_once_with(path='/content/bear.rpm') model.objects.filter.return_value.order_by.\ assert_called_once_with('-_id', '-revision') responder.assert_called_once_with(request) _on_succeeded.assert_called_once_with(catalog[1], request, report) self.assertEqual( _download.call_args_list, [ call(request, catalog[0], responder.return_value), call(request, catalog[1], responder.return_value) ])
def test_handle_get_all_failed(self, model, _download, _on_all_failed, responder): """ Three catalog entries. All (3) failed. """ request = Mock(uri='http://content-world.com/content/bear.rpm') responder.return_value.__enter__.return_value = responder.return_value report = DownloadReport('', '') _download.side_effect = SideEffect( PluginNotFound(), DoesNotExist(), DownloadFailed(report)) catalog = [ Mock(url='url-a'), Mock(url='url-b'), Mock(url='url-c'), ] model.objects.filter.return_value.order_by.return_value.all.return_value = catalog model.objects.filter.return_value.order_by.return_value.count.return_value = len(catalog) # test streamer = Streamer(Mock()) streamer._handle_get(request) # validation model.objects.filter.assert_called_once_with(path='/content/bear.rpm') model.objects.filter.return_value.order_by.\ assert_called_once_with('-_id', '-revision') responder.assert_called_once_with(request) _on_all_failed.assert_called_once_with(request) self.assertEqual( _download.call_args_list, [ call(request, catalog[0], responder.return_value), call(request, catalog[1], responder.return_value), call(request, catalog[2], responder.return_value) ])