def check_feed(self): """Check if there is a feed update. Wait until all the running scans finished. Set a flag to announce there is a pending feed update, which avoids to start a new scan. """ if not self.vts.is_cache_available: return current_feed = self.nvti.get_feed_version() is_outdated = self.feed_is_outdated(current_feed) # Check if the nvticache in redis is outdated if not current_feed or is_outdated: with self.feed_lock as fl: if fl.has_lock(): self.initialized = False Openvas.load_vts_into_redis() notushandler = NotusMetadataHandler(nvti=self.nvti) notushandler.update_metadata() current_feed = self.nvti.get_feed_version() self.set_vts_version(vts_version=current_feed) vthelper = VtHelper(self.nvti) self.vts.sha256_hash = ( vthelper.calculate_vts_collection_hash()) self.initialized = True else: logger.debug("The feed was not upload or it is outdated, " "but other process is locking the update. " "Trying again later...") return
def test_update_metadata_warning(self): notus = NotusMetadataHandler() logging.Logger.warning = MagicMock() path = Path("./tests/notus/example.csv").resolve() notus._get_csv_filepaths = MagicMock(return_value=[path]) notus.is_checksum_correct = MagicMock(return_value=False) notus.update_metadata() logging.Logger.warning.assert_called_with(f'Checksum for %s failed', path)
def test_update_metadata_field_name_failed(self): notus = NotusMetadataHandler(metadata_path="./tests/notus") logging.Logger.warning = MagicMock() path = Path("./tests/notus/example.csv").resolve() notus._get_csv_filepaths = MagicMock(return_value=[path]) notus.is_checksum_correct = MagicMock(return_value=True) notus._check_field_names_lsc = MagicMock(return_value=False) notus.update_metadata() logging.Logger.warning.assert_called_with( f'Field names check for %s failed', path)
def test_update_metadata_success(self): notus = NotusMetadataHandler(metadata_path="./tests/notus") logging.Logger.warning = MagicMock() path = Path("./tests/notus/example.csv").resolve() purepath = PurePath(path).name notus._get_csv_filepaths = MagicMock(return_value=[path]) notus.is_checksum_correct = MagicMock(return_value=True) notus._check_field_names_lsc = MagicMock(return_value=True) notus.upload_lsc_from_csv_reader = MagicMock(return_value=True) notus.update_metadata() logging.Logger.warning.assert_not_called()
def test_update_metadata_failed(self): notus = NotusMetadataHandler(metadata_path="./tests/notus") logging.Logger.warning = MagicMock() path = Path("./tests/notus/example.csv").resolve() notus._get_csv_filepaths = MagicMock(return_value=[path]) notus.is_checksum_correct = MagicMock(return_value=True) notus._check_field_names_lsc = MagicMock(return_value=True) notus.upload_lsc_from_csv_reader = MagicMock(return_value=False) notus.update_metadata() logging.Logger.warning.assert_called_with( "Some advaisory was not loaded from %s", path.name)
def init(self, server: BaseServer) -> None: self.scan_collection.init() server.start(self.handle_client_stream) self.scanner_info['version'] = Openvas.get_version() self.set_params_from_openvas_settings() with self.feed_lock.wait_for_lock(): Openvas.load_vts_into_redis() notushandler = NotusMetadataHandler(nvti=self.nvti) notushandler.update_metadata() current_feed = self.nvti.get_feed_version() self.set_vts_version(vts_version=current_feed) logger.debug("Calculating vts integrity check hash...") vthelper = VtHelper(self.nvti) self.vts.sha256_hash = vthelper.calculate_vts_collection_hash() self.initialized = True