summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine/Orc
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/RPCUtilsTest.cpp52
1 files changed, 50 insertions, 2 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/RPCUtilsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/RPCUtilsTest.cpp
index c2dca225c12..23052dcb70e 100644
--- a/llvm/unittests/ExecutionEngine/Orc/RPCUtilsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/RPCUtilsTest.cpp
@@ -108,8 +108,7 @@ namespace rpc {
} // end namespace orc
} // end namespace llvm
-class DummyRPCAPI {
-public:
+namespace DummyRPCAPI {
class VoidBool : public Function<VoidBool, void(bool)> {
public:
@@ -456,3 +455,52 @@ TEST(DummyRPC, TestParallelCallGroup) {
ServerThread.join();
}
+
+TEST(DummyRPC, TestAPICalls) {
+
+ using DummyCalls1 = APICalls<DummyRPCAPI::VoidBool, DummyRPCAPI::IntInt>;
+ using DummyCalls2 = APICalls<DummyRPCAPI::AllTheTypes>;
+ using DummyCalls3 = APICalls<DummyCalls1, DummyRPCAPI::CustomType>;
+ using DummyCallsAll = APICalls<DummyCalls1, DummyCalls2, DummyRPCAPI::CustomType>;
+
+ static_assert(DummyCalls1::Contains<DummyRPCAPI::VoidBool>::value,
+ "Contains<Func> template should return true here");
+ static_assert(!DummyCalls1::Contains<DummyRPCAPI::CustomType>::value,
+ "Contains<Func> template should return false here");
+
+ Queue Q1, Q2;
+ DummyRPCEndpoint Client(Q1, Q2);
+ DummyRPCEndpoint Server(Q2, Q1);
+
+ std::thread ServerThread(
+ [&]() {
+ Server.addHandler<DummyRPCAPI::VoidBool>([](bool b) { });
+ Server.addHandler<DummyRPCAPI::IntInt>([](int x) { return x; });
+ Server.addHandler<DummyRPCAPI::CustomType>([](RPCFoo F) {});
+
+ for (unsigned I = 0; I < 4; ++I) {
+ auto Err = Server.handleOne();
+ (void)!!Err;
+ }
+ });
+
+ {
+ auto Err = DummyCalls1::negotiate(Client);
+ EXPECT_FALSE(!!Err) << "DummyCalls1::negotiate failed";
+ }
+
+ {
+ auto Err = DummyCalls3::negotiate(Client);
+ EXPECT_FALSE(!!Err) << "DummyCalls3::negotiate failed";
+ }
+
+ {
+ auto Err = DummyCallsAll::negotiate(Client);
+ EXPECT_EQ(errorToErrorCode(std::move(Err)).value(),
+ static_cast<int>(OrcErrorCode::UnknownRPCFunction))
+ << "Uxpected 'UnknownRPCFunction' error for attempted negotiate of "
+ "unsupported function";
+ }
+
+ ServerThread.join();
+}
OpenPOWER on IntegriCloud