code: def test_interactive_run(self):
      # 1) Test run interactive terminal in environment
      # 2) Test run jupyter notebook in environment
      # Create environment definition
      self.project_controller.init("test6", "test description")
      self.environment_controller = EnvironmentController()
  
      definition_filepath = os.path.join(
          self.environment_controller.home, "Dockerfile"
      )
      random_text = str(uuid.uuid1())
      with open(definition_filepath, "wb") as f:
          f.write(
              to_bytes(
                  "FROM nbgallery/jupyter-alpine:latest" + os.linesep
              )
          )
          f.write(to_bytes(str("RUN echo " + random_text)))
  
      input_dict = {
          "paths": [definition_filepath],
      }
  
      # Create environment in the project
      environment_obj = self.environment_controller.create(input_dict)
      self.environment_ids.append(environment_obj.id)
  
      # 1) Test option 1
      @timeout_decorator.timeout(10, use_signals=False)
      def timed_run(container_name, timed_run):
          run_options = {
              "command": [],
              "ports": ["8889:8889"],
              "name": environment_obj.id + "-" + container_name,
              "volumes": None,
              "mem_limit": "4g",
              "detach": True,
              "stdin_open": True,
              "tty": True,
              "api": False,
          }
  
          log_filepath = os.path.join(
              self.project_controller.home, "task.log"
          )
  
          # Build environment in the project
          _ = self.environment_controller.build(environment_obj.id)
  
          # Run environment in the project
          self.environment_controller.run(
              environment_obj.id, run_options, log_filepath
          )
  
          return timed_run
  
      container_name = str(uuid.uuid1())
      timed_run_result = False
      try:
          timed_run_result = timed_run(container_name, timed_run_result)
      except timeout_decorator.timeout_decorator.TimeoutError:
          timed_run_result = True
  
      assert timed_run_result
  
      # 2) Test option 2
      environment_obj = self.environment_controller.create(input_dict)
      self.environment_ids.append(environment_obj.id)
  
      @timeout_decorator.timeout(10, use_signals=False)
      def timed_run(container_name, timed_run):
          run_options = {
              "command": ["jupyter", "notebook", "--allow-root"],
              "ports": ["8888:8888"],
              "name": environment_obj.id + "-" + container_name,
              "volumes": None,
              "mem_limit": "4g",
              "detach": True,
              "stdin_open": False,
              "tty": False,
              "api": False,
          }
  
          log_filepath = os.path.join(
              self.project_controller.home, "task.log"
          )
  
          # Build environment in the project
          _ = self.environment_controller.build(environment_obj.id)
  
          # Run environment in the project
          self.environment_controller.run(
              environment_obj.id, run_options, log_filepath
          )
  
          return timed_run
  
      container_name = str(uuid.uuid1())
      timed_run_result = False
      try:
          timed_run_result = timed_run(container_name, timed_run_result)
      except timeout_decorator.timeout_decorator.TimeoutError:
          timed_run_result = True
  
      assert timed_run_result
  
imports: import os
  import uuid
  import threading
  import tempfile
  import platform
  import timeout_decorator
  from io import open
  from datmo.config import Config
  from datmo.core.controller.project import ProjectController
  from datmo.core.controller.environment.environment import EnvironmentController
  from datmo.core.entity.environment import Environment
  from datmo.core.util.exceptions import EntityNotFound, RequiredArgumentMissing, TooManyArgumentsFound, FileAlreadyExistsError, UnstagedChanges, EnvironmentDoesNotExist, ProjectNotInitialized
  from datmo.core.util.misc_functions import check_docker_inactive, pytest_docker_environment_failed_instantiation
label_desc: Use image node_id 14 for calling the TestEnvironmentController obj's underlying member method code with example usage: obj.test_interactive_run() and returns: timed_run, timed_run