1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel.unix.tests;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.buffer.Unpooled;
20 import io.netty.buffer.UnpooledByteBufAllocator;
21 import io.netty.buffer.UnpooledDirectByteBuf;
22 import io.netty.channel.unix.IovArray;
23 import org.junit.jupiter.api.Test;
24
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertNotEquals;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
28
29 public abstract class IovArrayTest {
30
31 @Test
32 public void testNotFailsWihtoutMemoryAddress() {
33 ByteBuf buffer = new NoMemoryAddressByteBuf(128);
34 IovArray array = new IovArray(buffer);
35
36 ByteBuf buf = Unpooled.directBuffer().writeZero(8);
37 ByteBuf buf2 = new NoMemoryAddressByteBuf(8).writeZero(8);
38 assertTrue(array.add(buf, 0, buf.readableBytes()));
39 assertTrue(array.add(buf, 0, buf2.readableBytes()));
40 assertEquals(2, array.count());
41 assertEquals(16, array.size());
42 assertTrue(buf.release());
43 assertTrue(buf2.release());
44 assertNotEquals(-1, array.memoryAddress(0));
45 array.release();
46 assertEquals(0, buffer.refCnt());
47 }
48
49 private static final class NoMemoryAddressByteBuf extends UnpooledDirectByteBuf {
50
51 NoMemoryAddressByteBuf(int capacity) {
52 super(UnpooledByteBufAllocator.DEFAULT, capacity, Integer.MAX_VALUE);
53 }
54
55 @Override
56 public boolean hasMemoryAddress() {
57 return false;
58 }
59
60 @Override
61 public long memoryAddress() {
62 throw new UnsupportedOperationException();
63 }
64 }
65 }