Add support for io_uring based async read/recvmsg

Summary:
Add support for io_uring based async read/recvmsg

(Note: this ignores all push blocking failures!)

Reviewed By: kevin-vigor

Differential Revision: D21208891

fbshipit-source-id: 21b3b5e0f201e982ecb50a284d03ab53413ec3e3
This commit is contained in:
Dan Melnic
2020-04-30 13:27:53 -07:00
committed by Facebook GitHub Bot
parent a0cd37b5ef
commit de5147a516

View File

@@ -25,18 +25,18 @@
@implementation FlipperClientTests @implementation FlipperClientTests
facebook::flipper::FlipperClient* client; facebook::flipper::FlipperClient* client;
facebook::flipper::test::FlipperConnectionManagerMock* socket; facebook::flipper::test::FlipperConnectionManagerMock* sock;
FlipperClient* objcClient; FlipperClient* objcClient;
- (void)setUp { - (void)setUp {
// Put setup code here. This method is called before the invocation of each // Put setup code here. This method is called before the invocation of each
// test method in the class. // test method in the class.
socket = new facebook::flipper::test::FlipperConnectionManagerMock; sock = new facebook::flipper::test::FlipperConnectionManagerMock;
auto state = std::make_shared<FlipperState>(); auto state = std::make_shared<FlipperState>();
client = new facebook::flipper::FlipperClient( client = new facebook::flipper::FlipperClient(
std::unique_ptr<facebook::flipper::test::FlipperConnectionManagerMock>{ std::unique_ptr<facebook::flipper::test::FlipperConnectionManagerMock>{
socket}, sock},
state); state);
objcClient = [[FlipperClient alloc] initWithCppClient:client]; objcClient = [[FlipperClient alloc] initWithCppClient:client];
} }
@@ -84,7 +84,7 @@ FlipperClient* objcClient;
std::unique_ptr<facebook::flipper::FlipperResponderMock> responder = std::unique_ptr<facebook::flipper::FlipperResponderMock> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>( std::make_unique<facebook::flipper::FlipperResponderMock>(
&successes, &errors); &successes, &errors);
socket->callbacks->onMessageReceived(message, std::move(responder)); sock->callbacks->onMessageReceived(message, std::move(responder));
folly::dynamic expected = folly::dynamic expected =
folly::dynamic::object("plugins", folly::dynamic::array()); folly::dynamic::object("plugins", folly::dynamic::array());
XCTAssertEqual(successes.size(), 1); XCTAssertEqual(successes.size(), 1);
@@ -146,7 +146,7 @@ FlipperClient* objcClient;
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder)); sock->callbacks->onMessageReceived(messageInit, std::move(responder));
XCTAssertTrue(pluginConnected); XCTAssertTrue(pluginConnected);
[objcClient stop]; [objcClient stop];
XCTAssertFalse(pluginConnected); XCTAssertFalse(pluginConnected);
@@ -172,19 +172,19 @@ FlipperClient* objcClient;
"params", folly::dynamic::object("plugin", "cat")); "params", folly::dynamic::object("plugin", "cat"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder)); sock->callbacks->onMessageReceived(messageInit, std::move(responder));
XCTAssertTrue(pluginConnected); XCTAssertTrue(pluginConnected);
folly::dynamic messageDeInit = folly::dynamic::object("method", "deinit")( folly::dynamic messageDeInit = folly::dynamic::object("method", "deinit")(
"params", folly::dynamic::object("plugin", "cat")); "params", folly::dynamic::object("plugin", "cat"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder2 = std::unique_ptr<facebook::flipper::FlipperResponder> responder2 =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageDeInit, std::move(responder2)); sock->callbacks->onMessageReceived(messageDeInit, std::move(responder2));
XCTAssertFalse(pluginConnected); XCTAssertFalse(pluginConnected);
std::unique_ptr<facebook::flipper::FlipperResponder> responder3 = std::unique_ptr<facebook::flipper::FlipperResponder> responder3 =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder3)); sock->callbacks->onMessageReceived(messageInit, std::move(responder3));
XCTAssertTrue(pluginConnected); XCTAssertTrue(pluginConnected);
[objcClient stop]; [objcClient stop];
@@ -212,7 +212,7 @@ FlipperClient* objcClient;
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
XCTAssertNoThrow( XCTAssertNoThrow(
socket->callbacks->onMessageReceived(messageInit, std::move(responder))); sock->callbacks->onMessageReceived(messageInit, std::move(responder)));
XCTAssertTrue(pluginConnected); XCTAssertTrue(pluginConnected);
} }
@@ -235,7 +235,7 @@ FlipperClient* objcClient;
"params", folly::dynamic::object("plugin", "cat")); "params", folly::dynamic::object("plugin", "cat"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder)); sock->callbacks->onMessageReceived(messageInit, std::move(responder));
XCTAssertNoThrow( XCTAssertNoThrow(
[objcClient stop]); // Stopping client will call disconnect of the plugin [objcClient stop]); // Stopping client will call disconnect of the plugin
@@ -264,7 +264,7 @@ FlipperClient* objcClient;
"params", folly::dynamic::object("plugin", "PluginIdentifier")); "params", folly::dynamic::object("plugin", "PluginIdentifier"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder1 = std::unique_ptr<facebook::flipper::FlipperResponder> responder1 =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder1)); sock->callbacks->onMessageReceived(messageInit, std::move(responder1));
folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")( folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")(
"params", "params",
folly::dynamic::object("api", "PluginIdentifier")( folly::dynamic::object("api", "PluginIdentifier")(
@@ -272,7 +272,7 @@ FlipperClient* objcClient;
std::unique_ptr<facebook::flipper::FlipperResponder> responder2 = std::unique_ptr<facebook::flipper::FlipperResponder> responder2 =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(message, std::move(responder2)); sock->callbacks->onMessageReceived(message, std::move(responder2));
XCTAssertTrue(isCalled); XCTAssertTrue(isCalled);
} }
@@ -300,7 +300,7 @@ FlipperClient* objcClient;
"params", folly::dynamic::object("plugin", "PluginIdentifier")); "params", folly::dynamic::object("plugin", "PluginIdentifier"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder)); sock->callbacks->onMessageReceived(messageInit, std::move(responder));
folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")( folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")(
"params", "params",
@@ -308,7 +308,7 @@ FlipperClient* objcClient;
"method", "MethodName")); "method", "MethodName"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder2 = std::unique_ptr<facebook::flipper::FlipperResponder> responder2 =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(message, std::move(responder2)); sock->callbacks->onMessageReceived(message, std::move(responder2));
XCTAssertTrue(isCalled); XCTAssertTrue(isCalled);
} }
@@ -338,7 +338,7 @@ FlipperClient* objcClient;
"params", folly::dynamic::object("plugin", "PluginIdentifier")); "params", folly::dynamic::object("plugin", "PluginIdentifier"));
std::unique_ptr<facebook::flipper::FlipperResponder> responder = std::unique_ptr<facebook::flipper::FlipperResponder> responder =
std::make_unique<facebook::flipper::FlipperResponderMock>(); std::make_unique<facebook::flipper::FlipperResponderMock>();
socket->callbacks->onMessageReceived(messageInit, std::move(responder)); sock->callbacks->onMessageReceived(messageInit, std::move(responder));
folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")( folly::dynamic message = folly::dynamic::object("id", 1)("method", "execute")(
"params", "params",
@@ -351,7 +351,7 @@ FlipperClient* objcClient;
&successes, &errors); &successes, &errors);
XCTAssertNoThrow( XCTAssertNoThrow(
socket->callbacks->onMessageReceived(message, std::move(responder2))); sock->callbacks->onMessageReceived(message, std::move(responder2)));
XCTAssertTrue(isCalled); XCTAssertTrue(isCalled);
XCTAssertEqual(successes.size(), 0); XCTAssertEqual(successes.size(), 0);
XCTAssertEqual(errors.size(), 1); XCTAssertEqual(errors.size(), 1);