::testing::AssertionResult AwaitAssertAbandoned( const char* expr, const char*, // Unused string representation of 'duration'. const process::Future<T>& actual, const Duration& duration) { process::Owned<process::Latch> latch(new process::Latch()); actual.onAny([=]() { latch->trigger(); }); actual.onAbandoned([=]() { latch->trigger(); }); if (!latch->await(duration)) { return ::testing::AssertionFailure() << "Failed to wait " << duration << " for " << expr; } else if (actual.isDiscarded()) { return ::testing::AssertionFailure() << expr << " was discarded"; } else if (actual.isReady()) { return ::testing::AssertionFailure() << expr << " is ready (" << ::testing::PrintToString(actual.get()) << ")"; } else if (actual.isFailed()) { return ::testing::AssertionFailure() << "(" << expr << ").failure(): " << actual.failure(); } CHECK_ABANDONED(actual); return ::testing::AssertionSuccess(); }
Future<Nothing> _destroy( const ContainerID& containerId, const process::Future<Nothing>& destroyed) { if (!destroyed.isReady()) { return Failure("Failed to destroy launcher: " + (destroyed.isFailed() ? destroyed.failure() : "discarded")); } return Nothing(); }
Option<Error> _check_failed(const process::Future<T>& f) { if (f.isPending()) { return Some("is PENDING"); } else if (f.isReady()) { return Some("is READY"); } else if (f.isDiscarded()) { return Some("is DISCARDED"); } else { CHECK(f.isFailed()); return None(); } }
Option<Error> _check_discarded(const process::Future<T>& f) { if (f.isPending()) { return Error("is PENDING"); } else if (f.isReady()) { return Error("is READY"); } else if (f.isFailed()) { return Error("is FAILED: " + f.failure()); } else { CHECK(f.isDiscarded()); return None(); } }
::testing::AssertionResult AwaitAssertDiscarded( const char* expr, const char*, // Unused string representation of 'duration'. const process::Future<T>& actual, const Duration& duration) { if (!process::internal::await(actual, duration)) { return ::testing::AssertionFailure() << "Failed to wait " << duration << " for " << expr; } else if (actual.isFailed()) { return ::testing::AssertionFailure() << "(" << expr << ").failure(): " << actual.failure(); } else if (actual.isReady()) { return ::testing::AssertionFailure() << expr << " is ready (" << ::testing::PrintToString(actual.get()) << ")"; } return ::testing::AssertionSuccess(); }