package org.jgroups.tests;
import org.jgroups.Address;
import org.jgroups.Global;
import org.jgroups.blocks.cs.ReceiverAdapter;
import org.testng.annotations.Test;
import java.nio.ByteBuffer;
import java.util.Arrays;
/**
* Tests {@link ReceiverAdapter}
* @author Bela Ban
* @since 3.6.4
*/
@Test(groups=Global.FUNCTIONAL,singleThreaded=false)
public class ReceiverAdapterTest {
public static void testSimpleReceive() {
testSimpleReceive(ByteBuffer.allocate(50));
testSimpleReceive(ByteBuffer.allocateDirect(50));
}
public static void testSimpleWrap() {
MyReceiver rec=new MyReceiver();
ByteBuffer buf=ByteBuffer.wrap("Bela Ban".getBytes(), 5, 3);
rec.receive(null, buf);
assert rec.offset == 5 && rec.length == 3;
byte[] tmp=new byte[3];
buf.get(tmp);
assert Arrays.equals(tmp, "Ban".getBytes());
}
protected static void testSimpleReceive(final ByteBuffer buf) {
MyReceiver rec=new MyReceiver();
buf.putInt(1).putInt(2).putInt(3);
buf.flip();
rec.receive(null, buf);
assert rec.offset == 0 && rec.length == Global.INT_SIZE *3;
}
protected static final class MyReceiver extends ReceiverAdapter {
protected byte[] buffer;
protected int offset;
protected int length;
public void receive(Address sender, byte[] buf, int offset, int length) {
this.buffer=buf;
this.offset=offset;
this.length=length;
}
public String toString() {
return String.format("buf.length=%d, offset=%d, length=%d", buffer != null? buffer.length : 0, offset, length);
}
}
}