def test_asset_events_error_parsing(conn_string): event_log_storage = PostgresEventLogStorage.create_clean_storage( conn_string) _logs = [] def mock_log(msg): _logs.append(msg) asset_key = 'asset one' @solid def materialize_one(_): yield Materialization( label='one', asset_key=asset_key, ) yield Output(1) def _solids(): materialize_one() events_one, _ = synthesize_events(_solids) for event in events_one: event_log_storage.store_event(event) with mock.patch( 'dagster_postgres.event_log.event_log.logging.warning', side_effect=mock_log, ): with mock.patch( 'dagster_postgres.event_log.event_log.deserialize_json_to_dagster_namedtuple', return_value='not_an_event_record', ): assert asset_key in set(event_log_storage.get_all_asset_keys()) events = event_log_storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match( 'Could not resolve asset event record as EventRecord', _logs[0]) _logs = [] # reset logs with mock.patch( 'dagster_postgres.event_log.event_log.deserialize_json_to_dagster_namedtuple', side_effect=seven.JSONDecodeError('error', '', 0), ): assert asset_key in set(event_log_storage.get_all_asset_keys()) events = event_log_storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match('Could not parse asset event record id', _logs[0])
def test_asset_events_error_parsing(self, storage): if not isinstance(storage, SqlEventLogStorage): pytest.skip("This test is for SQL-backed Event Log behavior") _logs = [] def mock_log(msg): _logs.append(msg) asset_key = AssetKey("asset_one") @solid def materialize_one(_): yield AssetMaterialization(asset_key=asset_key) yield Output(1) def _solids(): materialize_one() events_one, _ = _synthesize_events(_solids) for event in events_one: storage.store_event(event) with mock.patch( "dagster.core.storage.event_log.sql_event_log.logging.warning", side_effect=mock_log, ): with mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", return_value="not_an_event_record", ): assert asset_key in set(storage.all_asset_keys()) events = storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match( "Could not resolve asset event record as EventRecord", _logs[0]) _logs = [] # reset logs with mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", side_effect=seven.JSONDecodeError("error", "", 0), ): assert asset_key in set(storage.all_asset_keys()) events = storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match("Could not parse asset event record id", _logs[0])
def test_asset_events_error_parsing(conn_string): event_log_storage = PostgresEventLogStorage.create_clean_storage( conn_string) _logs = [] def mock_log(msg): _logs.append(msg) asset_key = AssetKey("asset_one") @solid def materialize_one(_): yield AssetMaterialization(asset_key=asset_key) yield Output(1) def _solids(): materialize_one() events_one, _ = synthesize_events(_solids) for event in events_one: event_log_storage.store_event(event) with mock.patch( "dagster.core.storage.event_log.sql_event_log.logging.warning", side_effect=mock_log, ): with mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", return_value="not_an_event_record", ): assert asset_key in set(event_log_storage.get_all_asset_keys()) events = event_log_storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match( "Could not resolve asset event record as EventRecord", _logs[0]) _logs = [] # reset logs with mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", side_effect=seven.JSONDecodeError("error", "", 0), ): assert asset_key in set(event_log_storage.get_all_asset_keys()) events = event_log_storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match("Could not parse asset event record id", _logs[0])
def test_asset_events_error_parsing(self, storage): if not isinstance(storage, SqlEventLogStorage): pytest.skip("This test is for SQL-backed Event Log behavior") _logs = [] def mock_log(msg): _logs.append(msg) asset_key = AssetKey("asset_one") @solid def materialize_one(_): yield AssetMaterialization(asset_key=asset_key) yield Output(1) def _solids(): materialize_one() with instance_for_test() as instance: if not storage._instance: # pylint: disable=protected-access storage.register_instance(instance) events_one, _ = _synthesize_events(_solids, instance=instance) for event in events_one: storage.store_event(event) with ExitStack() as stack: stack.enter_context( mock.patch( "dagster.core.storage.event_log.sql_event_log.logging.warning", side_effect=mock_log, )) # for generic sql-based event log storage stack.enter_context( mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", return_value="not_an_event_record", )) # for sqlite event log storage, which overrides the record fetching implementation stack.enter_context( mock.patch( "dagster.core.storage.event_log.sqlite.sqlite_event_log.deserialize_json_to_dagster_namedtuple", return_value="not_an_event_record", )) assert asset_key in set(storage.all_asset_keys()) events = storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match( "Could not resolve event record as EventLogEntry", _logs[0]) with ExitStack() as stack: _logs = [] # reset logs stack.enter_context( mock.patch( "dagster.core.storage.event_log.sql_event_log.logging.warning", side_effect=mock_log, )) # for generic sql-based event log storage stack.enter_context( mock.patch( "dagster.core.storage.event_log.sql_event_log.deserialize_json_to_dagster_namedtuple", side_effect=seven.JSONDecodeError("error", "", 0), )) # for sqlite event log storage, which overrides the record fetching implementation stack.enter_context( mock.patch( "dagster.core.storage.event_log.sqlite.sqlite_event_log.deserialize_json_to_dagster_namedtuple", side_effect=seven.JSONDecodeError("error", "", 0), )) assert asset_key in set(storage.all_asset_keys()) events = storage.get_asset_events(asset_key) assert len(events) == 0 assert len(_logs) == 1 assert re.match("Could not parse event record id", _logs[0])