tests: Make stream open/close fatal

Currently, we EXPECT the result of these, but we don't actually stop the test
if they fail. This means that we almost always segfault if an open fails, since
we try to dereference mStream which is still null.
diff --git a/tests/testStreamClosedMethods.cpp b/tests/testStreamClosedMethods.cpp
index 0903135..a1f1105 100644
--- a/tests/testStreamClosedMethods.cpp
+++ b/tests/testStreamClosedMethods.cpp
@@ -32,25 +32,24 @@
 
 protected:
 
-    bool openStream(){
+    bool openStream() {
         Result r = mBuilder.openStream(&mStream);
         EXPECT_EQ(r, Result::OK) << "Failed to open stream " << convertToText(r);
         return (r == Result::OK);
     }
 
-    void closeStream(){
-        if (mStream != nullptr){
-            Result r = mStream->close();
-            if (r != Result::OK){
-                FAIL() << "Failed to close stream. " << convertToText(r);
-            }
-        }
+    bool closeStream() {
+        Result r = mStream->close();
+        EXPECT_EQ(r, Result::OK) << "Failed to close stream. " << convertToText(r);
+        return (r == Result::OK);
     }
 
-    void openAndCloseStream(){
-        openStream();
-        closeStream();
-        ASSERT_EQ(mStream->getState(), StreamState::Closed) << "Stream state " << convertToText(mStream->getState());
+    bool openAndCloseStream() {
+        if (!openStream() || !closeStream())
+            return false;
+        StreamState s = mStream->getState();
+        EXPECT_EQ(s, StreamState::Closed) << "Stream state " << convertToText(mStream->getState());
+        return (s == StreamState::Closed);
     }
 
     AudioStreamBuilder mBuilder;
@@ -61,7 +60,7 @@
 TEST_F(StreamClosedReturnValues, GetChannelCountReturnsLastKnownValue){
 
     mBuilder.setChannelCount(2);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getChannelCount(), 2);
 }
 
@@ -70,68 +69,68 @@
     // Note that when testing on the emulator setting the direction to Input will result in ErrorInternal when
     // opening the stream
     mBuilder.setDirection(Direction::Input);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getDirection(), Direction::Input);
 }
 
 TEST_F(StreamClosedReturnValues, GetSampleRateReturnsLastKnownValue){
 
     mBuilder.setSampleRate(8000);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getSampleRate(), 8000);
 }
 
 TEST_F(StreamClosedReturnValues, GetFramesPerCallbackReturnsLastKnownValue) {
 
     mBuilder.setFramesPerCallback(192);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getFramesPerCallback(), 192);
 }
 
 TEST_F(StreamClosedReturnValues, GetFormatReturnsLastKnownValue) {
 
     mBuilder.setFormat(AudioFormat::I16);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getFormat(), AudioFormat::I16);
 }
 
 TEST_F(StreamClosedReturnValues, GetBufferSizeInFramesReturnsLastKnownValue) {
 
-    openStream();
+    ASSERT_TRUE(openStream());
     int32_t bufferSize = mStream->getBufferSizeInFrames();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getBufferSizeInFrames(), bufferSize);
 }
 
 TEST_F(StreamClosedReturnValues, GetBufferCapacityInFramesReturnsLastKnownValue) {
 
-    openStream();
+    ASSERT_TRUE(openStream());
     int32_t bufferCapacity = mStream->getBufferCapacityInFrames();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getBufferCapacityInFrames(), bufferCapacity);
 }
 
 TEST_F(StreamClosedReturnValues, GetSharingModeReturnsLastKnownValue) {
 
-    openStream();
+    ASSERT_TRUE(openStream());
     SharingMode s = mStream->getSharingMode();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getSharingMode(), s);
 }
 
 TEST_F(StreamClosedReturnValues, GetPerformanceModeReturnsLastKnownValue) {
 
-    openStream();
+    ASSERT_TRUE(openStream());
     PerformanceMode p = mStream->getPerformanceMode();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getPerformanceMode(), p);
 }
 
 TEST_F(StreamClosedReturnValues, GetDeviceIdReturnsLastKnownValue) {
 
-    openStream();
+    ASSERT_TRUE(openStream());
     int32_t d = mStream->getDeviceId();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getDeviceId(), d);
 }
 
