code: def test_nonexistent_function_and_dead_host(self):
      client = moolib.Rpc()
      host = moolib.Rpc()
  
      client.set_name("client")
      client.set_timeout(1)
  
      called = False
  
      def client_hello(a, b, c):
          nonlocal called
          called = True
          assert (a, b, c) == (1, 2, 3)
          return (c, b, a)
  
      client.define("client hello", client_hello)
  
      def hello(message):
          return 42
  
      host.define("hello", hello)
      host.set_name("host")
      host.listen(ADDRESS)
      client.connect(ADDRESS)
  
      with pytest.raises(  # TODO: Should this be a RuntimeError?
          RuntimeError,
          match=re.escape(
              "RPC remote function host::'non-existent function' does not exist"
          ),
      ):
          client.sync("host", "non-existent function")
  
      del host
  
      with pytest.raises(
          # TODO: Why is this <unknown> and not "hello"?
          RuntimeError,
          match=re.escape("Call (host::<unknown>) timed out"),
      ):
          client.sync("host", "hello", "is host dead?")
  
      host = moolib.Rpc()
      host.define("hello", hello)
      host.set_name("host")
      host.listen(ADDRESS)
  
      client.set_timeout(30)
      assert client.sync("host", "hello", "is host alive?") == 42
      assert host.sync("client", "client hello", 1, 2, 3) == (3, 2, 1)
      assert called
  
imports: import re
  import pytest
  import moolib
label_desc: Use image node_id 3 for calling the TestMoolib obj's underlying member method code with example usage: obj.test_nonexistent_function_and_dead_host() and returns: c,  b,  a, int