code: def test_function_decorated_by_remote_class(self):
      port = get_free_tcp_port()
      master = Master(port=port)
      th = threading.Thread(target=master.run)
      th.start()
      time.sleep(3)
      worker1 = Worker("localhost:{}".format(port), 1)
      for _ in range(3):
          if master.cpu_num == 1:
              break
          time.sleep(10)
      self.assertEqual(1, master.cpu_num)
      parl.connect("localhost:{}".format(port))
  
      with self.assertRaises(AssertionError):
  
          @parl.remote_class
          def func():
              pass
  
      self.assertEqual(1, master.cpu_num)
  
      master.exit()
      worker1.exit()
  
file_path: PARL/parl/remote/tests/remote_class_test.py
imports: import unittest
  import parl
  import time
  import threading
  from parl.remote.master import Master
  from parl.remote.worker import Worker
  from parl.remote.client import disconnect
  from parl.utils import get_free_tcp_port
label_desc: Use image node_id 3 for calling the TestCluster obj's underlying member method code with example usage: obj.test_function_decorated_by_remote_class() without return types