code: def test_call_async_and_sync(self):
      client = moolib.Rpc()
      host = moolib.Rpc()
  
      client.set_name("client")
      client.set_timeout(1)
  
      num_calls = 0
  
      def hello(message):
          nonlocal num_calls
          num_calls += 1
          print("Got hello: ", message)
          return "this is a response to message '" + message + "'"
  
      host.define("hello", hello)
  
      host.set_name("host")
      host.listen(ADDRESS)
  
      client.connect(ADDRESS)
  
      message = "this is a message from client"
      future = client.async_("host", "hello", message)
  
      response = future.result()
  
      assert num_calls == 1
      assert response == hello(message)
  
      message2 = "sync test"
      assert client.sync("host", "hello", message2) == hello(message2)
      assert num_calls == 4
  
imports: import re
  import pytest
  import moolib
label_desc: Use image node_id 1 for calling the TestMoolib obj's underlying member method code with example usage: obj.test_call_async_and_sync() and returns: unknown