@Test
public void testExecuteClusterRequest() throws Exception {

	ClusterExecutorImpl clusterExecutorImpl = getClusterExecutorImpl();
	// Test 1, payload is not method handler
	ClusterNodeResponse clusterNodeResponse =
		clusterExecutorImpl.executeClusterRequest(
			ClusterRequest.createMulticastRequest(StringPool.BLANK));
	Exception exception1 = clusterNodeResponse.getException();
	Assert.assertEquals(
		"Payload is not of type " + MethodHandler.class.getName(),
		exception1.getMessage());
	// Test 2, invoke with exception1
	String timestamp = String.valueOf(System.currentTimeMillis());
	clusterNodeResponse = clusterExecutorImpl.executeClusterRequest(
		ClusterRequest.createMulticastRequest(
			new MethodHandler(
				new MethodKey(TestBean.class, "testMethod3", String.class),
				timestamp)));
	try {
		clusterNodeResponse.getResult();
		Assert.fail();
	}
	catch (Exception exception2) {
		Throwable throwable = exception2.getCause();
		Assert.assertEquals(timestamp, throwable.getMessage());
	}
	// Test 3, invoke without exception1
	timestamp = String.valueOf(System.currentTimeMillis());
	clusterNodeResponse = clusterExecutorImpl.executeClusterRequest(
		ClusterRequest.createMulticastRequest(
			new MethodHandler(
				new MethodKey(TestBean.class, "testMethod1", String.class),
				timestamp)));
	Assert.assertEquals(timestamp, clusterNodeResponse.getResult());
	// Test 4, thread local
	Assert.assertTrue(ClusterInvokeThreadLocal.isEnabled());
	clusterNodeResponse = clusterExecutorImpl.executeClusterRequest(
		ClusterRequest.createMulticastRequest(
			new MethodHandler(
				new MethodKey(TestBean.class, "testMethod5"))));
	Assert.assertFalse((Boolean)clusterNodeResponse.getResult());
	Assert.assertTrue(ClusterInvokeThreadLocal.isEnabled());
}