Ejemplo n.º 1
0
class HttpDownloaderTests(base_downloader.BaseDownloaderTests):

    def setUp(self):
        super(HttpDownloaderTests, self).setUp()
        self.config.repo_plugin_config[constants.CONFIG_FEED] = TEST_SOURCE
        self.downloader = HttpDownloader(self.repo, None, self.config, self.mock_cancelled_callback)

    @mock.patch('pycurl.Curl')
    def test_retrieve_metadata(self, mock_curl_constructor):
        # Setup
        mock_curl = mock.MagicMock()
        mock_curl.getinfo.return_value = 200 # simulate a successful download
        mock_curl_constructor.return_value = mock_curl

        # Test
        docs = self.downloader.retrieve_metadata(self.mock_progress_report)

        # Verify
        self.assertEqual(1, len(docs))

        # Progress indicators
        self.assertEqual(self.mock_progress_report.metadata_query_finished_count, 1)
        self.assertEqual(self.mock_progress_report.metadata_query_total_count, 1)
        self.assertEqual(2, self.mock_progress_report.update_progress.call_count)

    @mock.patch('pycurl.Curl')
    def test_retrieve_metadata_multiple_queries(self, mock_curl_constructor):
        # Setup
        mock_curl = mock.MagicMock()
        mock_curl.getinfo.return_value = 200 # simulate a successful download
        mock_curl_constructor.return_value = mock_curl

        self.config.repo_plugin_config[constants.CONFIG_QUERIES] = ['a', ['b', 'c']]

        # Test
        docs = self.downloader.retrieve_metadata(self.mock_progress_report)

        # Verify
        self.assertEqual(2, len(docs))

        # Progress indicators
        self.assertEqual(self.mock_progress_report.metadata_query_finished_count, 2)
        self.assertEqual(self.mock_progress_report.metadata_query_total_count, 2)
        self.assertEqual(3, self.mock_progress_report.update_progress.call_count)

    @mock.patch('pycurl.Curl')
    def test_retrieve_metadata_with_error(self, mock_curl_constructor):
        # Setup
        mock_curl = mock.MagicMock()
        mock_curl.getinfo.return_value = 404 # simulate an error
        mock_curl_constructor.return_value = mock_curl

        # Test
        try:
            self.downloader.retrieve_metadata(self.mock_progress_report)
            self.fail()
        except exceptions.FileNotFoundException, e:
            expected = TEST_SOURCE + constants.REPO_METADATA_FILENAME
            self.assertEqual(expected, e.location)
Ejemplo n.º 2
0
    def setUp(self):
        self.working_dir = tempfile.mkdtemp(prefix='http-downloader-tests')
        self.repo = Repository('test-repo', working_dir=self.working_dir)

        repo_config = {
            constants.CONFIG_FEED : TEST_SOURCE,
        }
        self.config = PluginCallConfiguration({}, repo_config)

        self.mock_cancelled_callback = mock.MagicMock().is_cancelled
        self.mock_cancelled_callback.return_value = False

        self.downloader = HttpDownloader(self.repo, None, self.config, self.mock_cancelled_callback)

        self.mock_progress_report = mock.MagicMock()
Ejemplo n.º 3
0
class LiveHttpDownloaderTests(unittest.TestCase):

    def setUp(self):
        self.working_dir = tempfile.mkdtemp(prefix='http-downloader-tests')
        self.repo = Repository('test-repo', working_dir=self.working_dir)

        repo_config = {
            constants.CONFIG_FEED : TEST_SOURCE,
        }
        self.config = PluginCallConfiguration({}, repo_config)

        self.mock_cancelled_callback = mock.MagicMock().is_cancelled
        self.mock_cancelled_callback.return_value = False

        self.downloader = HttpDownloader(self.repo, None, self.config, self.mock_cancelled_callback)

        self.mock_progress_report = mock.MagicMock()

    def tearDown(self):
        if os.path.exists(self.working_dir):
            shutil.rmtree(self.working_dir)

    def test_retrieve_metadata(self):
        docs = self._run_metadata_test()
        self.assertEqual(1, len(docs))

    def test_retrieve_metadata_with_vague_query(self):
        self.config.repo_plugin_config[constants.CONFIG_QUERIES] = ['httpd']
        docs = self._run_metadata_test()
        self.assertEqual(1, len(docs))

    def test_retrieve_metadata_with_specific_query(self):
        self.config.repo_plugin_config[constants.CONFIG_QUERIES] = ['thias/php']
        docs = self._run_metadata_test()
        self.assertEqual(1, len(docs))

    def test_retrieve_metadata_with_multiple_specific_queries(self):
        self.config.repo_plugin_config[constants.CONFIG_QUERIES] = ['thias/php', 'larstobi/dns']
        docs = self._run_metadata_test()
        self.assertEqual(2, len(docs))

    def test_retrieve_module(self):
        module = model.Module('php', '0.2.1', 'thias')

        # Test
        self.downloader.retrieve_module(self.mock_progress_report, module)

        # Verify
        module_dir = os.path.join(self.working_dir, DOWNLOAD_TMP_DIR)
        expected_file = os.path.join(module_dir, module.filename())
        self.assertTrue(os.path.exists(expected_file))

        # Extract the metadata to make sure the tar is valid and we can open it
        metadata.extract_metadata(module, module_dir, self.working_dir)

        # Spot check that something from the metadata was stuffed into the module
        self.assertTrue(module.checksums is not None)

    def _run_metadata_test(self):
        # Test
        docs = self.downloader.retrieve_metadata(self.mock_progress_report)

        # Verify
        parsed = model.RepositoryMetadata()
        for d in docs:
            parsed.update_from_json(d)

        print('Number of Modules: %s' % len(parsed.modules))

        return docs
Ejemplo n.º 4
0
 def setUp(self):
     super(HttpDownloaderTests, self).setUp()
     self.config.repo_plugin_config[constants.CONFIG_FEED] = TEST_SOURCE
     self.downloader = HttpDownloader(self.repo, None, self.config, self.mock_cancelled_callback)