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]))
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]))
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)
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)
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))
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())