code: def test_create_environment_by_dictionary(self):
      environment = self.dal.environment.create(
          Environment(self.environment_input_dict)
      )
  
      assert environment.id
      assert (
          environment.driver_type
          == self.environment_input_dict["driver_type"]
      )
      assert (
          environment.file_collection_id
          == self.environment_input_dict["file_collection_id"]
      )
      assert (
          environment.definition_filename
          == self.environment_input_dict["definition_filename"]
      )
      assert (
          environment.hardware_info
          == self.environment_input_dict["hardware_info"]
      )
      assert (
          environment.unique_hash
          == self.environment_input_dict["unique_hash"]
      )
      assert environment.created_at
      assert environment.updated_at
  
      environment_2 = self.dal.environment.create(
          Environment(self.environment_input_dict)
      )
  
      assert environment_2.id != environment.id
  
      test_environment_input_dict = self.environment_input_dict.copy()
      test_environment_input_dict["id"] = "environment_id"
      environment_3 = self.dal.environment.create(
          Environment(test_environment_input_dict)
      )
  
      assert environment_3.id == test_environment_input_dict["id"]
  
imports: from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  import os
  import tempfile
  import platform
  from datetime import datetime
  from datmo.core.storage.driver.blitzdb_dal_driver import BlitzDBDALDriver
  from datmo.core.storage.local.dal import LocalDAL
  from datmo.core.entity.model import Model
  from datmo.core.entity.environment import Environment
  from datmo.core.util.exceptions import EntityNotFound, InvalidArgumentType
label_desc: Use image node_id 3 for calling the TestLocalDAL obj's underlying member method code with example usage: obj.test_create_environment_by_dictionary() without return types