code: def test_arbitary_lock_unlock_manager(self):
      manager = PerspectiveManager(lock=True)
      make_table_message = {
          "id": 1,
          "name": "table1",
          "cmd": "table",
          "args": [data],
      }
      manager._process(
          make_table_message,
          partial(
              self.validate_post,
              expected={
                  "id": 1,
                  "error": "`table` failed - access denied",
              },
          ),
      )
      manager.unlock()
      manager._process(make_table_message, self.post)
      assert manager._tables["table1"].schema() == {"a": int, "b": str}
      update_message = {
          "id": 2,
          "name": "table1",
          "cmd": "table_method",
          "method": "update",
          "args": [data],
      }
      manager._process(update_message, self.post)
      assert manager._tables["table1"].size() == 6
      manager.lock()
      update_message_new = {
          "id": 3,
          "name": "table1",
          "cmd": "table_method",
          "method": "update",
          "args": [data],
      }
      manager._process(
          update_message_new,
          partial(
              self.validate_post,
              expected={
                  "id": 3,
                  "error": "`table_method.update` failed - access denied",
              },
          ),
      )
  
imports: import json
  import time
  import numpy
  import pyarrow
  from datetime import datetime
  from functools import partial
  from pytest import raises
  from perspective import Table, PerspectiveError, PerspectiveManager
label_desc: Use image node_id 26 for calling the TestPerspectiveManager obj's underlying member method code with example usage: obj.test_arbitary_lock_unlock_manager() without return types