Пример #1
0
    def test_metadata_exist(self):
        """Test TestJSONFeedMetadata `metadata_exist` method."""
        # existing
        feeds = ['sample']

        futures = [
            asyncio.ensure_future(
                JSONFeedMetadata.metadata_exist(feed, data_dir=_TEST_DATA_DIR))
            for feed in feeds
        ]
        results = asyncio.gather(*futures)
        results = _EVENT_LOOP.run_until_complete(results)

        self.assertTrue(all([r is True for r in results]))

        # non-existing
        feeds = ['nope', 'non-existing', 0, 1E+5]

        futures = [
            asyncio.ensure_future(JSONFeedMetadata.metadata_exist(feed))
            for feed in feeds
        ]
        results = asyncio.gather(*futures)
        results = _EVENT_LOOP.run_until_complete(results)

        self.assertTrue(all([r is False for r in results]))
Пример #2
0
    def test_url_exists(self):
        """Test TestJSONFeedMetadata `url_exists` method."""
        # existing
        feeds = ['recent', 2018]

        # asynchronous method!
        futures = [
            asyncio.ensure_future(JSONFeedMetadata.url_exists(feed))
            for feed in feeds
        ]
        results = asyncio.gather(*futures)
        results = _EVENT_LOOP.run_until_complete(results)

        self.assertTrue(all([r is True for r in results]))

        # non-existing
        feeds = ['nope', 'non-existing', 0, 1E+5]

        futures = [
            asyncio.ensure_future(JSONFeedMetadata.url_exists(feed))
            for feed in feeds
        ]
        results = asyncio.gather(*futures)
        results = _EVENT_LOOP.run_until_complete(results)

        self.assertTrue(all([r is False for r in results]))
Пример #3
0
    def test__parse_metadata(self):
        """Test JSONFeedMetadata `_parse_metadata` method."""
        meta_file = Path(__file__).parent / 'data/nvdcve-1.0-sample.meta'
        with open(meta_file, 'r') as f:
            meta_data = f.read()

        parsed = JSONFeedMetadata.parse_metadata(meta_data)

        # not empty
        self.assertTrue(parsed)

        # is dict
        self.assertIsInstance(parsed, dict)

        metadata_dict_template = {
            'last_modified': datetime.datetime,
            'size': int,
            'zipSize': int,
            'gzSize': int,
            'sha256': str
        }

        for key, type_ in metadata_dict_template.items():
            parsed_value = parsed[key]

            # correct type
            self.assertIsInstance(parsed_value, type_)

            # not empty
            self.assertTrue(parsed_value)
Пример #4
0
    def test_fetch(self):
        """Test TestJSONFeedMetadata `fetch` method."""
        # existing
        feed_name = 'sample'
        meta = JSONFeedMetadata(feed_name=feed_name, data_dir=_TEST_DATA_DIR)

        future = asyncio.ensure_future(meta.fetch())
        metadata: JSONFeedMetadata = _EVENT_LOOP.run_until_complete(future)
        data: str = metadata.data

        self.assertIsInstance(data, str)
        self.assertTrue(data)

        feed_name = 'modified'
        meta_temp_dir = tempfile.mkdtemp(dir=_TEMP_DATA_DIR)

        # non-existing metadata
        meta = JSONFeedMetadata(feed_name=feed_name, data_dir=meta_temp_dir)

        future = asyncio.ensure_future(meta.fetch())
        metadata: JSONFeedMetadata = _EVENT_LOOP.run_until_complete(future)
        data: str = metadata.data

        self.assertIsInstance(data, str)
        self.assertTrue(data)
Пример #5
0
    def test_update(self):
        """Test TestJSONFeedMetadata `update` method."""
        feed_name = 'modified'
        meta_temp_dir = tempfile.mkdtemp(dir=_TEMP_DATA_DIR)

        meta = JSONFeedMetadata(feed_name=feed_name, data_dir=meta_temp_dir)

        future = asyncio.ensure_future(meta.fetch())
        metadata: JSONFeedMetadata = _EVENT_LOOP.run_until_complete(future)
        data: str = metadata.data

        self.assertIsInstance(data, str)
        self.assertTrue(data)

        # should not be ready
        self.assertFalse(meta.is_ready())

        _EVENT_LOOP.run_until_complete(meta.update())

        # should be ready now
        self.assertTrue(meta.is_ready())

        # metadata present in the directory
        self.assertTrue(meta.filename in os.listdir(meta_temp_dir))
Пример #6
0
    def test___init__(self):
        """Test JSONFeedMetadata initialization."""
        meta_temp_dir = tempfile.mkdtemp(dir=_TEMP_DATA_DIR)

        # existing, update=False
        feed_name = 'sample'
        meta = JSONFeedMetadata(feed_name=feed_name, data_dir=meta_temp_dir)

        # meta object created
        self.assertIsInstance(meta, JSONFeedMetadata)

        # ---
        # non-existing, update=False

        feed_name = 'modified'
        meta = JSONFeedMetadata(feed_name=feed_name, data_dir=meta_temp_dir)

        # meta object created
        self.assertIsNotNone(meta)
        # should not be ready
        self.assertFalse(meta.is_downloaded())
        self.assertFalse(meta.is_parsed())
        self.assertFalse(meta.is_ready())

        # ---
        # non-existing, update=True

        meta = JSONFeedMetadata(
            feed_name=feed_name,
            data_dir=meta_temp_dir,
        )
        _EVENT_LOOP.run_until_complete(meta.update())

        # should be ready
        self.assertTrue(meta.is_ready())

        # file should exist
        self.assertTrue(os.path.exists(meta.path))

        # file content should not be empty
        with open(meta.path, 'r') as f:
            self.assertTrue(f.readline())