code: def test_init_and_readonly(self, environment):
      project: Project = neptune.init_project(
          project=environment.project
      )
  
      key = f"{self.gen_key()}-" + "-".join(
          (fake.word() for _ in range(4))
      )
      val = fake.word()
      project[key] = val
      project.sync()
      project.stop()
  
      read_only_project = neptune.init_project(
          mode="read-only", project=environment.project
      )
      read_only_project.sync()
  
      assert set(read_only_project.get_structure()["sys"]) == {
          "creation_time",
          "id",
          "modification_time",
          "monitoring_time",
          "name",
          "ping_time",
          "running_time",
          "size",
          "state",
          "tags",
          "visibility",
      }
      assert read_only_project[key].fetch() == val
  
imports: import pytest
  import neptune
  from neptune.exceptions import NeptuneModelKeyAlreadyExistsError
  from neptune.metadata_containers import Model, Project
  from neptune.types import GitRef
  from tests.e2e.base import AVAILABLE_CONTAINERS, BaseE2ETest, fake
  from tests.e2e.utils import initialize_container, reinitialize_container, with_check_if_file_appears
label_desc: Use image node_id 2 for calling the TestInitProject obj's underlying member method code with example usage: obj.test_init_and_readonly(environment) without return types