Skip to content

Commit 39a4f95

Browse files
committed
add tests
1 parent d73ccdb commit 39a4f95

File tree

6 files changed

+228
-7
lines changed

6 files changed

+228
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ is recommended for better performances on disk operations (detection of physical
2626
- core [![Maven Central](https://img.shields.io/maven-central/v/net.lecousin/core.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.lecousin%22%20AND%20a%3A%22core%22)
2727
[![Javadoc](https://img.shields.io/badge/javadoc-0.16.4-brightgreen.svg)](https://www.javadoc.io/doc/net.lecousin/core/0.16.4)
2828

29-
- core.loaders.maven [![Maven Central](https://img.shields.io/maven-central/v/net.lecousin/core.loaders.maven.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.lecousin.core.loaders%22%20AND%20a%3A%22maven%22)
29+
- core.loaders.maven [![Maven Central](https://img.shields.io/maven-central/v/net.lecousin.core.loaders/maven.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.lecousin.core.loaders%22%20AND%20a%3A%22maven%22)
3030
[![Javadoc](https://img.shields.io/badge/javadoc-0.16.4-brightgreen.svg)](https://www.javadoc.io/doc/net.lecousin.core.loaders/maven/0.16.4)
3131

3232
- core.javaee [![Maven Central](https://img.shields.io/maven-central/v/net.lecousin/core.javaee.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.lecousin%22%20AND%20a%3A%22core.javaee%22)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package net.lecousin.framework.core.tests.concurrent.util;
2+
3+
import net.lecousin.framework.concurrent.async.Async;
4+
import net.lecousin.framework.concurrent.util.AsyncTimeoutManager;
5+
import net.lecousin.framework.core.test.LCCoreAbstractTest;
6+
import net.lecousin.framework.mutable.MutableBoolean;
7+
8+
import org.junit.Assert;
9+
import org.junit.Test;
10+
11+
public class TestAsyncTimeout extends LCCoreAbstractTest {
12+
13+
@Test
14+
public void testNoTimeout() {
15+
Async<Exception> a = new Async<>();
16+
MutableBoolean timedOut = new MutableBoolean(false);
17+
AsyncTimeoutManager.timeout(a, 1000, () -> timedOut.set(true));
18+
a.unblock();
19+
try { Thread.sleep(2000); }
20+
catch (InterruptedException e) {}
21+
Assert.assertFalse(timedOut.get());
22+
}
23+
24+
@Test
25+
public void testAlreadyUnblocked() {
26+
Async<Exception> a = new Async<>();
27+
a.unblock();
28+
MutableBoolean timedOut = new MutableBoolean(false);
29+
AsyncTimeoutManager.timeout(a, 1, () -> timedOut.set(true));
30+
try { Thread.sleep(1000); }
31+
catch (InterruptedException e) {}
32+
Assert.assertFalse(timedOut.get());
33+
}
34+
35+
@Test
36+
public void testTimeout() {
37+
Async<Exception> a = new Async<>();
38+
MutableBoolean timedOut = new MutableBoolean(false);
39+
AsyncTimeoutManager.timeout(a, 100, () -> timedOut.set(true));
40+
try { Thread.sleep(2000); }
41+
catch (InterruptedException e) {}
42+
Assert.assertTrue(timedOut.get());
43+
a.unblock();
44+
}
45+
46+
@Test
47+
public void test2Timeouts() {
48+
Async<Exception> a = new Async<>();
49+
MutableBoolean timedOut1 = new MutableBoolean(false);
50+
AsyncTimeoutManager.timeout(a, 1000, () -> timedOut1.set(true));
51+
Async<Exception> b = new Async<>();
52+
MutableBoolean timedOut2 = new MutableBoolean(false);
53+
AsyncTimeoutManager.timeout(b, 1, () -> timedOut2.set(true));
54+
try { Thread.sleep(250); }
55+
catch (InterruptedException e) {}
56+
Assert.assertFalse(timedOut1.get());
57+
Assert.assertTrue(timedOut2.get());
58+
try { Thread.sleep(1500); }
59+
catch (InterruptedException e) {}
60+
Assert.assertTrue(timedOut1.get());
61+
Assert.assertTrue(timedOut2.get());
62+
}
63+
64+
}

net.lecousin.core/src/test/java/net/lecousin/framework/core/tests/concurrent/util/TestBufferedAsyncConsumer.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.lecousin.framework.core.tests.concurrent.util;
22

3+
import java.util.LinkedList;
4+
import java.util.List;
35
import java.util.Random;
46
import java.util.function.Consumer;
57

@@ -143,6 +145,35 @@ public void error(Exception error) {
143145
}
144146
}
145147

148+
@Test
149+
public void testPush() throws Exception {
150+
AsyncConsumer<Integer, Exception> finalConsumer = new AsyncConsumer<Integer, Exception>() {
151+
private int pos = 0;
152+
@Override
153+
public IAsync<Exception> consume(Integer data, Consumer<Integer> onDataRelease) {
154+
if (data.intValue() != pos)
155+
return new Async<>(new Exception("Received " + data.intValue() + ", expected was " + pos));
156+
pos++;
157+
return new Async<>(true);
158+
}
159+
160+
@Override
161+
public IAsync<Exception> end() {
162+
return new Async<>(true);
163+
}
164+
165+
@Override
166+
public void error(Exception error) {
167+
}
168+
};
169+
BufferedAsyncConsumer<Integer, Exception> buffered = new BufferedAsyncConsumer<>(20, finalConsumer);
170+
List<Integer> toPush = new LinkedList<>();
171+
for (int i = 0; i < 1000; ++i)
172+
toPush.add(Integer.valueOf(i));
173+
buffered.push(toPush).blockThrow(0);
174+
buffered.consumeEnd(Integer.valueOf(1000), null).blockThrow(0);
175+
}
176+
146177
private void send(MutableInteger nbSent, AsyncConsumer<Integer, Exception> consumer, Async<Exception> done, int max) {
147178
do {
148179
if (nbSent.get() == max) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package net.lecousin.framework.core.tests.concurrent.util;
2+
3+
import java.util.function.Consumer;
4+
5+
import net.lecousin.framework.concurrent.Task;
6+
import net.lecousin.framework.concurrent.async.Async;
7+
import net.lecousin.framework.concurrent.async.AsyncSupplier;
8+
import net.lecousin.framework.concurrent.async.IAsync;
9+
import net.lecousin.framework.concurrent.util.AsyncConsumer;
10+
import net.lecousin.framework.concurrent.util.AsyncProducer;
11+
import net.lecousin.framework.concurrent.util.LinkedAsyncProducer;
12+
import net.lecousin.framework.core.test.LCCoreAbstractTest;
13+
14+
import org.junit.Test;
15+
16+
public class TestLinkedProducerToConsumer extends LCCoreAbstractTest {
17+
18+
@Test
19+
public void test() throws Exception {
20+
new LinkedAsyncProducer<>(
21+
new IntegerProducer(0, 15),
22+
new IntegerProducer(16, 48),
23+
new IntegerProducer(49, 100)
24+
).toConsumer(new IntegerConsumer(100), "test production of integers", Task.PRIORITY_NORMAL).blockThrow(0);
25+
}
26+
27+
private static class IntegerProducer implements AsyncProducer<Integer, Exception> {
28+
29+
private int pos = 0;
30+
private int max;
31+
32+
public IntegerProducer(int start, int max) {
33+
this.pos = start;
34+
this.max = max;
35+
}
36+
37+
@Override
38+
public AsyncSupplier<Integer, Exception> produce() {
39+
return new Task.Cpu.FromSupplierThrows<Integer, Exception>("produce an integer", Task.PRIORITY_NORMAL,
40+
() -> pos > max ? null : Integer.valueOf(pos++)
41+
).start().getOutput();
42+
}
43+
44+
}
45+
46+
private static class IntegerConsumer implements AsyncConsumer<Integer, Exception> {
47+
48+
private int counter = 0;
49+
private int max;
50+
51+
public IntegerConsumer(int max) {
52+
this.max = max;
53+
}
54+
55+
@Override
56+
public IAsync<Exception> consume(Integer data, Consumer<Integer> onDataRelease) {
57+
if (data == null)
58+
return new Async<>(new NullPointerException());
59+
if (data.intValue() != counter)
60+
return new Async<>(new Exception("Received " + data + " but " + counter + " was expected"));
61+
if (data.intValue() > max)
62+
return new Async<>(new Exception("Received " + data + ", maximum expected is " + max));
63+
counter++;
64+
return new Async<>(true);
65+
}
66+
67+
@Override
68+
public IAsync<Exception> end() {
69+
if (counter == max + 1)
70+
return new Async<>(true);
71+
return new Async<>(new Exception("End reached but counter is " + counter));
72+
}
73+
74+
@Override
75+
public void error(Exception error) {
76+
}
77+
78+
}
79+
80+
}

net.lecousin.core/src/test/java/net/lecousin/framework/core/tests/concurrent/util/TestProducerToConsumer.java

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,56 @@
1515
public class TestProducerToConsumer extends LCCoreAbstractTest {
1616

1717
@Test
18-
public void test() throws Exception {
19-
new IntegerProducer().toConsumer(new IntegerConsumer(), "test production of integers", Task.PRIORITY_NORMAL).blockThrow(0);
18+
public void testIntegerProductionAndIntegerConsumption() throws Exception {
19+
new IntegerProducer(100).toConsumer(new IntegerConsumer(100), "test production of integers", Task.PRIORITY_NORMAL).blockThrow(0);
20+
}
21+
22+
@Test
23+
public void testShortProductionAndIntegerConsumption() throws Exception {
24+
new ShortProducer(100).toConsumer(s -> new AsyncSupplier<>(Integer.valueOf(s.intValue()), null), new IntegerConsumer(100), "test production of short and consumprtion of int", Task.PRIORITY_NORMAL).blockThrow(0);
25+
}
26+
27+
@Test
28+
public void testEmptyProducer() throws Exception {
29+
new AsyncProducer.Empty<Integer, Exception>().toConsumer(new IntegerConsumer(0), "test empty production of integers", Task.PRIORITY_NORMAL).blockThrow(0);
30+
}
31+
32+
@Test
33+
public void testSingleIntegerProducer() throws Exception {
34+
new AsyncProducer.SingleData<Integer, Exception>(Integer.valueOf(0)).toConsumer(new IntegerConsumer(1), "test production of 1 integer", Task.PRIORITY_NORMAL).blockThrow(0);
2035
}
2136

2237
private static class IntegerProducer implements AsyncProducer<Integer, Exception> {
2338

2439
private int counter = 0;
40+
private int max;
41+
42+
public IntegerProducer(int max) {
43+
this.max = max;
44+
}
2545

2646
@Override
2747
public AsyncSupplier<Integer, Exception> produce() {
2848
return new Task.Cpu.FromSupplierThrows<Integer, Exception>("produce an integer", Task.PRIORITY_NORMAL,
29-
() -> counter == 100 ? null : Integer.valueOf(counter++)
49+
() -> counter == max ? null : Integer.valueOf(counter++)
50+
).start().getOutput();
51+
}
52+
53+
}
54+
55+
private static class ShortProducer implements AsyncProducer<Short, Exception> {
56+
57+
private short counter = 0;
58+
private short max;
59+
60+
public ShortProducer(int max) {
61+
this.max = (short)max;
62+
}
63+
64+
@Override
65+
public AsyncSupplier<Short, Exception> produce() {
66+
return new Task.Cpu.FromSupplierThrows<Short, Exception>("produce a short", Task.PRIORITY_NORMAL,
67+
() -> counter == max ? null : Short.valueOf(counter++)
3068
).start().getOutput();
3169
}
3270

@@ -35,22 +73,27 @@ public AsyncSupplier<Integer, Exception> produce() {
3573
private static class IntegerConsumer implements AsyncConsumer<Integer, Exception> {
3674

3775
private int counter = 0;
76+
private int max;
77+
78+
public IntegerConsumer(int max) {
79+
this.max = max;
80+
}
3881

3982
@Override
4083
public IAsync<Exception> consume(Integer data, Consumer<Integer> onDataRelease) {
4184
if (data == null)
4285
return new Async<>(new NullPointerException());
4386
if (data.intValue() != counter)
4487
return new Async<>(new Exception("Received " + data + " but " + counter + " was expected"));
45-
if (data.intValue() >= 100)
46-
return new Async<>(new Exception("Received " + data + ", maximum expected is 99"));
88+
if (data.intValue() >= max)
89+
return new Async<>(new Exception("Received " + data + ", maximum expected is " + (max - 1)));
4790
counter++;
4891
return new Async<>(true);
4992
}
5093

5194
@Override
5295
public IAsync<Exception> end() {
53-
if (counter == 100)
96+
if (counter == max)
5497
return new Async<>(true);
5598
return new Async<>(new Exception("End reached but counter is " + counter));
5699
}

pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@
4040
**/framework/io/FileIO.*,
4141
**/framework/io/FragmentedSubIO.*,
4242
**/framework/io/LinkedIO.*,
43+
**/framework/io/buffering/BufferedIO.*,
44+
**/framework/io/buffering/PreBufferedReadable.*,
4345
**/framework/io/data/BytesBitsBuffer.*,
4446
**/framework/io/data/SingleByteBitsBuffer.*,
47+
**/framework/io/out2in/OutputToInputBuffers.*,
4548
**/framework/io/util/DataUtil.*,
4649
**/framework/math/FragmentedRange*.*,
4750
**/framework/xml/XMLStreamReader.*

0 commit comments

Comments
 (0)