@@ -139,81 +138,81 @@
 
     AudioStreamCallback *callback = new MyCallback();
     mBuilder.setCallback(callback);
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
 
     AudioStreamCallback *callback2 = mStream->getCallback();
     ASSERT_EQ(callback, callback2);
 }
 
 TEST_F(StreamClosedReturnValues, GetUsageReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     Usage u = mStream->getUsage();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getUsage(), u);
 }
 
 TEST_F(StreamClosedReturnValues, GetContentTypeReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     ContentType c = mStream->getContentType();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getContentType(), c);
 }
 
 TEST_F(StreamClosedReturnValues, GetInputPresetReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     auto i = mStream->getInputPreset();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getInputPreset(), i);
 }
 
 TEST_F(StreamClosedReturnValues, GetSessionIdReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     auto s = mStream->getSessionId();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getSessionId(), s);
 }
 
 TEST_F(StreamClosedReturnValues, StreamStateIsClosed){
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     ASSERT_EQ(mStream->getState(), StreamState::Closed);
 }
 
 TEST_F(StreamClosedReturnValues, GetXRunCountReturnsLastKnownValue){
 
-    openStream();
+    ASSERT_TRUE(openStream());
     if (mStream->isXRunCountSupported()){
         auto i = mStream->getXRunCount();
         ASSERT_EQ(mStream->getXRunCount(), i);
     }
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamClosedReturnValues, GetFramesPerBurstReturnsLastKnownValue){
 
-    openStream();
+    ASSERT_TRUE(openStream());
     auto f = mStream->getFramesPerBurst();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getFramesPerBurst(), f);
 }
 
 TEST_F(StreamClosedReturnValues, GetBytesPerFrameReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     auto f = mStream->getBytesPerFrame();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getBytesPerFrame(), f);
 }
 
 TEST_F(StreamClosedReturnValues, GetBytesPerSampleReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     auto f = mStream->getBytesPerSample();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getBytesPerSample(), f);
 }
 
 TEST_F(StreamClosedReturnValues, GetFramesWrittenReturnsLastKnownValue){
     mBuilder.setFormat(AudioFormat::I16);
     mBuilder.setChannelCount(1);
-    openStream();
+    ASSERT_TRUE(openStream());
     mStream->start();
 
     int16_t buffer[4] = { 1, 2, 3, 4 };
@@ -225,7 +224,7 @@
     auto f = mStream->getFramesWritten();
     ASSERT_EQ(f, 4);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getFramesWritten(), f);
 }
 
@@ -236,26 +235,25 @@
     mBuilder.setFormat(AudioFormat::I16);
     mBuilder.setChannelCount(1);
 
