From b36ec3f6f569f54032357e9473cc47ec877adafd Mon Sep 17 00:00:00 2001 From: darken Date: Thu, 16 Jul 2020 23:16:01 +0200 Subject: [PATCH] Upgrade to RxJava3 --- build.gradle | 10 +- .../main/java/eu/darken/rxshell/cmd/Cmd.java | 4 +- .../eu/darken/rxshell/cmd/CmdProcessor.java | 18 +-- .../eu/darken/rxshell/cmd/ErrorHarvester.java | 2 +- .../java/eu/darken/rxshell/cmd/Harvester.java | 8 +- .../darken/rxshell/cmd/OutputHarvester.java | 2 +- .../eu/darken/rxshell/cmd/RxCmdShell.java | 12 +- .../eu/darken/rxshell/process/RootKiller.java | 8 +- .../eu/darken/rxshell/process/RxProcess.java | 18 +-- .../java/eu/darken/rxshell/shell/RxShell.java | 19 +-- .../eu/darken/rxshell/cmd/CmdBuilderTest.java | 12 +- .../darken/rxshell/cmd/CmdProcessorTest.java | 62 ++++---- .../eu/darken/rxshell/cmd/HarvesterTest.java | 42 +++--- .../eu/darken/rxshell/cmd/RxCmdShellTest.java | 132 ++++++++-------- .../darken/rxshell/process/RxProcessTest.java | 76 +++++----- .../eu/darken/rxshell/shell/RxShellTest.java | 142 +++++++++--------- .../java/testtools/MockRxShellSession.java | 8 +- core/src/test/java/testtools/TestHelper.java | 2 +- example/build.gradle | 2 +- .../darken/rxshellexample/MainActivity.java | 6 +- .../java/eu/darken/rxshell/root/Root.java | 2 +- .../eu/darken/rxshell/root/RootContext.java | 2 +- .../java/eu/darken/rxshell/root/SELinux.java | 2 +- .../java/eu/darken/rxshell/root/SuApp.java | 2 +- .../java/eu/darken/rxshell/root/SuBinary.java | 2 +- .../darken/rxshell/root/RootContextTest.java | 2 +- .../java/eu/darken/rxshell/root/RootTest.java | 2 +- .../eu/darken/rxshell/root/SELinuxText.java | 2 +- .../eu/darken/rxshell/root/SuBinaryTest.java | 2 +- 29 files changed, 303 insertions(+), 300 deletions(-) diff --git a/build.gradle b/build.gradle index 5c6736c..2e1e39e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,12 @@ buildscript { - def versionMajor = 1 + def versionMajor = 3 def versionMinor = 0 - def versionPatch = 9 + def versionPatch = 0 ext.versions = [ 'versionCode' : versionMajor * 10000 + versionMinor * 100 + versionPatch, 'versionName' : "${versionMajor}.${versionMinor}.${versionPatch}", - 'minSdk' : 16, + 'minSdk' : 21, 'targetSdk' : 28, 'compileSdk' : 28, 'sourceCompatibility': JavaVersion.VERSION_1_8, @@ -52,8 +52,8 @@ buildscript { ], androidPlugin: 'com.android.tools.build:gradle:3.1.2', timber : "com.jakewharton.timber:timber:4.7.1", - rxJava : "io.reactivex.rxjava2:rxjava:2.2.4", - rxJavaReplay : "com.jakewharton.rx2:replaying-share:2.1.0", + rxJava : "io.reactivex.rxjava3:rxjava:3.0.4", + rxJavaReplay : "com.jakewharton.rx3:replaying-share:3.0.0", jUnit : "junit:junit:4.12", mockito : "org.mockito:mockito-core:2.8.9", awaitility : "org.awaitility:awaitility:3.0.0", diff --git a/core/src/main/java/eu/darken/rxshell/cmd/Cmd.java b/core/src/main/java/eu/darken/rxshell/cmd/Cmd.java index 959f77f..7d46cd1 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/Cmd.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/Cmd.java @@ -10,8 +10,8 @@ import java.util.UUID; import eu.darken.rxshell.process.RxProcess; -import io.reactivex.Single; -import io.reactivex.processors.FlowableProcessor; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.processors.FlowableProcessor; public class Cmd { public static class ExitCode extends RxProcess.ExitCode { diff --git a/core/src/main/java/eu/darken/rxshell/cmd/CmdProcessor.java b/core/src/main/java/eu/darken/rxshell/cmd/CmdProcessor.java index 9eca968..c486933 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/CmdProcessor.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/CmdProcessor.java @@ -12,15 +12,15 @@ import eu.darken.rxshell.extra.RXSDebug; import eu.darken.rxshell.shell.RxShell; -import io.reactivex.Observable; -import io.reactivex.ObservableOnSubscribe; -import io.reactivex.Observer; -import io.reactivex.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.SingleOnSubscribe; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subjects.BehaviorSubject; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.core.SingleEmitter; +import io.reactivex.rxjava3.core.SingleOnSubscribe; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import io.reactivex.rxjava3.subjects.BehaviorSubject; import timber.log.Timber; public class CmdProcessor { diff --git a/core/src/main/java/eu/darken/rxshell/cmd/ErrorHarvester.java b/core/src/main/java/eu/darken/rxshell/cmd/ErrorHarvester.java index a77e1a0..08a1b47 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/ErrorHarvester.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/ErrorHarvester.java @@ -8,7 +8,7 @@ import java.util.ArrayList; import java.util.List; -import io.reactivex.Flowable; +import io.reactivex.rxjava3.core.Flowable; public class ErrorHarvester extends Harvester { diff --git a/core/src/main/java/eu/darken/rxshell/cmd/Harvester.java b/core/src/main/java/eu/darken/rxshell/cmd/Harvester.java index 911a210..849dcf3 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/Harvester.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/Harvester.java @@ -10,10 +10,10 @@ import java.util.List; import eu.darken.rxshell.extra.RXSDebug; -import io.reactivex.Flowable; -import io.reactivex.FlowableTransformer; -import io.reactivex.internal.subscriptions.SubscriptionHelper; -import io.reactivex.processors.FlowableProcessor; +import io.reactivex.rxjava3.core.Flowable; +import io.reactivex.rxjava3.core.FlowableTransformer; +import io.reactivex.rxjava3.internal.subscriptions.SubscriptionHelper; +import io.reactivex.rxjava3.processors.FlowableProcessor; import timber.log.Timber; public abstract class Harvester extends Flowable implements FlowableTransformer { diff --git a/core/src/main/java/eu/darken/rxshell/cmd/OutputHarvester.java b/core/src/main/java/eu/darken/rxshell/cmd/OutputHarvester.java index 047bea2..8fa972b 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/OutputHarvester.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/OutputHarvester.java @@ -8,7 +8,7 @@ import java.util.ArrayList; import java.util.List; -import io.reactivex.Flowable; +import io.reactivex.rxjava3.core.Flowable; import timber.log.Timber; public class OutputHarvester extends Harvester { diff --git a/core/src/main/java/eu/darken/rxshell/cmd/RxCmdShell.java b/core/src/main/java/eu/darken/rxshell/cmd/RxCmdShell.java index 1c4b534..660f135 100644 --- a/core/src/main/java/eu/darken/rxshell/cmd/RxCmdShell.java +++ b/core/src/main/java/eu/darken/rxshell/cmd/RxCmdShell.java @@ -18,12 +18,12 @@ import eu.darken.rxshell.process.RxProcess; import eu.darken.rxshell.process.UserKiller; import eu.darken.rxshell.shell.RxShell; -import io.reactivex.Completable; -import io.reactivex.Single; -import io.reactivex.SingleObserver; -import io.reactivex.SingleOnSubscribe; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.core.SingleObserver; +import io.reactivex.rxjava3.core.SingleOnSubscribe; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; import timber.log.Timber; diff --git a/core/src/main/java/eu/darken/rxshell/process/RootKiller.java b/core/src/main/java/eu/darken/rxshell/process/RootKiller.java index b4971a8..5c0d99f 100644 --- a/core/src/main/java/eu/darken/rxshell/process/RootKiller.java +++ b/core/src/main/java/eu/darken/rxshell/process/RootKiller.java @@ -14,10 +14,10 @@ import eu.darken.rxshell.extra.RXSDebug; import eu.darken.rxshell.shell.LineReader; -import io.reactivex.Observable; -import io.reactivex.ObservableOnSubscribe; -import io.reactivex.Single; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableOnSubscribe; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.schedulers.Schedulers; import timber.log.Timber; public class RootKiller implements ProcessKiller { diff --git a/core/src/main/java/eu/darken/rxshell/process/RxProcess.java b/core/src/main/java/eu/darken/rxshell/process/RxProcess.java index f876069..67e1fb4 100644 --- a/core/src/main/java/eu/darken/rxshell/process/RxProcess.java +++ b/core/src/main/java/eu/darken/rxshell/process/RxProcess.java @@ -8,15 +8,15 @@ import eu.darken.rxshell.extra.ApiWrap; import eu.darken.rxshell.extra.RXSDebug; -import io.reactivex.Completable; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.SingleOnSubscribe; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Action; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.core.SingleEmitter; +import io.reactivex.rxjava3.core.SingleOnSubscribe; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.functions.Action; +import io.reactivex.rxjava3.schedulers.Schedulers; import timber.log.Timber; diff --git a/core/src/main/java/eu/darken/rxshell/shell/RxShell.java b/core/src/main/java/eu/darken/rxshell/shell/RxShell.java index e26e680..0cc5e87 100644 --- a/core/src/main/java/eu/darken/rxshell/shell/RxShell.java +++ b/core/src/main/java/eu/darken/rxshell/shell/RxShell.java @@ -5,16 +5,17 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; import eu.darken.rxshell.extra.RXSDebug; import eu.darken.rxshell.process.RxProcess; -import io.reactivex.BackpressureStrategy; -import io.reactivex.Completable; -import io.reactivex.Flowable; -import io.reactivex.FlowableEmitter; -import io.reactivex.Single; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.core.BackpressureStrategy; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Flowable; +import io.reactivex.rxjava3.core.FlowableEmitter; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; import timber.log.Timber; public class RxShell { @@ -31,7 +32,7 @@ public synchronized Single open() { if (session == null) { session = rxProcess.open() .map(session -> { - OutputStreamWriter writer = new OutputStreamWriter(session.input(), "UTF-8"); + OutputStreamWriter writer = new OutputStreamWriter(session.input(), StandardCharsets.UTF_8); return new Session(session, writer); }) .subscribeOn(Schedulers.io()) @@ -165,7 +166,7 @@ public String toString() { static Flowable makeLineStream(InputStream stream, String tag) { return Flowable .create((FlowableEmitter emitter) -> { - final InputStreamReader inputStreamReader = new InputStreamReader(stream, "UTF-8"); + final InputStreamReader inputStreamReader = new InputStreamReader(stream, StandardCharsets.UTF_8); final BufferedReader reader = new BufferedReader(inputStreamReader); emitter.setCancellable(() -> { try { diff --git a/core/src/test/java/eu/darken/rxshell/cmd/CmdBuilderTest.java b/core/src/test/java/eu/darken/rxshell/cmd/CmdBuilderTest.java index 0f60d2d..ecd1af6 100644 --- a/core/src/test/java/eu/darken/rxshell/cmd/CmdBuilderTest.java +++ b/core/src/test/java/eu/darken/rxshell/cmd/CmdBuilderTest.java @@ -9,9 +9,9 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; -import io.reactivex.Single; -import io.reactivex.processors.PublishProcessor; -import io.reactivex.subscribers.TestSubscriber; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.processors.PublishProcessor; +import io.reactivex.rxjava3.subscribers.TestSubscriber; import testtools.BaseTest; import static junit.framework.Assert.assertEquals; @@ -123,7 +123,7 @@ public void testSubmit_oneshot_exception() throws IOException { when(shell.open()).thenReturn(Single.error(new IOException())); when(shell.isAlive()).thenReturn(Single.just(false)); - Cmd.builder("").submit(shell).test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertError(IOException.class); + Cmd.builder("").submit(shell).test().awaitDone(1, TimeUnit.SECONDS).assertError(IOException.class); } @Test @@ -186,8 +186,8 @@ public void testExecute_oneshot_exception_no_buffers() throws IOException { assertThat(result.getExitCode(), is(Cmd.ExitCode.EXCEPTION)); assertThat(result.getErrors(), is(nullValue())); assertThat(result.getOutput(), is(nullValue())); - assertThat(errorSub.valueCount(), is(1)); - assertThat(outputSub.valueCount(), is(0)); + errorSub.assertValueCount(1); + outputSub.assertValueCount(0); errorSub.assertComplete(); outputSub.assertComplete(); } diff --git a/core/src/test/java/eu/darken/rxshell/cmd/CmdProcessorTest.java b/core/src/test/java/eu/darken/rxshell/cmd/CmdProcessorTest.java index c6ceeab..ce48adf 100644 --- a/core/src/test/java/eu/darken/rxshell/cmd/CmdProcessorTest.java +++ b/core/src/test/java/eu/darken/rxshell/cmd/CmdProcessorTest.java @@ -15,10 +15,10 @@ import eu.darken.rxshell.extra.EnvVar; import eu.darken.rxshell.process.RxProcess; import eu.darken.rxshell.shell.RxShell; -import io.reactivex.observers.TestObserver; -import io.reactivex.processors.PublishProcessor; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subscribers.TestSubscriber; +import io.reactivex.rxjava3.observers.TestObserver; +import io.reactivex.rxjava3.processors.PublishProcessor; +import io.reactivex.rxjava3.schedulers.Schedulers; +import io.reactivex.rxjava3.subscribers.TestSubscriber; import testtools.BaseTest; import testtools.MockRxShellSession; import testtools.TestHelper; @@ -58,13 +58,13 @@ public void setup() throws Exception { @Test public void testCommand_normal() throws IOException { processor.attach(session); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); Cmd cmd = Cmd.builder("echo straw", "error berry").build(); - final TestObserver observer = processor.submit(cmd).test().awaitDone(3, TimeUnit.SECONDS).assertNoTimeout(); + final TestObserver observer = processor.submit(cmd).test().awaitDone(3, TimeUnit.SECONDS).assertNoErrors(); final Cmd.Result result = observer.assertValueCount(1).values().get(0); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); assertThat(result.getExitCode(), is(0)); assertThat(result.getOutput().get(0), is("straw")); @@ -89,14 +89,14 @@ public void testCommand_normal() throws IOException { @Test public void testCommand_input_error() throws IOException { processor.attach(session); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); doThrow(new IOException()).when(session).writeLine(anyString(), anyBoolean()); Cmd cmd = Cmd.builder("echo straw", "error berry").build(); - final TestObserver observer = processor.submit(cmd).test().awaitDone(3, TimeUnit.SECONDS).assertNoTimeout(); + final TestObserver observer = processor.submit(cmd).test().awaitDone(3, TimeUnit.SECONDS).assertNoErrors(); final Cmd.Result result = observer.assertValueCount(1).values().get(0); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(1); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(1); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); @@ -108,7 +108,7 @@ public void testCommand_input_error() throws IOException { public void testCommand_empty() { processor.attach(session); Cmd cmd = Cmd.builder("").build(); - final Cmd.Result result = processor.submit(cmd).test().awaitDone(2, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + final Cmd.Result result = processor.submit(cmd).test().awaitDone(2, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(0)); assertThat(result.getOutput(), is(notNullValue())); @@ -127,13 +127,13 @@ public void testCommand_multiple() { for (int i = 0; i < testObservers.size(); i++) { final TestObserver t = testObservers.get(i); - t.awaitDone(2, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + t.awaitDone(2, TimeUnit.SECONDS).assertNoErrors().assertComplete(); assertThat(t.values().get(0).getExitCode(), is(0)); - assertThat(t.values().get(0).getOutput().get(0), is("o" + String.valueOf(i))); + assertThat(t.values().get(0).getOutput().get(0), is("o" + i)); assertThat(t.values().get(0).getOutput().size(), is(1)); - assertThat(t.values().get(0).getErrors().get(0), is("e" + String.valueOf(i))); + assertThat(t.values().get(0).getErrors().get(0), is("e" + i)); assertThat(t.values().get(0).getErrors().size(), is(1)); } } @@ -156,8 +156,8 @@ public void testCommand_callback_sync() { testSubscribers.add(new EnvVar<>(resultObserver, outputObserver)); } for (EnvVar, TestSubscriber> envVar : testSubscribers) { - envVar.first.awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - envVar.second.awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(11); + envVar.first.awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + envVar.second.awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(11); } } @@ -179,16 +179,16 @@ public void testCommand_callback_async() { testSubscribers.add(new EnvVar<>(resultObserver, outputObserver)); } for (EnvVar, TestSubscriber> envVar : testSubscribers) { - envVar.first.awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - envVar.second.awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(11); + envVar.first.awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + envVar.second.awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(11); } } @Test public void testIsIdle() { - processor.isIdle().test().assertValueCount(1).assertNotTerminated().assertValue(true); + processor.isIdle().test().assertValueCount(1).assertNotComplete().assertValue(true); processor.attach(session); - processor.isIdle().test().assertValueCount(1).assertNotTerminated().assertValue(true); + processor.isIdle().test().assertValueCount(1).assertNotComplete().assertValue(true); processor.submit(Cmd.builder("sleep 400").build()).subscribe(); await().atMost(1, TimeUnit.SECONDS).until(() -> processor.isIdle().blockingFirst(), is(false)); @@ -213,7 +213,7 @@ public void testDeadShellClearsQueue() { for (int i = 0; i < testObservers.size(); i++) { final TestObserver t = testObservers.get(i); Timber.i("Awaiting: %d", i); - t.awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + t.awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertComplete(); assertThat(t.values().get(0).getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); assertThat(t.values().get(0).getOutput(), is(not(nullValue()))); @@ -230,7 +230,7 @@ public void testCommand_disabledBuffers() { .outputBuffer(false) .errorBuffer(false) .build()) - .test().awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getOutput(), is(nullValue())); assertThat(result.getErrors(), is(nullValue())); @@ -242,7 +242,7 @@ public void testWatchdog() { final Cmd.Result result = processor .submit(Cmd.builder("sleep 5000").timeout(1000).build()) - .test().awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.TIMEOUT)); @@ -260,7 +260,7 @@ public void testHarvestersUpstreamError_both() { }).start(); final Cmd.Result result = processor.submit(Cmd.builder("sleep 5000").build()) - .test().awaitDone(2, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(2, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); assertThat(result.getOutput(), is(not(nullValue()))); @@ -277,7 +277,7 @@ public void testHarvestersUpstreamError_outpout() { }).start(); final Cmd.Result result = processor.submit(Cmd.builder("sleep 1000").build()) - .test().awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); } @@ -292,7 +292,7 @@ public void testHarvestersUpstreamError_error() { }).start(); final Cmd.Result result = processor.submit(Cmd.builder("sleep 1000").build()) - .test().awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); } @@ -308,7 +308,7 @@ public void testHarvestersPrematureCompletion() { }).start(); final Cmd.Result result = processor.submit(Cmd.builder("sleep 5000").build()) - .test().awaitDone(2, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + .test().awaitDone(2, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); } @@ -317,11 +317,11 @@ public void testHarvestersPrematureCompletion() { public void testNoReuse() throws IOException { processor.attach(session); - final Cmd.Result result = processor.submit(Cmd.builder("echo straw").build()).test().awaitDone(3, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + final Cmd.Result result = processor.submit(Cmd.builder("echo straw").build()).test().awaitDone(3, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(result.getExitCode(), is(RxProcess.ExitCode.OK)); assertThat(result.getOutput(), Matchers.contains("straw")); - session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); MockRxShellSession mockSession2 = new MockRxShellSession(); processor.attach(mockSession2.getSession()); @@ -336,7 +336,7 @@ public void testProcessorDying_race1() throws IOException { processor.attach(mockSession.getSession()); Cmd cmd = Cmd.builder("sleep 100").build(); - final Cmd.Result result = processor.submit(cmd).test().awaitDone(5, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + final Cmd.Result result = processor.submit(cmd).test().awaitDone(5, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(result.getExitCode(), is(Cmd.ExitCode.SHELL_DIED)); } } @@ -353,7 +353,7 @@ public void testProcessorDying_race2() throws IOException { mockSession.getSession().cancel().subscribe(); }).start(); - processor.submit(Cmd.builder("sleep 100").build()).test().awaitDone(2, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + processor.submit(Cmd.builder("sleep 100").build()).test().awaitDone(2, TimeUnit.SECONDS).assertNoErrors().assertComplete(); assertThat(getUncaughtExceptions().isEmpty(), is(true)); } diff --git a/core/src/test/java/eu/darken/rxshell/cmd/HarvesterTest.java b/core/src/test/java/eu/darken/rxshell/cmd/HarvesterTest.java index 04d919b..ac3fae3 100644 --- a/core/src/test/java/eu/darken/rxshell/cmd/HarvesterTest.java +++ b/core/src/test/java/eu/darken/rxshell/cmd/HarvesterTest.java @@ -10,9 +10,9 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import io.reactivex.processors.PublishProcessor; -import io.reactivex.processors.ReplayProcessor; -import io.reactivex.subscribers.TestSubscriber; +import io.reactivex.rxjava3.processors.PublishProcessor; +import io.reactivex.rxjava3.processors.ReplayProcessor; +import io.reactivex.rxjava3.subscribers.TestSubscriber; import testtools.BaseTest; import static org.hamcrest.MatcherAssert.assertThat; @@ -40,7 +40,7 @@ public void testCommandCompletion_output() { when(cmd.getMarker()).thenReturn(uuid); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext(uuid + " 255"); @@ -56,7 +56,7 @@ public void testCommandCompletion_errors() { when(cmd.getMarker()).thenReturn(uuid); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forError(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext(uuid); @@ -70,7 +70,7 @@ public void testBuffers_output() { when(cmd.isOutputBufferEnabled()).thenReturn(true); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext("some-output"); publisher.onNext(uuid + " 255"); @@ -89,7 +89,7 @@ public void testBuffers_error() { when(cmd.isErrorBufferEnabled()).thenReturn(true); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forError(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext("some-errors"); publisher.onNext(uuid + " 255"); @@ -108,7 +108,7 @@ public void testUpstreamPrematureCompletion_output() { when(cmd.isOutputBufferEnabled()).thenReturn(true); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext("some-output"); publisher.onComplete(); @@ -127,7 +127,7 @@ public void testUpstreamPrematureCompletion_errors() { when(cmd.isErrorBufferEnabled()).thenReturn(true); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forError(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext("some-errors"); publisher.onComplete(); @@ -166,9 +166,9 @@ public void testUpstreamTerminated_error() { public void testDownstreamCancel_output() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); TestSubscriber testSubscriber = publisher.doOnCancel(latch::countDown).compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); - testSubscriber.dispose(); + testSubscriber.cancel(); assertThat(latch.await(1, TimeUnit.SECONDS), is(true)); } @@ -177,9 +177,9 @@ public void testDownstreamCancel_output() throws InterruptedException { public void testDownstreamCancel_errors() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); TestSubscriber testSubscriber = publisher.doOnCancel(latch::countDown).compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); - testSubscriber.dispose(); + testSubscriber.cancel(); assertThat(latch.await(1, TimeUnit.SECONDS), is(true)); } @@ -196,8 +196,8 @@ public void testProcessors_output() { publisher.onNext("some-output"); publisher.onNext(uuid + " 255"); - processor.test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).assertValue("some-output"); - OutputHarvester.Crop crop = testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + processor.test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).assertValue("some-output"); + OutputHarvester.Crop crop = testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(crop.exitCode, is(255)); assertThat(crop.buffer, is(nullValue())); } @@ -214,8 +214,8 @@ public void testProcessors_errors() { publisher.onNext("some-errors"); publisher.onNext(uuid); - processor.test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).assertValue("some-errors"); - Harvester.Crop crop = testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1).values().get(0); + processor.test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).assertValue("some-errors"); + Harvester.Crop crop = testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1).values().get(0); assertThat(crop.buffer, is(nullValue())); } @@ -225,11 +225,11 @@ public void testBadMarker_output() { when(cmd.getMarker()).thenReturn(uuid); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forOutput(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext(uuid + " &/()"); - testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); OutputHarvester.Crop crop = testSubscriber.values().get(0); assertThat(crop.exitCode, is(Cmd.ExitCode.EXCEPTION)); } @@ -240,10 +240,10 @@ public void testBadMarker_errors() { when(cmd.getMarker()).thenReturn(uuid); TestSubscriber testSubscriber = publisher.compose(harvesterFactory.forError(publisher, cmd)).test(); - testSubscriber.assertNotTerminated(); + testSubscriber.assertNoErrors(); publisher.onNext(uuid + " ยง$%&"); - testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1); + testSubscriber.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1); } } diff --git a/core/src/test/java/eu/darken/rxshell/cmd/RxCmdShellTest.java b/core/src/test/java/eu/darken/rxshell/cmd/RxCmdShellTest.java index 6ffaed2..a186669 100644 --- a/core/src/test/java/eu/darken/rxshell/cmd/RxCmdShellTest.java +++ b/core/src/test/java/eu/darken/rxshell/cmd/RxCmdShellTest.java @@ -12,10 +12,10 @@ import java.util.concurrent.TimeUnit; import eu.darken.rxshell.shell.RxShell; -import io.reactivex.Completable; -import io.reactivex.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.subjects.BehaviorSubject; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.core.SingleEmitter; +import io.reactivex.rxjava3.subjects.BehaviorSubject; import testtools.BaseTest; import static org.hamcrest.MatcherAssert.assertThat; @@ -76,7 +76,7 @@ public void testInstantiation() { @Test public void testOpen() { RxCmdShell rxCmdShell = new RxCmdShell(builder, rxShell); - rxCmdShell.open().test().awaitCount(1).assertNoTimeout(); + rxCmdShell.open().test().awaitCount(1).assertNoErrors(); verify(rxShell).open(); } @@ -84,7 +84,7 @@ public void testOpen() { public void testOpen_exception() { doReturn(Single.error(new IOException())).when(rxShell).open(); RxCmdShell rxCmdShell = new RxCmdShell(builder, rxShell); - rxCmdShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertError(IOException.class); + rxCmdShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertError(IOException.class); verify(rxShell).open(); verify(rxShellSession, never()).outputLines(); @@ -94,142 +94,142 @@ public void testOpen_exception() { @Test public void testCancel() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); verify(rxShellSession).cancel(); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); - RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(session2, is(not(session1))); } @Test public void testCancel_indirect() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); verify(rxShellSession).cancel(); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); - RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(session2, is(not(session1))); } @Test public void testCancel_thenClose() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } @Test public void testCancel_thenClose_indirect() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } @Test public void testClose() throws IOException { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); verify(rxShellSession).close(); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); - RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(session2, is(not(session1))); } @Test public void testClose_indirect() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); verify(rxShellSession).close(); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); - RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxCmdShell.Session session2 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(session2, is(not(session1))); } @Test public void testClose_thenCancel() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxCmdShell.Session session1 = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session1.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + session1.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } @Test public void testClose_thenCancel_indirect() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + shell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } @Test public void testAlive() throws IOException { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session = shell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxCmdShell.Session session = shell.open().test().awaitCount(1).assertNoErrors().values().get(0); when(rxShellSession.isAlive()).thenReturn(Single.just(false)); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); when(rxShellSession.isAlive()).thenReturn(Single.just(true)); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); when(rxShellSession.isAlive()).thenReturn(Single.just(false)); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test public void testAlive_indirect() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); - RxCmdShell.Session session = shell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxCmdShell.Session session = shell.open().test().awaitCount(1).assertNoErrors().values().get(0); when(rxShellSession.isAlive()).thenReturn(Single.just(false)); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); when(rxShellSession.isAlive()).thenReturn(Single.just(false)); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); session.close(); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test public void testReinit() { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session1a = shell.open().test().awaitCount(1).assertNoTimeout().values().get(0); - RxCmdShell.Session session1b = shell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxCmdShell.Session session1a = shell.open().test().awaitCount(1).assertNoErrors().values().get(0); + RxCmdShell.Session session1b = shell.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(session1a, is(session1b)); session1a.close().test(); - RxCmdShell.Session session2 = shell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxCmdShell.Session session2 = shell.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(session1a, is(not(session2))); } @@ -237,10 +237,10 @@ public void testReinit() { public void testReinit_exception() { RxCmdShell shell = new RxCmdShell(builder, rxShell); doReturn(Single.error(new IOException())).when(rxShell).open(); - shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertError(IOException.class); + shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertError(IOException.class); doReturn(Single.just(rxShellSession)).when(rxShell).open(); - shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValueCount(1); + shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValueCount(1); } @Test @@ -250,34 +250,34 @@ public void testEnvironmentSetting() throws IOException { when(builder.getEnvironment()).thenReturn(envMap); RxCmdShell shell = new RxCmdShell(builder, rxShell); - shell.open().test().awaitCount(1).assertNoTimeout(); + shell.open().test().awaitCount(1).assertNoErrors(); verify(rxShellSession).writeLine("key=value", true); } @Test - public void testWaitFor() { + public void testWaitFor() throws InterruptedException { RxCmdShell shell = new RxCmdShell(builder, rxShell); - RxCmdShell.Session session = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertTimeout(); + RxCmdShell.Session session = shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + assertThat(session.waitFor().test().await(1, TimeUnit.SECONDS), is(false)); waitForEmitter.onSuccess(55); - session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(55); + session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(55); } @Test - public void testClose_waitForCommands() { + public void testClose_waitForCommands() throws InterruptedException { BehaviorSubject idler = BehaviorSubject.createDefault(false); when(cmdProcessor.isIdle()).thenReturn(idler); RxCmdShell shell = new RxCmdShell(builder, rxShell); - shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + shell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + shell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertTimeout(); + assertThat(shell.close().test().await(1, TimeUnit.SECONDS), is(false)); idler.onNext(true); - shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + shell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); verify(cmdProcessor).isIdle(); verify(rxShellSession).close(); diff --git a/core/src/test/java/eu/darken/rxshell/process/RxProcessTest.java b/core/src/test/java/eu/darken/rxshell/process/RxProcessTest.java index 404a938..03a23c5 100644 --- a/core/src/test/java/eu/darken/rxshell/process/RxProcessTest.java +++ b/core/src/test/java/eu/darken/rxshell/process/RxProcessTest.java @@ -14,8 +14,8 @@ import eu.darken.rxshell.extra.ApiWrap; import eu.darken.rxshell.extra.RXSDebug; -import io.reactivex.observers.TestObserver; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.observers.TestObserver; +import io.reactivex.rxjava3.schedulers.Schedulers; import testtools.BaseTest; import testtools.MockProcess; @@ -63,7 +63,7 @@ public void testOpen() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(false); - TestObserver sessionObs = rxProcess.open().test().awaitCount(1).assertNoTimeout().assertTerminated(); + TestObserver sessionObs = rxProcess.open().test().awaitCount(1).assertNoErrors().assertComplete(); rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(true); await().atMost(2, TimeUnit.SECONDS).until(mockProcesses::size, is(1)); @@ -74,27 +74,27 @@ public void testOpen() { assertThat(session.output(), is(mockProcesses.get(0).getInputStream())); assertThat(session.error(), is(mockProcesses.get(0).getErrorStream())); - session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(0).isAlive(), is(false)); - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test - public void testOpen_initial_exception() throws IOException { + public void testOpen_initial_exception() throws IOException, InterruptedException { when(processFactory.start(any())).thenThrow(new IOException()); RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); final TestObserver sessionObs = rxProcess.open().test(); - sessionObs.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertError(IOException.class); + sessionObs.awaitDone(1, TimeUnit.SECONDS).assertError(IOException.class); } @Test - public void testExitCode() { + public void testExitCode() throws InterruptedException { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); - session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertTimeout(); - session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); + assertThat(session.waitFor().test().await(1, TimeUnit.SECONDS), is(false)); + session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertValue(1); } @@ -103,28 +103,28 @@ public void testReinit() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); // A shell is only opened once and while alive returns the cached Single - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); - rxProcess.open().test().awaitCount(1).assertNoTimeout(); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); + rxProcess.open().test().awaitCount(1).assertNoErrors(); assertThat(rxProcess.open(), is(rxProcess.open())); - rxProcess.open().test().awaitCount(1).assertNoTimeout(); - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + rxProcess.open().test().awaitCount(1).assertNoErrors(); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); await().atMost(2, TimeUnit.SECONDS).until(mockProcesses::size, is(1)); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(0).isAlive(), is(true)); // Closing the previous session... - rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); // ...lets the next open() call open a new one - rxProcess.open().test().awaitCount(1).assertNoTimeout(); + rxProcess.open().test().awaitCount(1).assertNoErrors(); await().atMost(2, TimeUnit.SECONDS).until(mockProcesses::size, is(2)); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(0).isAlive(), is(false)); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(1).isAlive(), is(true)); // Which can also be closed and reopened without issue - rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); // Open and close one more in a single swoop - rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0).destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); await().atMost(2, TimeUnit.SECONDS).until(mockProcesses::size, is(3)); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(0).isAlive(), is(false)); await().atMost(2, TimeUnit.SECONDS).until(() -> mockProcesses.get(1).isAlive(), is(false)); @@ -134,10 +134,10 @@ public void testReinit() { @Test public void testDestroy() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(mockProcesses.get(0).isAlive(), is(true)); - session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); assertThat(mockProcesses.get(0).isAlive(), is(false)); } @@ -145,12 +145,12 @@ public void testDestroy() { public void testIsAlive_legacy() { ApiWrap.setSDKInt(16); RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(mockProcesses.get(0).isAlive(), is(true)); session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(true); verify(mockProcesses.get(0), times(1)).exitValue(); - session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(1); + session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(1); assertThat(mockProcesses.get(0).isAlive(), is(false)); session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(false); @@ -161,12 +161,12 @@ public void testIsAlive_legacy() { public void testIsAlive_oreo() { ApiWrap.setSDKInt(26); RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(true); verify(mockProcesses.get(0), times(1)).isAlive(); - session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(1); + session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(1); session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertValue(false); verify(mockProcesses.get(0), times(2)).isAlive(); } @@ -174,34 +174,34 @@ public void testIsAlive_oreo() { @Test public void testIsAlive_indirect() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - rxProcess.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + rxProcess.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); verify(mockProcesses.get(0)).isAlive(); mockProcesses.get(0).destroy(); - rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + rxProcess.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test public void testWaitFor() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(mockProcesses.get(0).isAlive(), is(true)); - session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(1); + session.destroy().andThen(session.waitFor()).test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(1); assertThat(mockProcesses.get(0).isAlive(), is(false)); } @Test public void testClose() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - rxProcess.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + rxProcess.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); - rxProcess.open().test().awaitCount(1).assertNoTimeout(); + rxProcess.open().test().awaitCount(1).assertNoErrors(); assertThat(mockProcesses.get(0).isAlive(), is(true)); - rxProcess.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + rxProcess.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); verify(mockProcesses.get(0)).destroy(); assertThat(mockProcesses.get(0).isAlive(), is(false)); @@ -211,10 +211,10 @@ public void testClose() { @Test public void testClose_raceconditions() { RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); int cnt = 1000; for (int i = 0; i < cnt; i++) { - rxProcess.close().observeOn(Schedulers.newThread()).test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + rxProcess.close().observeOn(Schedulers.newThread()).test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } verify(mockProcesses.get(0)).destroy(); } @@ -225,10 +225,10 @@ public void testProcessCallbacks() { RXSDebug.addCallback(callback); RxProcess rxProcess = new RxProcess(processFactory, processKiller, "sh"); - RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxProcess.Session session = rxProcess.open().test().awaitCount(1).assertNoErrors().values().get(0); assertThat(mockProcesses.get(0).isAlive(), is(true)); - session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + session.destroy().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); assertThat(mockProcesses.get(0).isAlive(), is(false)); verify(callback).onProcessStart(mockProcesses.get(0)); diff --git a/core/src/test/java/eu/darken/rxshell/shell/RxShellTest.java b/core/src/test/java/eu/darken/rxshell/shell/RxShellTest.java index 38445ed..490ef17 100644 --- a/core/src/test/java/eu/darken/rxshell/shell/RxShellTest.java +++ b/core/src/test/java/eu/darken/rxshell/shell/RxShellTest.java @@ -12,13 +12,13 @@ import java.util.concurrent.TimeUnit; import eu.darken.rxshell.process.RxProcess; -import io.reactivex.Completable; -import io.reactivex.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.observers.TestObserver; -import io.reactivex.schedulers.Schedulers; -import io.reactivex.subjects.ReplaySubject; -import io.reactivex.subscribers.TestSubscriber; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.core.SingleEmitter; +import io.reactivex.rxjava3.observers.TestObserver; +import io.reactivex.rxjava3.schedulers.Schedulers; +import io.reactivex.rxjava3.subjects.ReplaySubject; +import io.reactivex.rxjava3.subscribers.TestSubscriber; import testtools.BaseTest; import testtools.MockInputStream; import testtools.MockOutputStream; @@ -92,7 +92,7 @@ public void testSession() throws IOException { RxShell rxShell = new RxShell(rxProcess); TestObserver sessionObs = rxShell.open().test(); - RxShell.Session session = sessionObs.awaitCount(1).assertNoTimeout().values().get(0); + RxShell.Session session = sessionObs.awaitCount(1).assertNoErrors().values().get(0); verify(rxProcess).open(); session.writeLine("test", true); @@ -112,16 +112,16 @@ public void testSession() throws IOException { // Simulate process cleanly exiting sessionPub.onComplete(); - outputObs.awaitCount(1).assertNoTimeout().assertValue("outputtest"); + outputObs.awaitCount(1).assertNoErrors().assertValue("outputtest"); outputStream.close(); - errorObs.awaitCount(1).assertNoTimeout().assertValue("errortest"); + errorObs.awaitCount(1).assertNoErrors().assertValue("errortest"); errorStream.close(); - sessionObs.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - outputObs.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - errorObs.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + sessionObs.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + outputObs.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + errorObs.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); } @Test @@ -131,21 +131,21 @@ public void testOpen_error() throws IOException { TestObserver sessionObs = rxShell.open().test(); - await().pollDelay(1, TimeUnit.SECONDS).until(sessionObs::isTerminated, is(true)); + sessionObs.awaitDone(1, TimeUnit.SECONDS).assertError(InterruptedException.class); sessionObs.assertNoValues(); } @Test public void testIsAlive() { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoErrors().values().get(0); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); when(rxProcessSession.isAlive()).thenReturn(Single.just(false)); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); when(rxProcessSession.isAlive()).thenReturn(Single.just(true)); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); verify(rxProcessSession, times(3)).isAlive(); } @@ -155,40 +155,40 @@ public void testIsAlive_indirect() throws InterruptedException { RxShell rxShell = new RxShell(rxProcess); when(rxProcessSession.isAlive()).thenReturn(Single.just(false)); - rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); // No session means not alive! when(rxProcessSession.isAlive()).thenReturn(Single.just(true)); - rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); - rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); - rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); + rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); + rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); when(rxProcessSession.isAlive()).thenReturn(Single.just(false)); - rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + rxShell.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test - public void testWaitFor() { + public void testWaitFor() throws InterruptedException { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertTimeout(); + RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + assertThat(session.waitFor().test().await(1, TimeUnit.SECONDS), is(false)); waitForEmitter.onSuccess(55); - session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(55); + session.waitFor().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(55); } @Test public void testCancel() { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoErrors().values().get(0); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); // Idempotent - session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); verify(rxProcessSession).destroy(); } @@ -196,102 +196,104 @@ public void testCancel() { @Test public void testCancel_indirect() { RxShell rxShell = new RxShell(rxProcess); - rxShell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + rxShell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoErrors().values().get(0); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - rxShell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); + rxShell.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); // Idempotent - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(false); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(false); } @Test public void testClose() throws IOException { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitDone(10, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxShell.Session session = rxShell.open().test().awaitDone(10, TimeUnit.SECONDS).assertNoErrors().values().get(0); - session.close().test().awaitDone(10, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(10, TimeUnit.SECONDS).assertNoErrors().assertValue(0); await().atMost(2, TimeUnit.SECONDS).until(() -> cmdStream.getData().toString().contains("exit" + LineReader.getLineSeparator())); await().atMost(1, TimeUnit.SECONDS).until(() -> cmdStream.isOpen(), is(false)); // Idempotent - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); } @Test public void testClose_exception() { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); cmdStream.setExceptionOnClose(new IOException()); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertNoErrors().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertNoErrors().assertValue(0); await().atMost(2, TimeUnit.SECONDS).until(() -> cmdStream.getData().toString().contains("exit" + LineReader.getLineSeparator())); await().atMost(1, TimeUnit.SECONDS).until(() -> cmdStream.isOpen(), is(false)); // Idempotent - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertNoErrors().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertNoErrors().assertValue(0); } @Test public void testClose_indirect() { RxShell rxShell = new RxShell(rxProcess); - rxShell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + rxShell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); - RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + RxShell.Session session = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); await().atMost(2, TimeUnit.SECONDS).until(() -> cmdStream.getData().toString().contains("exit" + LineReader.getLineSeparator())); await().atMost(1, TimeUnit.SECONDS).until(() -> cmdStream.isOpen(), is(false)); // Idempotent - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); } @Test public void testClose_afterCancel() throws IOException { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); - session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(true); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoErrors().values().get(0); + session.isAlive().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(true); - session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertComplete(); - rxShell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.cancel().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertComplete(); + rxShell.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); } @Test public void testClose_raceconditions() { RxShell rxShell = new RxShell(rxProcess); when(rxProcessSession.waitFor()).thenReturn(Single.just(0).delay(100, TimeUnit.MILLISECONDS)); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoErrors().values().get(0); int cnt = 1000; List> testObservers = new ArrayList<>(); - for (int i = 0; i < cnt; i++) testObservers.add(session.close().observeOn(Schedulers.newThread()).test()); + for (int i = 0; i < cnt; i++) + testObservers.add(session.close().observeOn(Schedulers.newThread()).test()); assertThat(testObservers.size(), is(cnt)); - for (TestObserver t : testObservers) t.awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + for (TestObserver t : testObservers) + t.awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); assertThat(cmdStream.getData().toString(), is("exit" + LineReader.getLineSeparator())); } @Test - public void testProcessCompletion_linereaders_dont_terminate_early() throws IOException { + public void testProcessCompletion_linereaders_dont_terminate_early() throws IOException, InterruptedException { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session = rxShell.open().test().awaitCount(1).assertNoTimeout().values().get(0); + RxShell.Session session = rxShell.open().test().awaitCount(1).assertComplete().values().get(0); TestSubscriber outputObs = session.outputLines().test(); TestSubscriber errorObs = session.errorLines().test(); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); await().atMost(1, TimeUnit.SECONDS).until(() -> cmdStream.isOpen(), is(false)); - await().pollDelay(1, TimeUnit.SECONDS).until(outputObs::isTerminated, is(false)); - await().pollDelay(1, TimeUnit.SECONDS).until(errorObs::isTerminated, is(false)); + outputObs.assertNotComplete(); + errorObs.assertNotComplete(); await().atMost(1, TimeUnit.SECONDS).until(() -> outputStream.isOpen(), is(true)); await().atMost(1, TimeUnit.SECONDS).until(() -> errorStream.isOpen(), is(true)); @@ -302,27 +304,27 @@ public void testProcessCompletion_linereaders_dont_terminate_early() throws IOEx await().atMost(1, TimeUnit.SECONDS).until(() -> outputStream.isOpen(), is(false)); await().atMost(1, TimeUnit.SECONDS).until(() -> errorStream.isOpen(), is(false)); - await().atMost(1, TimeUnit.SECONDS).until(outputObs::isTerminated, is(true)); - await().atMost(1, TimeUnit.SECONDS).until(errorObs::isTerminated, is(true)); + outputObs.assertComplete(); + errorObs.assertComplete(); } @Test public void testLineReaders_shared_keep_alive() throws IOException { RxShell rxShell = new RxShell(rxProcess); - TestObserver sessionObs = rxShell.open().test().awaitCount(1).assertNoTimeout(); + TestObserver sessionObs = rxShell.open().test().awaitCount(1).assertNoErrors(); RxShell.Session session = sessionObs.values().get(0); - session.outputLines().test().assertNotTerminated().dispose(); - session.errorLines().test().assertNotTerminated().dispose(); + session.outputLines().test().assertNotComplete().cancel(); + session.errorLines().test().assertNotComplete().cancel(); - session.outputLines().test().assertNotTerminated().dispose(); - session.errorLines().test().assertNotTerminated().dispose(); + session.outputLines().test().assertNotComplete().cancel(); + session.errorLines().test().assertNotComplete().cancel(); await().pollDelay(100, TimeUnit.MILLISECONDS).atMost(1, TimeUnit.SECONDS).until(() -> outputStream.isOpen(), is(true)); await().pollDelay(100, TimeUnit.MILLISECONDS).atMost(1, TimeUnit.SECONDS).until(() -> errorStream.isOpen(), is(true)); - session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().assertValue(0); + session.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().assertValue(0); await().atMost(1, TimeUnit.SECONDS).until(() -> outputStream.isOpen(), is(false)); await().atMost(1, TimeUnit.SECONDS).until(() -> errorStream.isOpen(), is(false)); @@ -331,11 +333,11 @@ public void testLineReaders_shared_keep_alive() throws IOException { @Test public void testReinit() { RxShell rxShell = new RxShell(rxProcess); - RxShell.Session session1 = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxShell.Session session1 = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); verify(rxProcess).open(); - session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout(); + session1.close().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors(); - RxShell.Session session2 = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoTimeout().values().get(0); + RxShell.Session session2 = rxShell.open().test().awaitDone(1, TimeUnit.SECONDS).assertNoErrors().values().get(0); assertThat(session2, is(not(session1))); verify(rxProcess, times(2)).open(); } diff --git a/core/src/test/java/testtools/MockRxShellSession.java b/core/src/test/java/testtools/MockRxShellSession.java index 78046b0..42e1593 100644 --- a/core/src/test/java/testtools/MockRxShellSession.java +++ b/core/src/test/java/testtools/MockRxShellSession.java @@ -5,10 +5,10 @@ import eu.darken.rxshell.shell.LineReader; import eu.darken.rxshell.shell.RxShell; -import io.reactivex.Completable; -import io.reactivex.Single; -import io.reactivex.processors.PublishProcessor; -import io.reactivex.processors.ReplayProcessor; +import io.reactivex.rxjava3.core.Completable; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.processors.PublishProcessor; +import io.reactivex.rxjava3.processors.ReplayProcessor; import timber.log.Timber; import static org.mockito.ArgumentMatchers.any; diff --git a/core/src/test/java/testtools/TestHelper.java b/core/src/test/java/testtools/TestHelper.java index 0497213..8c3cad0 100644 --- a/core/src/test/java/testtools/TestHelper.java +++ b/core/src/test/java/testtools/TestHelper.java @@ -4,7 +4,7 @@ import java.util.Collections; import java.util.List; -import io.reactivex.plugins.RxJavaPlugins; +import io.reactivex.rxjava3.plugins.RxJavaPlugins; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; diff --git a/example/build.gradle b/example/build.gradle index c8e9505..9712b49 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation deps.timber - implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' + implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' testImplementation deps.jUnit } \ No newline at end of file diff --git a/example/src/main/java/eu/darken/rxshellexample/MainActivity.java b/example/src/main/java/eu/darken/rxshellexample/MainActivity.java index c30b95b..4f224aa 100644 --- a/example/src/main/java/eu/darken/rxshellexample/MainActivity.java +++ b/example/src/main/java/eu/darken/rxshellexample/MainActivity.java @@ -12,9 +12,9 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; import eu.darken.rxshell.root.RootContext; -import io.reactivex.Single; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.schedulers.Schedulers; import timber.log.Timber; public class MainActivity extends AppCompatActivity { diff --git a/root/src/main/java/eu/darken/rxshell/root/Root.java b/root/src/main/java/eu/darken/rxshell/root/Root.java index d7dcd65..c1f0dac 100644 --- a/root/src/main/java/eu/darken/rxshell/root/Root.java +++ b/root/src/main/java/eu/darken/rxshell/root/Root.java @@ -12,7 +12,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; import eu.darken.rxshell.extra.RxCmdShellHelper; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import timber.log.Timber; public class Root { diff --git a/root/src/main/java/eu/darken/rxshell/root/RootContext.java b/root/src/main/java/eu/darken/rxshell/root/RootContext.java index 8696b83..050449c 100644 --- a/root/src/main/java/eu/darken/rxshell/root/RootContext.java +++ b/root/src/main/java/eu/darken/rxshell/root/RootContext.java @@ -9,7 +9,7 @@ import eu.darken.rxshell.cmd.RxCmdShell; import eu.darken.rxshell.extra.CmdHelper; import eu.darken.rxshell.extra.RxCmdShellHelper; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import timber.log.Timber; diff --git a/root/src/main/java/eu/darken/rxshell/root/SELinux.java b/root/src/main/java/eu/darken/rxshell/root/SELinux.java index 208b98c..17969d7 100644 --- a/root/src/main/java/eu/darken/rxshell/root/SELinux.java +++ b/root/src/main/java/eu/darken/rxshell/root/SELinux.java @@ -12,7 +12,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; import eu.darken.rxshell.extra.ApiWrap; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import timber.log.Timber; public class SELinux { diff --git a/root/src/main/java/eu/darken/rxshell/root/SuApp.java b/root/src/main/java/eu/darken/rxshell/root/SuApp.java index a881d03..4a0cf8f 100644 --- a/root/src/main/java/eu/darken/rxshell/root/SuApp.java +++ b/root/src/main/java/eu/darken/rxshell/root/SuApp.java @@ -8,7 +8,7 @@ import java.util.Locale; import java.util.Map; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import timber.log.Timber; diff --git a/root/src/main/java/eu/darken/rxshell/root/SuBinary.java b/root/src/main/java/eu/darken/rxshell/root/SuBinary.java index a0eb295..305c15b 100644 --- a/root/src/main/java/eu/darken/rxshell/root/SuBinary.java +++ b/root/src/main/java/eu/darken/rxshell/root/SuBinary.java @@ -13,7 +13,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import timber.log.Timber; diff --git a/root/src/test/java/eu/darken/rxshell/root/RootContextTest.java b/root/src/test/java/eu/darken/rxshell/root/RootContextTest.java index 4ff0be2..392e510 100644 --- a/root/src/test/java/eu/darken/rxshell/root/RootContextTest.java +++ b/root/src/test/java/eu/darken/rxshell/root/RootContextTest.java @@ -13,7 +13,7 @@ import java.util.Collections; import eu.darken.rxshell.cmd.RxCmdShell; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import testhelper.BaseTest; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/root/src/test/java/eu/darken/rxshell/root/RootTest.java b/root/src/test/java/eu/darken/rxshell/root/RootTest.java index 0cb89be..5176c8a 100644 --- a/root/src/test/java/eu/darken/rxshell/root/RootTest.java +++ b/root/src/test/java/eu/darken/rxshell/root/RootTest.java @@ -15,7 +15,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import testhelper.BaseTest; import static org.hamcrest.Matchers.not; diff --git a/root/src/test/java/eu/darken/rxshell/root/SELinuxText.java b/root/src/test/java/eu/darken/rxshell/root/SELinuxText.java index 7123086..a89b37e 100644 --- a/root/src/test/java/eu/darken/rxshell/root/SELinuxText.java +++ b/root/src/test/java/eu/darken/rxshell/root/SELinuxText.java @@ -12,7 +12,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; import eu.darken.rxshell.extra.ApiWrap; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import testhelper.BaseTest; import static org.hamcrest.Matchers.not; diff --git a/root/src/test/java/eu/darken/rxshell/root/SuBinaryTest.java b/root/src/test/java/eu/darken/rxshell/root/SuBinaryTest.java index 8156d11..a67dca0 100644 --- a/root/src/test/java/eu/darken/rxshell/root/SuBinaryTest.java +++ b/root/src/test/java/eu/darken/rxshell/root/SuBinaryTest.java @@ -13,7 +13,7 @@ import eu.darken.rxshell.cmd.Cmd; import eu.darken.rxshell.cmd.RxCmdShell; -import io.reactivex.Single; +import io.reactivex.rxjava3.core.Single; import testhelper.BaseTest; import static org.hamcrest.Matchers.contains;