pekko/akka-stream-tests/src/test/java/akka/stream/io/OutputStreamSinkTest.java
Patrik Nordwall b97a72c773 use blocking-io-dispatcher correctly in OutputStreamSource, #20666
* it used the materializer dispatcher for the blocking take
* it was leaking threads (blocking threads) when when materializer was shutdown abruptly
2016-05-31 19:34:00 +02:00

53 lines
1.7 KiB
Java

/**
* Copyright (C) 2015-2016 Lightbend Inc. <http://www.lightbend.com>
*/
package akka.stream.io;
import akka.stream.IOResult;
import akka.stream.StreamTest;
import akka.testkit.AkkaJUnitActorSystemResource;
import akka.stream.javadsl.Source;
import akka.stream.javadsl.StreamConverters;
import akka.stream.testkit.Utils;
import akka.util.ByteString;
import org.junit.ClassRule;
import org.junit.Test;
import scala.concurrent.Await;
import scala.concurrent.Future;
import scala.concurrent.duration.FiniteDuration;
import java.io.OutputStream;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
public class OutputStreamSinkTest extends StreamTest {
public OutputStreamSinkTest() {
super(actorSystemResource);
}
@ClassRule
public static AkkaJUnitActorSystemResource actorSystemResource = new AkkaJUnitActorSystemResource("OutputStreamSinkTest",
Utils.UnboundedMailboxConfig());
@Test
public void mustSignalFailureViaIoResult() throws Exception {
final OutputStream os = new OutputStream() {
volatile int left = 3;
public void write(int data) {
if (left == 0) {
throw new RuntimeException("Can't accept more data.");
}
left -= 1;
}
};
final CompletionStage<IOResult> resultFuture = Source.single(ByteString.fromString("123456")).runWith(StreamConverters.fromOutputStream(() -> os), materializer);
final IOResult result = resultFuture.toCompletableFuture().get(3000, TimeUnit.MILLISECONDS);
assertFalse(result.wasSuccessful());
assertTrue(result.getError().getMessage().equals("Can't accept more data."));
}
}