-    if (openStream()){
-        mStream->start();
+    ASSERT_TRUE(openStream());
+    mStream->start();
 
 /*
-        int16_t buffer[192];
-        auto r = mStream->read(&buffer, 192, 0);
-        ASSERT_EQ(r.value(), 192);
+    int16_t buffer[192];
+    auto r = mStream->read(&buffer, 192, 0);
+    ASSERT_EQ(r.value(), 192);
 */
 
-        auto f = mStream->getFramesRead();
-//        ASSERT_EQ(f, 192);
+    auto f = mStream->getFramesRead();
+//    ASSERT_EQ(f, 192);
 
-        closeStream();
-        ASSERT_EQ(mStream->getFramesRead(), f);
-    };
+    ASSERT_TRUE(closeStream());
+    ASSERT_EQ(mStream->getFramesRead(), f);
 }
 
 TEST_F(StreamClosedReturnValues, GetTimestampReturnsErrorClosedIfSupported){
 
-    openStream();
+    ASSERT_TRUE(openStream());
 
     int64_t framePosition;
     int64_t presentationTime;
@@ -263,7 +261,7 @@
     auto r = mStream->getTimestamp(CLOCK_MONOTONIC, &framePosition, &presentationTime);
     bool isTimestampSupported = (r == Result::OK);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 
     if (isTimestampSupported){
         ASSERT_EQ(mStream->getTimestamp(CLOCK_MONOTONIC, &framePosition, &presentationTime), Result::ErrorClosed);
@@ -271,22 +269,22 @@
 }
 
 TEST_F(StreamClosedReturnValues, GetAudioApiReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     AudioApi a = mStream->getAudioApi();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->getAudioApi(), a);
 }
 
 TEST_F(StreamClosedReturnValues, GetUsesAAudioReturnsLastKnownValue){
-    openStream();
+    ASSERT_TRUE(openStream());
     bool a = mStream->usesAAudio();
-    closeStream();
+    ASSERT_TRUE(closeStream());
     ASSERT_EQ(mStream->usesAAudio(), a);
 }
 
 TEST_F(StreamClosedReturnValues, StreamStateControlsReturnClosed){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     Result r = mStream->close();
     EXPECT_EQ(r, Result::ErrorClosed) << convertToText(r);
     r = mStream->start();
@@ -302,7 +300,7 @@
 
 TEST_F(StreamClosedReturnValues, WaitForStateChangeReturnsClosed){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     StreamState next;
     Result r = mStream->waitForStateChange(StreamState::Open, &next, 0);
     ASSERT_EQ(r, Result::ErrorClosed) << convertToText(r);
@@ -310,14 +308,14 @@
 
 TEST_F(StreamClosedReturnValues, SetBufferSizeInFramesReturnsClosed){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
     auto r = mStream->setBufferSizeInFrames(192);
     ASSERT_EQ(r.error(), Result::ErrorClosed);
 }
 
 TEST_F(StreamClosedReturnValues, CalculateLatencyInMillisReturnsClosedIfSupported){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
 
     if (mStream->getAudioApi() == AudioApi::AAudio){
         auto r = mStream->calculateLatencyMillis();
@@ -327,7 +325,7 @@
 
 TEST_F(StreamClosedReturnValues, ReadReturnsClosed){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
 
     int buffer[8]{0};
     auto r = mStream->read(buffer, 1, 0);
@@ -336,7 +334,7 @@
 
 TEST_F(StreamClosedReturnValues, WriteReturnsClosed){
 
-    openAndCloseStream();
+    ASSERT_TRUE(openAndCloseStream());
 
     int buffer[8]{0};
     auto r = mStream->write(buffer, 1, 0);
diff --git a/tests/testStreamOpen.cpp b/tests/testStreamOpen.cpp
index 8b2fa6d..e2a9170 100644
--- a/tests/testStreamOpen.cpp
+++ b/tests/testStreamOpen.cpp
@@ -45,14 +45,11 @@
         return (r == Result::OK);
     }
 
-    void closeStream() {
-        if (mStream != nullptr) {
-            Result r = mStream->close();
-            if (r != Result::OK) {
-                FAIL() << "Failed to close stream. " << convertToText(r);
-            }
-        }
+    bool closeStream() {
+        Result r = mStream->close();
+        EXPECT_EQ(r, Result::OK) << "Failed to close stream. " << convertToText(r);
         usleep(500 * 1000); // give previous stream time to settle
+        return (r == Result::OK);
     }
 
     void checkSampleRateConversionAdvancing(Direction direction) {
@@ -65,7 +62,7 @@
         mBuilder.setSampleRate(44100);
         mBuilder.setSampleRateConversionQuality(SampleRateConversionQuality::Medium);
 
-        openStream();
+        ASSERT_TRUE(openStream());
 
         ASSERT_EQ(mStream->requestStart(), Result::OK);
         int timeout = 20;
@@ -77,7 +74,7 @@
         ASSERT_GT(callback.framesPerCallback, 0);
         ASSERT_EQ(mStream->requestStop(), Result::OK);
 
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 
     AudioStreamBuilder mBuilder;
@@ -91,9 +88,9 @@
     DefaultStreamValues::SampleRate = 44100;
     DefaultStreamValues::FramesPerBurst = 192;
     mBuilder.setAudioApi(AudioApi::OpenSLES);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->getSampleRate(), 44100);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, ForOpenSLESDefaultFramesPerBurstIsUsed){
@@ -102,18 +99,18 @@
     DefaultStreamValues::FramesPerBurst = 128; // used for low latency
     mBuilder.setAudioApi(AudioApi::OpenSLES);
     mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->getFramesPerBurst(), 128);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, ForOpenSLESDefaultChannelCountIsUsed){
 
     DefaultStreamValues::ChannelCount = 1;
     mBuilder.setAudioApi(AudioApi::OpenSLES);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->getChannelCount(), 1);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, OutputForOpenSLESPerformanceModeShouldBeNone){
@@ -122,9 +119,9 @@
     mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
     mBuilder.setDirection(Direction::Output);
     mBuilder.setAudioApi(AudioApi::OpenSLES);
-    openStream();
+	ASSERT_TRUE(openStream());
     ASSERT_EQ((int)mStream->getPerformanceMode(), (int)PerformanceMode::None);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, InputForOpenSLESPerformanceModeShouldBeNone){
@@ -133,9 +130,9 @@
     mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
     mBuilder.setDirection(Direction::Input);
     mBuilder.setAudioApi(AudioApi::OpenSLES);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ((int)mStream->getPerformanceMode(), (int)PerformanceMode::None);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, ForOpenSlesIllegalFormatRejectedOutput) {
@@ -172,7 +169,7 @@
     mBuilder.setAudioApi(AudioApi::OpenSLES);
     mBuilder.setFramesPerCallback(kRequestedFramesPerCallback);
     mBuilder.setCallback(&callback);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->requestStart(), Result::OK);
     int timeout = 20;
     while (callback.framesPerCallback == 0 && timeout > 0) {
@@ -182,7 +179,7 @@
     ASSERT_EQ(kRequestedFramesPerCallback, callback.framesPerCallback);
     ASSERT_EQ(kRequestedFramesPerCallback, mStream->getFramesPerCallback());
     ASSERT_EQ(mStream->requestStop(), Result::OK);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 /* TODO - This is hanging!
@@ -195,7 +192,7 @@
     mBuilder.setFramesPerCallback(kRequestedFramesPerCallback);
     mBuilder.setCallback(&callback);
     mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(kRequestedFramesPerCallback, mStream->getFramesPerCallback());
     ASSERT_EQ(mStream->requestStart(), Result::OK);
     int timeout = 20;
@@ -205,7 +202,7 @@
     }
     ASSERT_EQ(kRequestedFramesPerCallback, callback.framesPerCallback);
     ASSERT_EQ(mStream->requestStop(), Result::OK);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 */
 
@@ -219,7 +216,7 @@
     mBuilder.setFramesPerCallback(kRequestedFramesPerCallback);
     mBuilder.setCallback(&callback);
     mBuilder.setPerformanceMode(PerformanceMode::None);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(kRequestedFramesPerCallback, mStream->getFramesPerCallback());
     ASSERT_EQ(mStream->setBufferSizeInFrames(mStream->getBufferCapacityInFrames()), Result::OK);
     ASSERT_EQ(mStream->requestStart(), Result::OK);
@@ -230,7 +227,7 @@
     }
     ASSERT_EQ(kRequestedFramesPerCallback, callback.framesPerCallback);
     ASSERT_EQ(mStream->requestStop(), Result::OK);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 */
 
@@ -239,9 +236,9 @@
     if (getSdkVersion() < __ANDROID_API_M__){
         mBuilder.setDirection(Direction::Input);
         mBuilder.setFormat(AudioFormat::Unspecified);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::I16);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -250,9 +247,9 @@
     if (getSdkVersion() >= __ANDROID_API_M__){
         mBuilder.setDirection(Direction::Input);
         mBuilder.setFormat(AudioFormat::Unspecified);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::Float);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -263,7 +260,7 @@
         mBuilder.setFormat(AudioFormat::Float);
         Result r = mBuilder.openStream(&mStream);
         ASSERT_EQ(r, Result::ErrorInvalidFormat) << convertToText(r);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -272,9 +269,9 @@
     if (getSdkVersion() >= __ANDROID_API_M__){
         mBuilder.setDirection(Direction::Input);
         mBuilder.setFormat(AudioFormat::Float);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::Float);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -282,9 +279,9 @@
 
     mBuilder.setDirection(Direction::Input);
     mBuilder.setFormat(AudioFormat::I16);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->getFormat(), AudioFormat::I16);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, PlaybackFormatUnspecifiedReturnsI16BeforeLollipop){
@@ -292,9 +289,9 @@
     if (getSdkVersion() < __ANDROID_API_L__){
         mBuilder.setDirection(Direction::Output);
         mBuilder.setFormat(AudioFormat::Unspecified);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::I16);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -303,9 +300,9 @@
     if (getSdkVersion() >= __ANDROID_API_L__){
         mBuilder.setDirection(Direction::Output);
         mBuilder.setFormat(AudioFormat::Unspecified);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::Float);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -316,7 +313,7 @@
         mBuilder.setFormat(AudioFormat::Float);
         Result r = mBuilder.openStream(&mStream);
         ASSERT_EQ(r, Result::ErrorInvalidFormat);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
@@ -325,27 +322,27 @@
     if (getSdkVersion() >= __ANDROID_API_L__){
         mBuilder.setDirection(Direction::Output);
         mBuilder.setFormat(AudioFormat::Float);
-        openStream();
+        ASSERT_TRUE(openStream());
         ASSERT_EQ(mStream->getFormat(), AudioFormat::Float);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 }
 
 TEST_F(StreamOpen, PlaybackFormatI16ReturnsI16) {
     mBuilder.setDirection(Direction::Output);
     mBuilder.setFormat(AudioFormat::I16);
-    openStream();
+    ASSERT_TRUE(openStream());
     ASSERT_EQ(mStream->getFormat(), AudioFormat::I16);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, OpenCloseLowLatencyStream){
     mBuilder.setDirection(Direction::Output);
     mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
     float *buf = new float[100];
-    openStream();
+    ASSERT_TRUE(openStream());
     delete[] buf;
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamOpen, LowLatencyStreamHasSmallBufferSize){
@@ -353,10 +350,10 @@
     if (mBuilder.isAAudioRecommended()) {
         mBuilder.setDirection(Direction::Output);
         mBuilder.setPerformanceMode(PerformanceMode::LowLatency);
-        openStream();
+        ASSERT_TRUE(openStream());
         int32_t bufferSize = mStream->getBufferSizeInFrames();
         int32_t burst = mStream->getFramesPerBurst();
-        closeStream();
+        ASSERT_TRUE(closeStream());
         ASSERT_LE(bufferSize, burst * 3);
     }
 }
@@ -369,4 +366,4 @@
 // See if sample rate conversion by Oboe is calling the callback.
 TEST_F(StreamOpen, AAudioInputSampleRate44100) {
     checkSampleRateConversionAdvancing(Direction::Input);
-}
\ No newline at end of file
+}
diff --git a/tests/testStreamStates.cpp b/tests/testStreamStates.cpp
index 3c1675c..d6e403f 100644
--- a/tests/testStreamStates.cpp
+++ b/tests/testStreamStates.cpp
@@ -37,8 +37,12 @@
         mBuilder.setDirection(direction);
         Result r = mBuilder.openStream(&mStream);
         EXPECT_EQ(r, Result::OK) << "Failed to open stream " << convertToText(r);
-        EXPECT_EQ(mStream->getDirection(), direction) << convertToText(mStream->getDirection());
-        return (r == Result::OK);
+        if (r != Result::OK)
+            return false;
+
+        Direction d = mStream->getDirection();
+        EXPECT_EQ(d, direction) << convertToText(mStream->getDirection());
+        return (d == direction);
     }
 
     bool openStream() {
@@ -49,18 +53,14 @@
         return openStream(Direction::Input);
     }
 
