diff --git a/ops/model.py b/ops/model.py
index 8425736..45e6a48 100644
--- a/ops/model.py
+++ b/ops/model.py
@@ -887,6 +887,15 @@ class RelationData(Mapping['UnitOrApplication', 'RelationDataContent']):
         return iter(self._data)
 
     def __getitem__(self, key: 'UnitOrApplication'):
+        if key is None and self.relation.app is None:
+            # NOTE: if juju gets fixed to set JUJU_REMOTE_APP for relation-broken events, then that
+            # should fix the only case in which we expect key to be None - potentially removing the
+            # need for this error in future ops versions (i.e. if relation.app is guaranteed to not
+            # be None. See https://bugs.launchpad.net/juju/+bug/1960934.
+            raise KeyError(
+                'Cannot index relation data with "None".'
+                ' Are you trying to access remote app data during a relation-broken event?'
+                ' This is not allowed.')
         return self._data[key]
 
     def __repr__(self):
@@ -2081,7 +2090,7 @@ class _ModelBackend:
             event_relation_id = int(os.environ['JUJU_RELATION_ID'].split(':')[-1])
             if relation_id == event_relation_id:
                 # JUJU_RELATION_ID is this relation, use JUJU_REMOTE_APP.
-                return os.environ['JUJU_REMOTE_APP']
+                return os.getenv('JUJU_REMOTE_APP') or None
 
         # If caller is asking for information about another relation, use
         # "relation-list --app" to get it.

diff --git a/ops/testing.py b/ops/testing.py
index a116104..c11080c 100755
--- a/ops/testing.py
+++ b/ops/testing.py
@@ -1175,9 +1175,21 @@ class _TestingModelBackend:
         if relation_id not in self._relation_app_and_units:
             # Non-existent or dead relation
             return None
+        if 'relation_broken' in self._hook_is_running:
+            # TODO: if juju ever starts setting JUJU_REMOTE_APP in relation-broken hooks runs,
+            # then we should kill this if clause.
+            # See https://bugs.launchpad.net/juju/+bug/1960934
+            return None
         return self._relation_app_and_units[relation_id]['app']
 
     def relation_get(self, relation_id, member_name, is_app):
+        if 'relation_broken' in self._hook_is_running and not self.relation_remote_app_name(
+                relation_id):
+            # TODO: if juju gets fixed to set JUJU_REMOTE_APP for this case, then we may opt to
+            # allow charms to read/get that (stale) relation data.
+            # See https://bugs.launchpad.net/juju/+bug/1960934
+            raise RuntimeError(
+                'remote-side relation data cannot be accessed during a relation-broken event')
         if is_app and '/' in member_name:
             member_name = member_name.split('/')[0]
         if relation_id not in self._relation_data:
@@ -1185,6 +1197,10 @@ class _TestingModelBackend:
         return self._relation_data[relation_id][member_name].copy()
 
     def relation_set(self, relation_id, key, value, is_app):
+        if 'relation_broken' in self._hook_is_running and not self.relation_remote_app_name(
+                relation_id):
+            raise RuntimeError(
+                'remote-side relation data cannot be accessed during a relation-broken event')
         relation = self._relation_data[relation_id]
         if is_app:
             bucket_key = self.app_name
diff --git a/test/test_model.py b/test/test_model.py
index b672b84..4cd20a0 100755
--- a/test/test_model.py
+++ b/test/test_model.py
@@ -715,12 +715,9 @@ class TestModel(unittest.TestCase):
         self.assertEqual(len(model.storages), 2)
         self.assertEqual(model.storages.keys(), meta.storages.keys())
         self.assertIn('disks', model.storages)
-        try:
+
+        with pytest.raises(KeyError, match='Did you mean'):
             model.storages['does-not-exist']
