Skip to content

Commit fa82411

Browse files
Extend skip and seek tests
1 parent cfae38d commit fa82411

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

server/src/test/java/org/elasticsearch/common/io/stream/BytesStreamOutputTests.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public void testWriteBytesWithLengthGreaterThanData() {
8080
public void testResetShrinksAndResetsCount() {
8181
int byteArrayLength = randomIntBetween(0, 100);
8282
stream.writeBytes(randomByteArrayOfLength(byteArrayLength), 0, byteArrayLength);
83+
assertEquals(byteArrayLength, stream.size());
8384
stream.reset();
8485
assertEquals(0, stream.size());
8586
// After reset, should be able to write again
@@ -89,6 +90,72 @@ public void testResetShrinksAndResetsCount() {
8990
assertEquals(b, stream.bytes().get(0));
9091
}
9192

93+
public void testSeek() {
94+
// Do some writing
95+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
96+
int byteArrayLength = randomIntBetween(0, 100);
97+
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);
98+
s.writeBytes(byteArray, 0, byteArrayLength);
99+
100+
// Seek either over what we've already written, or what we have yet to write
101+
int seekPosition = randomIntBetween(0, 200);
102+
s.seek(seekPosition);
103+
assertEquals(seekPosition, s.size());
104+
}
105+
106+
public void testSeekAtBoundaries() {
107+
// Do some arbitrary writing
108+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
109+
int byteArrayLength = randomIntBetween(0, 100);
110+
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);
111+
s.writeBytes(byteArray, 0, byteArrayLength);
112+
113+
s.seek(0);
114+
assertEquals(0, s.size());
115+
s.seek(Integer.MAX_VALUE);
116+
assertEquals(Integer.MAX_VALUE, s.size());
117+
}
118+
119+
public void testSeekWithOverflow() {
120+
// Do some arbitrary writing and then overflow
121+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
122+
int byteArrayLength = randomIntBetween(0, 100);
123+
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);
124+
s.writeBytes(byteArray, 0, byteArrayLength);
125+
assertThrows(IllegalArgumentException.class, () -> s.seek(randomLongBetween((long) Integer.MAX_VALUE + 1, (long) Integer.MAX_VALUE + 100)));
126+
}
127+
128+
public void testSkip() {
129+
// Do some arbitrary writing
130+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
131+
int byteArrayLength = randomIntBetween(0, 100);
132+
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);
133+
s.writeBytes(byteArray, 0, byteArrayLength);
134+
135+
int skipValue = randomIntBetween(0, 100);
136+
s.skip(skipValue);
137+
assertEquals(byteArrayLength + skipValue, s.size());
138+
}
139+
140+
public void testSkipAtBoundaries() {
141+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
142+
s.skip(0);
143+
assertEquals(0, s.size());
144+
s.skip(Integer.MAX_VALUE);
145+
assertEquals(Integer.MAX_VALUE, s.size());
146+
}
147+
148+
public void testSkipWithOverflow() {
149+
// Do some arbitrary writing and then overflow
150+
BytesStreamOutput s = new BytesStreamOutput(0, BigArrays.NON_RECYCLING_INSTANCE);
151+
int byteArrayLength = randomIntBetween(1, 100);
152+
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);
153+
s.writeBytes(byteArray, 0, byteArrayLength);
154+
155+
int skipPosition = randomIntBetween(Integer.MAX_VALUE - byteArrayLength + 1, Integer.MAX_VALUE);
156+
assertThrows(IllegalArgumentException.class, () -> s.skip(skipPosition));
157+
}
158+
92159
public void testSeekAndSkip() {
93160
int byteArrayLength = randomIntBetween(0, 100);
94161
byte[] byteArray = randomByteArrayOfLength(byteArrayLength);

0 commit comments

Comments
 (0)