-    void closeStream() {
-        if (mStream != nullptr){
-            Result r = mStream->close();
-            mStream = nullptr;
-            if (r != Result::OK){
-                FAIL() << "Failed to close stream. " << convertToText(r);
-            }
-        }
+    bool closeStream() {
+        Result r = mStream->close();
+        EXPECT_EQ(r, Result::OK) << "Failed to close stream. " << convertToText(r);
+        return (r == Result::OK);
     }
 
     void checkStreamStateIsStartedAfterStartingTwice(Direction direction) {
-        openStream(direction);
+        ASSERT_TRUE(openStream(direction));
 
         StreamState next = StreamState::Unknown;
         auto r = mStream->requestStart();
@@ -77,11 +77,11 @@
         EXPECT_EQ(r, Result::OK);
         ASSERT_EQ(next, StreamState::Started);
 
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 
     void checkStreamStateIsStoppedAfterStoppingTwice(Direction direction) {
-        openStream(direction);
+        ASSERT_TRUE(openStream(direction));
 
         StreamState next = StreamState::Unknown;
         auto r = mStream->requestStart();
@@ -100,28 +100,28 @@
         EXPECT_EQ(r, Result::OK);
         ASSERT_EQ(next, StreamState::Stopped);
 
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 
     // TODO: This seems to fail intermittently on Pixel OC_MR1 !
     void checkStreamLeftRunningShouldNotInterfereWithNextOpen(Direction direction) {
-        openStream(direction);
+        ASSERT_TRUE(openStream(direction));
 
         auto r = mStream->requestStart();
         EXPECT_EQ(r, Result::OK);
         // It should be safe to close without stopping.
         // The underlying API should stop the stream.
-        closeStream();
+        ASSERT_TRUE(closeStream());
 
         usleep(kOboeOpenCloseSleepMSec * 1000); // avoid race condition in emulator
 
-        openInputStream();
+        ASSERT_TRUE(openInputStream());
         r = mStream->requestStart();
         ASSERT_EQ(r, Result::OK) << "requestStart returned: " << convertToText(r);
 
         r = mStream->requestStop();
         EXPECT_EQ(r, Result::OK) << "requestStop returned: " << convertToText(r);
-        closeStream();
+        ASSERT_TRUE(closeStream());
     }
 
     AudioStreamBuilder mBuilder;
@@ -131,17 +131,17 @@
 };
 
 TEST_F(StreamStates, OutputStreamStateIsOpenAfterOpening){
-    openStream();
+    ASSERT_TRUE(openStream());
     StreamState next = StreamState::Unknown;
     Result r = mStream->waitForStateChange(StreamState::Uninitialized, &next, kTimeoutInNanos);
     EXPECT_EQ(r, Result::OK) << convertToText(r);
     ASSERT_EQ(next, StreamState::Open) << convertToText(next);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, OutputStreamStateIsStartedAfterStarting){
 
-    openStream();
+    ASSERT_TRUE(openStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -151,12 +151,12 @@
     EXPECT_EQ(r, Result::OK);
     ASSERT_EQ(next, StreamState::Started);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, OutputStreamStateIsPausedAfterPausing){
 
-    openStream();
+    ASSERT_TRUE(openStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -170,12 +170,12 @@
 
     ASSERT_EQ(next, StreamState::Paused);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, OutputStreamStateIsStoppedAfterStopping){
 
-    openStream();
+    ASSERT_TRUE(openStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -187,21 +187,21 @@
 
     ASSERT_EQ(next, StreamState::Stopped);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, InputStreamStateIsOpenAfterOpening){
-    openInputStream();
+    ASSERT_TRUE(openInputStream());
     StreamState next = StreamState::Unknown;
     Result r = mStream->waitForStateChange(StreamState::Uninitialized, &next, kTimeoutInNanos);
     EXPECT_EQ(r, Result::OK) << convertToText(r);
     ASSERT_EQ(next, StreamState::Open) << convertToText(next);
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, InputStreamStateIsStartedAfterStarting){
 
-    openInputStream();
+    ASSERT_TRUE(openInputStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -212,7 +212,7 @@
 
     ASSERT_EQ(next, StreamState::Started);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, OutputStreamStateIsStartedAfterStartingTwice){
@@ -232,7 +232,7 @@
 }
 
 TEST_F(StreamStates, OutputStreamStateIsPausedAfterPausingTwice){
-    openStream();
+    ASSERT_TRUE(openStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -252,19 +252,19 @@
     EXPECT_EQ(r, Result::OK);
     ASSERT_EQ(next, StreamState::Paused);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, InputStreamDoesNotSupportPause){
 
-    openInputStream();
+    ASSERT_TRUE(openInputStream());
     auto r = mStream->requestStart();
     EXPECT_EQ(r, Result::OK);
     r = mStream->requestPause();
 
     ASSERT_EQ(r, Result::ErrorUnimplemented) << convertToText(r);
     mStream->requestStop();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(StreamStates, OutputStreamLeftRunningShouldNotInterfereWithNextOpen) {
@@ -287,7 +287,7 @@
 
 TEST_F(StreamStates, InputStreamStateIsStoppedAfterStopping){
 
-    openInputStream();
+    ASSERT_TRUE(openInputStream());
 
     StreamState next = StreamState::Unknown;
     auto r = mStream->requestStart();
@@ -301,5 +301,5 @@
 
     ASSERT_EQ(next, StreamState::Stopped);
 
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
diff --git a/tests/testStreamWaitState.cpp b/tests/testStreamWaitState.cpp
index 0ec4052..d9b20b3 100644
--- a/tests/testStreamWaitState.cpp
+++ b/tests/testStreamWaitState.cpp
@@ -35,8 +35,12 @@
         mBuilder.setDirection(direction);
         Result r = mBuilder.openStream(&mStream);
         EXPECT_EQ(r, Result::OK) << "Failed to open stream " << convertToText(r);
-        EXPECT_EQ(mStream->getDirection(), direction) << convertToText(mStream->getDirection());
-        return (r == Result::OK);
+        if (r != Result::OK)
+            return false;
+
+        Direction d = mStream->getDirection();
+        EXPECT_EQ(d, direction) << convertToText(mStream->getDirection());
+        return (d == direction);
     }
 
     bool openStream(AudioStreamBuilder &builder) {
@@ -45,14 +49,11 @@
         return (r == Result::OK);
     }
 
-    void closeStream() {
-        if (mStream != nullptr){
-            Result r = mStream->close();
-            mStream = nullptr;
-            if (r != Result::OK && r != Result::ErrorClosed){
-                FAIL() << "Failed to close stream. " << convertToText(r);
-            }
-        }
+    bool closeStream() {
+        Result r = mStream->close();
+        EXPECT_TRUE(r == Result::OK || r == Result::ErrorClosed) <<
+            "Failed to close stream. " << convertToText(r);
+        return (r == Result::OK || r == Result::ErrorClosed);
     }
 
     void checkWaitZeroTimeout() {
@@ -119,46 +120,46 @@
 };
 
 TEST_F(TestStreamWaitState, OutputLowWaitZero) {
-    openStream(Direction::Output, PerformanceMode::LowLatency);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::LowLatency));
     checkWaitZeroTimeout();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputNoneWaitZero) {
-    openStream(Direction::Output, PerformanceMode::None);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::None));
     checkWaitZeroTimeout();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputLowWaitZeroSLES) {
     AudioStreamBuilder builder;
     builder.setPerformanceMode(PerformanceMode::LowLatency);
     builder.setAudioApi(AudioApi::OpenSLES);
-    openStream(builder);
+    ASSERT_TRUE(openStream(builder));
     checkWaitZeroTimeout();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputNoneWaitZeroSLES) {
     AudioStreamBuilder builder;
     builder.setPerformanceMode(PerformanceMode::None);
     builder.setAudioApi(AudioApi::OpenSLES);
-    openStream(builder);
+    ASSERT_TRUE(openStream(builder));
     checkWaitZeroTimeout();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 
 TEST_F(TestStreamWaitState, OutputLowStopWhileWaiting) {
-    openStream(Direction::Output, PerformanceMode::LowLatency);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::LowLatency));
     checkStopWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputNoneStopWhileWaiting) {
-    openStream(Direction::Output, PerformanceMode::LowLatency);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::LowLatency));
     checkStopWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 
@@ -166,43 +167,43 @@
     AudioStreamBuilder builder;
     builder.setPerformanceMode(PerformanceMode::LowLatency);
     builder.setAudioApi(AudioApi::OpenSLES);
-    openStream(builder);
+    ASSERT_TRUE(openStream(builder));
     checkStopWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 
 TEST_F(TestStreamWaitState, OutputLowCloseWhileWaiting) {
-    openStream(Direction::Output, PerformanceMode::LowLatency);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::LowLatency));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputNoneCloseWhileWaiting) {
-    openStream(Direction::Output, PerformanceMode::None);
+    ASSERT_TRUE(openStream(Direction::Output, PerformanceMode::None));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, InputLowCloseWhileWaiting) {
-    openStream(Direction::Input, PerformanceMode::LowLatency);
+    ASSERT_TRUE(openStream(Direction::Input, PerformanceMode::LowLatency));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, InputNoneCloseWhileWaiting) {
-    openStream(Direction::Input, PerformanceMode::None);
+    ASSERT_TRUE(openStream(Direction::Input, PerformanceMode::None));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(TestStreamWaitState, OutputNoneCloseWhileWaitingSLES) {
     AudioStreamBuilder builder;
     builder.setPerformanceMode(PerformanceMode::None);
     builder.setAudioApi(AudioApi::OpenSLES);
-    openStream(builder);
+    ASSERT_TRUE(openStream(builder));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 
@@ -210,7 +211,7 @@
     AudioStreamBuilder builder;
     builder.setPerformanceMode(PerformanceMode::LowLatency);
     builder.setAudioApi(AudioApi::OpenSLES);
-    openStream(builder);
+    ASSERT_TRUE(openStream(builder));
     checkCloseWhileWaiting();
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
\ No newline at end of file
diff --git a/tests/testXRunBehaviour.cpp b/tests/testXRunBehaviour.cpp
index bb6ab98..ccb597f 100644
--- a/tests/testXRunBehaviour.cpp
+++ b/tests/testXRunBehaviour.cpp
@@ -32,20 +32,16 @@
 
 protected:
 
-    void openStream(){
+    bool openStream() {
         Result r = mBuilder.openStream(&mStream);
-        if (r != Result::OK){
-            FAIL() << "Failed to open stream. " << convertToText(r);
-        }
+        EXPECT_EQ(r, Result::OK) << "Failed to open stream " << convertToText(r);
+        return (r == Result::OK);
     }
 
-    void closeStream(){
-        if (mStream != nullptr){
-            Result r = mStream->close();
-            if (r != Result::OK){
-                FAIL() << "Failed to close stream. " << convertToText(r);
-            }
-        }
+    bool closeStream() {
+        Result r = mStream->close();
+        EXPECT_EQ(r, Result::OK) << "Failed to close stream. " << convertToText(r);
+        return (r == Result::OK);
     }
 
     AudioStreamBuilder mBuilder;
@@ -57,29 +53,29 @@
 //  however, these aren't the same as the actual stream underruns
 TEST_F(XRunBehaviour, SupportedWhenStreamIsUsingAAudio){
 
-    openStream();
+    ASSERT_TRUE(openStream());
     if (mStream->getAudioApi() == AudioApi::AAudio){
         ASSERT_TRUE(mStream->isXRunCountSupported());
     }
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(XRunBehaviour, NotSupportedOnOpenSLESWhenStreamIsUsingCallback){
 
     MyCallback callback;
     mBuilder.setCallback(&callback);
-    openStream();
+    ASSERT_TRUE(openStream());
     if (mStream->getAudioApi() == AudioApi::OpenSLES){
         ASSERT_FALSE(mStream->isXRunCountSupported());
     }
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
 
 TEST_F(XRunBehaviour, SupportedOnOpenSLESWhenStreamIsUsingBlockingIO){
 
-    openStream();
+    ASSERT_TRUE(openStream());
     if (mStream->getAudioApi() == AudioApi::OpenSLES){
         ASSERT_TRUE(mStream->isXRunCountSupported());
     }
-    closeStream();
+    ASSERT_TRUE(closeStream());
 }
\ No newline at end of file