-        except KeyError as err:
-            assert 'Did you mean' in str(err), 'got wrong error message'
-        except Exception as err:
-            assert False, 'got wrong exception type: ' + str(err)
 
         test_cases = {
             0: {'name': 'disks', 'location': pathlib.Path('/var/srv/disks/0')},
@@ -968,7 +965,6 @@ def test_recursive_push_and_pull(case):
 
     errors = []
     try:
-        print(push_path, case.dst)
         c.push_path(push_path, case.dst)
     except ops.model.MultiPushPullError as err:
         if not case.errors:
@@ -978,9 +974,6 @@ def test_recursive_push_and_pull(case):
     assert case.errors == errors, \
         'push_path gave wrong expected errors: want {}, got {}'.format(case.errors, errors)
     for fpath in case.want:
-
-        for f in ops.model.Container._list_recursive(c.list_files, pathlib.Path('/')):
-            print(f)
         assert c.exists(fpath), 'push_path failed: file {} missing at destination'.format(fpath)
 
     # create pull test case filesystem structure
diff --git a/test/test_testing.py b/test/test_testing.py
index 265f272..32326b9 100644
--- a/test/test_testing.py
+++ b/test/test_testing.py
@@ -25,6 +25,7 @@ import textwrap
 import unittest
 from io import BytesIO, StringIO
 
+import pytest
 import yaml
 
 import ops.testing
@@ -318,6 +319,24 @@ class TestHarness(unittest.TestCase):
         self.assertTrue(len(harness.charm.observed_events), 1)
         self.assertIsInstance(harness.charm.observed_events[0], RelationEvent)
 
+    def test_relation_get_when_broken(self):
+        harness = Harness(RelationBrokenTester, meta='''
+            name: test-app
+            requires:
+                foo:
+                    interface: foofoo
+            ''')
+        self.addCleanup(harness.cleanup)
+        harness.begin()
+        harness.charm.observe_relation_events('foo')
+
+        # relation remote app is None to mirror production juju behavior where juju doesn't
+        # communicate the remote app to ops.
+        rel_id = harness.add_relation('foo', None)
+
+        with pytest.raises(KeyError, match='trying to access remote app data'):
+            harness.remove_relation(rel_id)
+
     def test_remove_relation(self):
         harness = Harness(RelationEventCharm, meta='''
             name: test-app
@@ -2565,6 +2584,7 @@ class RelationEventCharm(RecordingCharm):
         self.record_relation_data_on_events = False
 
     def observe_relation_events(self, relation_name):
+        self.relation_name = relation_name
         self.framework.observe(self.on[relation_name].relation_created, self._on_relation_created)
         self.framework.observe(self.on[relation_name].relation_joined, self._on_relation_joined)
         self.framework.observe(self.on[relation_name].relation_changed, self._on_relation_changed)
@@ -2607,6 +2627,16 @@ class RelationEventCharm(RecordingCharm):
         self.changes.append(recording)
 
 
+class RelationBrokenTester(RelationEventCharm):
+    """Access inaccessible relation data."""
+
+    def __init__(self, framework):
+        super().__init__(framework)
+
+    def _on_relation_broken(self, event):
+        print(event.relation.data[event.relation.app]['bar'])
+
+
 class ContainerEventCharm(RecordingCharm):
     """Record events related to container lifecycles."""
 

OF should gracefully handle blank application names in relation-broken hooks
See the discussion here: https://bugs.launchpad.net/juju/+bug/1960934

In a relation-broken hook, Juju does not set JUJU_REMOTE_APP. This is Working as Intended for Juju, but it raises an exception in the framework, when iterating through relations.

We need to refactor so that we handle the empty value without throwing the exception. 
test/test_testing.py::TestHarness::test_relation_get_when_broken
test/test_model.py::TestModel::test_active_message_default test/test_model.py::TestModel::test_app_immutable test/test_model.py::TestModel::test_app_relation_data_modify_local_as_leader test/test_model.py::TestModel::test_app_relation_data_modify_local_as_minion test/test_model.py::TestModel::test_base_status_instance_raises test/test_model.py::TestModel::test_config test/test_model.py::TestModel::test_config_immutable test/test_model.py::TestModel::test_get_relation test/test_model.py::TestModel::test_is_leader test/test_model.py::TestModel::test_local_set_valid_app_status test/test_model.py::TestModel::test_local_set_valid_unit_status test/test_model.py::TestModel::test_model_attributes test/test_model.py::TestModel::test_model_name_from_backend test/test_model.py::TestModel::test_our_unit_is_our test/test_model.py::TestModel::test_peer_relation_app test/test_model.py::TestModel::test_pod_immutable test/test_model.py::TestModel::test_pod_spec test/test_model.py::TestModel::test_relation_data_del_key test/test_model.py::TestModel::test_relation_data_del_missing_key test/test_model.py::TestModel::test_relation_data_modify_our test/test_model.py::TestModel::test_relation_data_modify_remote test/test_model.py::TestModel::test_relation_data_type_check test/test_model.py::TestModel::test_relation_no_units test/test_model.py::TestModel::test_relation_set_fail test/test_model.py::TestModel::test_relations_immutable test/test_model.py::TestModel::test_relations_keys test/test_model.py::TestModel::test_remote_app_relation_data test/test_model.py::TestModel::test_remote_app_status test/test_model.py::TestModel::test_remote_unit_status test/test_model.py::TestModel::test_remote_units_is_our test/test_model.py::TestModel::test_resources test/test_model.py::TestModel::test_resources_immutable test/test_model.py::TestModel::test_set_app_status_invalid test/test_model.py::TestModel::test_set_app_status_non_leader_raises test/test_model.py::TestModel::test_set_unit_status_invalid test/test_model.py::TestModel::test_status_eq test/test_model.py::TestModel::test_status_repr test/test_model.py::TestModel::test_storage test/test_model.py::TestModel::test_storages_immutable test/test_model.py::TestModel::test_unit_immutable test/test_model.py::TestModel::test_unit_relation_data test/test_model.py::TestModel::test_workload_version test/test_model.py::TestModel::test_workload_version_invalid test/test_model.py::test_recursive_list[case0] test/test_model.py::test_recursive_list[case1] test/test_model.py::test_recursive_list[case2] test/test_model.py::test_recursive_push_and_pull[case0] test/test_model.py::test_recursive_push_and_pull[case1] test/test_model.py::test_recursive_push_and_pull[case2] test/test_model.py::test_recursive_push_and_pull[case3] test/test_model.py::test_recursive_push_and_pull[case4] test/test_model.py::test_recursive_push_and_pull[case5] test/test_model.py::test_recursive_push_and_pull[case6] test/test_model.py::test_recursive_push_and_pull[case7] test/test_model.py::test_recursive_push_and_pull[case8] test/test_model.py::TestApplication::test_mocked_get_services test/test_model.py::TestApplication::test_planned_units test/test_model.py::TestApplication::test_planned_units_garbage_values test/test_model.py::TestApplication::test_planned_units_override test/test_model.py::TestApplication::test_planned_units_user_set test/test_model.py::TestContainers::test_unit_containers test/test_model.py::TestContainers::test_unit_get_container test/test_model.py::TestContainerPebble::test_add_layer test/test_model.py::TestContainerPebble::test_autostart test/test_model.py::TestContainerPebble::test_bare_can_connect_call test/test_model.py::TestContainerPebble::test_exec test/test_model.py::TestContainerPebble::test_get_check test/test_model.py::TestContainerPebble::test_get_checks test/test_model.py::TestContainerPebble::test_get_plan test/test_model.py::TestContainerPebble::test_get_service test/test_model.py::TestContainerPebble::test_get_services test/test_model.py::TestContainerPebble::test_get_system_info test/test_model.py::TestContainerPebble::test_list_files test/test_model.py::TestContainerPebble::test_make_dir test/test_model.py::TestContainerPebble::test_pull test/test_model.py::TestContainerPebble::test_push test/test_model.py::TestContainerPebble::test_remove_path test/test_model.py::TestContainerPebble::test_replan test/test_model.py::TestContainerPebble::test_restart test/test_model.py::TestContainerPebble::test_restart_fallback test/test_model.py::TestContainerPebble::test_restart_fallback_non_400_error test/test_model.py::TestContainerPebble::test_restart_no_arguments test/test_model.py::TestContainerPebble::test_send_signal test/test_model.py::TestContainerPebble::test_socket_path test/test_model.py::TestContainerPebble::test_start test/test_model.py::TestContainerPebble::test_start_no_arguments test/test_model.py::TestContainerPebble::test_stop test/test_model.py::TestContainerPebble::test_stop_no_arguments test/test_model.py::TestContainerPebble::test_type_errors test/test_model.py::TestModelBindings::test_binding_by_relation test/test_model.py::TestModelBindings::test_binding_by_relation_name test/test_model.py::TestModelBindings::test_binding_no_iface_name test/test_model.py::TestModelBindings::test_dead_relations test/test_model.py::TestModelBindings::test_empty_bind_addresses test/test_model.py::TestModelBindings::test_empty_interface_info test/test_model.py::TestModelBindings::test_invalid_keys test/test_model.py::TestModelBindings::test_missing_bind_addresses test/test_model.py::TestModelBindings::test_missing_egress_subnets test/test_model.py::TestModelBindings::test_missing_ingress_addresses test/test_model.py::TestModelBindings::test_no_bind_addresses test/test_model.py::TestModelBackend::test_action_fail test/test_model.py::TestModelBackend::test_action_get test/test_model.py::TestModelBackend::test_action_get_error test/test_model.py::TestModelBackend::test_action_log test/test_model.py::TestModelBackend::test_action_log_error test/test_model.py::TestModelBackend::test_action_set test/test_model.py::TestModelBackend::test_action_set_dotted_dict test/test_model.py::TestModelBackend::test_action_set_duplicated_keys test/test_model.py::TestModelBackend::test_action_set_error test/test_model.py::TestModelBackend::test_action_set_key_validation test/test_model.py::TestModelBackend::test_action_set_more_nested test/test_model.py::TestModelBackend::test_action_set_nested test/test_model.py::TestModelBackend::test_application_version_set test/test_model.py::TestModelBackend::test_application_version_set_invalid test/test_model.py::TestModelBackend::test_invalid_metric_label_values test/test_model.py::TestModelBackend::test_invalid_metric_labels test/test_model.py::TestModelBackend::test_invalid_metric_names test/test_model.py::TestModelBackend::test_invalid_metric_values test/test_model.py::TestModelBackend::test_is_leader_refresh test/test_model.py::TestModelBackend::test_juju_log test/test_model.py::TestModelBackend::test_local_set_invalid_status test/test_model.py::TestModelBackend::test_network_get test/test_model.py::TestModelBackend::test_network_get_errors test/test_model.py::TestModelBackend::test_relation_get_juju_version_quirks test/test_model.py::TestModelBackend::test_relation_get_set_is_app_arg test/test_model.py::TestModelBackend::test_relation_remote_app_name_env test/test_model.py::TestModelBackend::test_relation_remote_app_name_script_errors test/test_model.py::TestModelBackend::test_relation_remote_app_name_script_success test/test_model.py::TestModelBackend::test_relation_set_juju_version_quirks test/test_model.py::TestModelBackend::test_relation_tool_errors test/test_model.py::TestModelBackend::test_status_get test/test_model.py::TestModelBackend::test_status_is_app_forced_kwargs test/test_model.py::TestModelBackend::test_status_set_is_app_not_bool_raises test/test_model.py::TestModelBackend::test_storage_tool_errors test/test_model.py::TestModelBackend::test_valid_metrics test/test_model.py::TestLazyMapping::test_invalidate test/test_testing.py::TestHarness::test_actions_from_directory test/test_testing.py::TestHarness::test_actions_passed_in test/test_testing.py::TestHarness::test_add_oci_resource_custom test/test_testing.py::TestHarness::test_add_oci_resource_no_image test/test_testing.py::TestHarness::test_add_peer_relation_with_initial_data_leader test/test_testing.py::TestHarness::test_add_relation test/test_testing.py::TestHarness::test_add_relation_and_unit test/test_testing.py::TestHarness::test_add_relation_with_our_initial_data test/test_testing.py::TestHarness::test_add_relation_with_remote_app_data test/test_testing.py::TestHarness::test_add_resource_but_oci test/test_testing.py::TestHarness::test_add_resource_bytes test/test_testing.py::TestHarness::test_add_resource_string test/test_testing.py::TestHarness::test_add_resource_unknown test/test_testing.py::TestHarness::test_add_resource_unknown_filename test/test_testing.py::TestHarness::test_add_storage_after_harness_begin test/test_testing.py::TestHarness::test_add_storage_before_harness_begin test/test_testing.py::TestHarness::test_add_storage_without_metadata_key_fails test/test_testing.py::TestHarness::test_app_status test/test_testing.py::TestHarness::test_attach_storage test/test_testing.py::TestHarness::test_attach_storage_before_harness_begin test/test_testing.py::TestHarness::test_begin_twice test/test_testing.py::TestHarness::test_begin_with_initial_hooks_install_sets_status test/test_testing.py::TestHarness::test_begin_with_initial_hooks_multiple_relation_same_endpoint test/test_testing.py::TestHarness::test_begin_with_initial_hooks_no_relations test/test_testing.py::TestHarness::test_begin_with_initial_hooks_no_relations_not_leader test/test_testing.py::TestHarness::test_begin_with_initial_hooks_peer_relation_pre_defined test/test_testing.py::TestHarness::test_begin_with_initial_hooks_relation_charm_with_no_relation test/test_testing.py::TestHarness::test_begin_with_initial_hooks_unknown_status test/test_testing.py::TestHarness::test_begin_with_initial_hooks_with_application_data test/test_testing.py::TestHarness::test_begin_with_initial_hooks_with_multiple_units test/test_testing.py::TestHarness::test_begin_with_initial_hooks_with_one_relation test/test_testing.py::TestHarness::test_begin_with_initial_hooks_with_peer_relation test/test_testing.py::TestHarness::test_can_connect_legacy test/test_testing.py::TestHarness::test_config_from_directory test/test_testing.py::TestHarness::test_container_isdir_and_exists test/test_testing.py::TestHarness::test_container_pebble_ready test/test_testing.py::TestHarness::test_create_harness_twice test/test_testing.py::TestHarness::test_detach_storage test/test_testing.py::TestHarness::test_detach_storage_before_harness_begin test/test_testing.py::TestHarness::test_empty_config_raises test/test_testing.py::TestHarness::test_get_backend_calls test/test_testing.py::TestHarness::test_get_backend_calls_with_kwargs test/test_testing.py::TestHarness::test_get_pebble_container_plan test/test_testing.py::TestHarness::test_get_pebble_container_plan_unknown test/test_testing.py::TestHarness::test_get_pod_spec test/test_testing.py::TestHarness::test_get_relation_data test/test_testing.py::TestHarness::test_harness_leader_misconfig test/test_testing.py::TestHarness::test_hooks_disabled_contextmanager test/test_testing.py::TestHarness::test_hooks_disabled_nested_contextmanager test/test_testing.py::TestHarness::test_hooks_disabled_noop test/test_testing.py::TestHarness::test_hooks_enabled_and_disabled test/test_testing.py::TestHarness::test_metadata_from_directory test/test_testing.py::TestHarness::test_no_event_on_empty_update_relation_unit_app test/test_testing.py::TestHarness::test_no_event_on_empty_update_relation_unit_bag test/test_testing.py::TestHarness::test_no_event_on_no_diff_update_relation_unit_app test/test_testing.py::TestHarness::test_no_event_on_no_diff_update_relation_unit_bag test/test_testing.py::TestHarness::test_populate_oci_resources test/test_testing.py::TestHarness::test_relation_events test/test_testing.py::TestHarness::test_relation_set_app_not_leader test/test_testing.py::TestHarness::test_relation_set_deletes test/test_testing.py::TestHarness::test_remove_detached_storage test/test_testing.py::TestHarness::test_remove_relation test/test_testing.py::TestHarness::test_remove_relation_unit test/test_testing.py::TestHarness::test_remove_specific_relation_id test/test_testing.py::TestHarness::test_remove_storage_after_harness_begin test/test_testing.py::TestHarness::test_remove_storage_before_harness_begin test/test_testing.py::TestHarness::test_remove_storage_without_metadata_key_fails test/test_testing.py::TestHarness::test_removing_invalid_relation_id_raises_exception test/test_testing.py::TestHarness::test_removing_relation_refreshes_charm_model test/test_testing.py::TestHarness::test_removing_relation_removes_remote_app_data test/test_testing.py::TestHarness::test_removing_relation_unit_does_not_remove_other_unit_and_data test/test_testing.py::TestHarness::test_removing_relation_unit_removes_data_also test/test_testing.py::TestHarness::test_resource_folder_cleanup test/test_testing.py::TestHarness::test_set_leader test/test_testing.py::TestHarness::test_set_model_info_after_begin test/test_testing.py::TestHarness::test_set_model_name test/test_testing.py::TestHarness::test_set_model_name_after_begin test/test_testing.py::TestHarness::test_set_model_uuid_after_begin test/test_testing.py::TestHarness::test_set_workload_version test/test_testing.py::TestHarness::test_simulate_can_connect test/test_testing.py::TestHarness::test_storage_with_hyphens_works test/test_testing.py::TestHarness::test_unit_status test/test_testing.py::TestHarness::test_update_config test/test_testing.py::TestHarness::test_update_config_undefined_option test/test_testing.py::TestHarness::test_update_config_unset_boolean test/test_testing.py::TestHarness::test_update_peer_relation_app_data test/test_testing.py::TestHarness::test_update_peer_relation_no_local_unit_change_event test/test_testing.py::TestHarness::test_update_relation_exposes_new_data test/test_testing.py::TestHarness::test_update_relation_no_local_app_change_event test/test_testing.py::TestHarness::test_update_relation_no_local_unit_change_event test/test_testing.py::TestHarness::test_update_relation_remove_data test/test_testing.py::TestTestingModelBackend::test_conforms_to_model_backend test/test_testing.py::TestTestingModelBackend::test_get_pebble_methods test/test_testing.py::TestTestingModelBackend::test_lazy_resource_directory test/test_testing.py::TestTestingModelBackend::test_relation_get_unknown_relation_id test/test_testing.py::TestTestingModelBackend::test_relation_ids_unknown_relation test/test_testing.py::TestTestingModelBackend::test_relation_list_unknown_relation_id test/test_testing.py::TestTestingModelBackend::test_relation_remote_app_name test/test_testing.py::TestTestingModelBackend::test_resource_get_no_resource test/test_testing.py::TestTestingModelBackend::test_status_set_get_app test/test_testing.py::TestTestingModelBackend::test_status_set_get_unit test/test_testing.py::TestTestingPebbleClient::test_add_layer test/test_testing.py::TestTestingPebbleClient::test_add_layer_combine_no_override test/test_testing.py::TestTestingPebbleClient::test_add_layer_combine_override_merge test/test_testing.py::TestTestingPebbleClient::test_add_layer_combine_override_replace test/test_testing.py::TestTestingPebbleClient::test_add_layer_combine_override_unknown test/test_testing.py::TestTestingPebbleClient::test_add_layer_merge test/test_testing.py::TestTestingPebbleClient::test_add_layer_not_combined test/test_testing.py::TestTestingPebbleClient::test_add_layer_three_services test/test_testing.py::TestTestingPebbleClient::test_get_services_autostart test/test_testing.py::TestTestingPebbleClient::test_get_services_bad_request test/test_testing.py::TestTestingPebbleClient::test_get_services_none test/test_testing.py::TestTestingPebbleClient::test_get_services_not_started test/test_testing.py::TestTestingPebbleClient::test_get_services_start_stop test/test_testing.py::TestTestingPebbleClient::test_get_services_subset test/test_testing.py::TestTestingPebbleClient::test_get_services_unknown test/test_testing.py::TestTestingPebbleClient::test_invalid_start_service test/test_testing.py::TestTestingPebbleClient::test_methods_match_pebble_client test/test_testing.py::TestTestingPebbleClient::test_mixed_start_service test/test_testing.py::TestTestingPebbleClient::test_send_signal test/test_testing.py::TestTestingPebbleClient::test_start_service_str test/test_testing.py::TestTestingPebbleClient::test_start_started_service test/test_testing.py::TestTestingPebbleClient::test_stop_service_str test/test_testing.py::TestTestingPebbleClient::test_stop_services_unknown test/test_testing.py::TestTestingPebbleClient::test_stop_stopped_service test/test_testing.py::TestTestingFilesystem::test_create_and_read_with_different_encodings test/test_testing.py::TestTestingFilesystem::test_create_dir_with_extra_args test/test_testing.py::TestTestingFilesystem::test_create_file_fails_if_parent_dir_doesnt_exist test/test_testing.py::TestTestingFilesystem::test_create_file_from_bytes test/test_testing.py::TestTestingFilesystem::test_create_file_from_files test/test_testing.py::TestTestingFilesystem::test_create_file_from_str test/test_testing.py::TestTestingFilesystem::test_create_file_succeeds_if_parent_dir_doesnt_exist_when_make_dirs_true test/test_testing.py::TestTestingFilesystem::test_create_file_with_extra_args test/test_testing.py::TestTestingFilesystem::test_delete_file test/test_testing.py::TestTestingFilesystem::test_getattr test/test_testing.py::TestTestingFilesystem::test_getattr_file_not_found test/test_testing.py::TestTestingFilesystem::test_listdir test/test_testing.py::TestTestingFilesystem::test_listdir_on_file test/test_testing.py::TestTestingFilesystem::test_listdir_on_nonexistent_dir test/test_testing.py::TestTestingFilesystem::test_listdir_root_on_empty_os test/test_testing.py::TestTestingFilesystem::test_make_and_list_directory test/test_testing.py::TestTestingFilesystem::test_make_directory_recursively test/test_testing.py::TestTestingFilesystem::test_makedir test/test_testing.py::TestTestingFilesystem::test_makedir_fails_if_already_exists test/test_testing.py::TestTestingFilesystem::test_makedir_fails_if_parent_dir_doesnt_exist test/test_testing.py::TestTestingFilesystem::test_makedir_path_must_start_with_slash test/test_testing.py::TestTestingFilesystem::test_makedir_succeeds_if_already_exists_when_make_parents_true test/test_testing.py::TestTestingFilesystem::test_open_directory_fails test/test_testing.py::TestTestingFilesystem::test_storage_mount test/test_testing.py::TestTestingStorageMount::test_create_and_read_with_different_encodings test/test_testing.py::TestTestingStorageMount::test_create_dir_with_extra_args test/test_testing.py::TestTestingStorageMount::test_create_file_fails_if_parent_dir_doesnt_exist test/test_testing.py::TestTestingStorageMount::test_create_file_from_bytes test/test_testing.py::TestTestingStorageMount::test_create_file_from_files test/test_testing.py::TestTestingStorageMount::test_create_file_from_str test/test_testing.py::TestTestingStorageMount::test_create_file_succeeds_if_parent_dir_doesnt_exist_when_make_dirs_true test/test_testing.py::TestTestingStorageMount::test_create_file_with_extra_args test/test_testing.py::TestTestingStorageMount::test_delete_file test/test_testing.py::TestTestingStorageMount::test_getattr test/test_testing.py::TestTestingStorageMount::test_getattr_file_not_found test/test_testing.py::TestTestingStorageMount::test_listdir test/test_testing.py::TestTestingStorageMount::test_listdir_on_file test/test_testing.py::TestTestingStorageMount::test_listdir_on_nonexistent_dir test/test_testing.py::TestTestingStorageMount::test_listdir_root_on_empty_os test/test_testing.py::TestTestingStorageMount::test_make_and_list_directory test/test_testing.py::TestTestingStorageMount::test_make_directory_recursively test/test_testing.py::TestTestingStorageMount::test_makedir test/test_testing.py::TestTestingStorageMount::test_makedir_fails_if_already_exists test/test_testing.py::TestTestingStorageMount::test_makedir_fails_if_parent_dir_doesnt_exist test/test_testing.py::TestTestingStorageMount::test_makedir_path_must_start_with_slash test/test_testing.py::TestTestingStorageMount::test_makedir_succeeds_if_already_exists_when_make_parents_true test/test_testing.py::TestTestingStorageMount::test_open_directory_fails test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_container_storage_mounts test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_list_directory_object_itself test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_list_files_not_found_raises test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_dir_with_ownership test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_dir_with_permission_mask test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_directory test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_directory_recursively test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_directory_with_relative_path_fails test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_make_subdir_of_file_fails test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_and_list_file test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_and_pull_bytes test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_and_pull_larger_file test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_and_pull_non_utf8_data test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_as_child_of_file_raises_error test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_file_with_relative_path_fails test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_files_and_list test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_files_and_list_by_pattern test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_to_non_existent_subdir test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_with_ownership test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_push_with_permission_mask test/test_testing.py::TestPebbleStorageAPIsUsingMocks::test_remove_path