package com.hazelcast.client.io; import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.client.impl.protocol.ClientMessage; import com.hazelcast.config.Config; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import com.hazelcast.test.HazelcastParametersRunnerFactory; import com.hazelcast.test.HazelcastTestSupport; import com.hazelcast.test.annotation.QuickTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import org.junit.runners.Parameterized.UseParametersRunnerFactory; import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Random; import static com.hazelcast.spi.properties.GroupProperty.SOCKET_BUFFER_DIRECT; import static com.hazelcast.spi.properties.GroupProperty.SOCKET_CLIENT_BUFFER_DIRECT; import static org.junit.Assert.assertArrayEquals; /** * A test that verifies that the Client can deal with various permutations of direct-buffers. */ @Category(QuickTest.class) @RunWith(Parameterized.class) @UseParametersRunnerFactory(HazelcastParametersRunnerFactory.class) public class DirectBufferTest extends HazelcastTestSupport { @Parameters() public static Collection<Boolean[]> params() { return Arrays.asList(new Boolean[][]{ {false, false}, {false, true}, {true, false}, {true, true}, }); } @Parameter(0) public boolean memberDirectBuffer; @Parameter(1) public boolean clientDirectBuffer; private HazelcastInstance client; private HazelcastInstance server; @After public void after() { if (client != null) { client.shutdown(); } if (server != null) { server.shutdown(); } Hazelcast.shutdownAll(); HazelcastClient.shutdownAll(); } @Test public void test() { Config config = new Config(); config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false); config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(true); config.setProperty(SOCKET_BUFFER_DIRECT.getName(), "" + memberDirectBuffer); ClientConfig clientConfig = new ClientConfig(); clientConfig.setProperty(SOCKET_CLIENT_BUFFER_DIRECT.getName(), "" + clientDirectBuffer); server = Hazelcast.newHazelcastInstance(config); client = HazelcastClient.newHazelcastClient(clientConfig); List<byte[]> values = new LinkedList<byte[]>(); IMap<Integer, byte[]> map = client.getMap("foo"); for (int k = 0; k < 24; k++) { byte[] value = randomByteArray((int) Math.pow(2, k)); values.add(value); map.put(k, value); } for (int k = 0; k < values.size(); k++) { byte[] expected = values.get(k); assertArrayEquals(expected, map.get(k)); } } private static byte[] randomByteArray(int length) { byte[] bytes = new byte[length]; new Random().nextBytes(bytes); return bytes; } }