Pass SonarState into SonarWebSocketImpl
Summary: Allowing the connection code to update trigger diagnostic events Reviewed By: passy Differential Revision: D9117507 fbshipit-source-id: 24eeb1f80109f89137a7333e04039c3ae9dc3e71
This commit is contained in:
committed by
Facebook Github Bot
parent
3237b60ff1
commit
c7858c62f7
@@ -31,8 +31,9 @@ static SonarClient* kInstance;
|
||||
using folly::dynamic;
|
||||
|
||||
void SonarClient::init(SonarInitConfig config) {
|
||||
auto state = std::make_shared<SonarState>();
|
||||
kInstance =
|
||||
new SonarClient(std::make_unique<SonarWebSocketImpl>(std::move(config)));
|
||||
new SonarClient(std::make_unique<SonarWebSocketImpl>(std::move(config), state), state);
|
||||
}
|
||||
|
||||
SonarClient* SonarClient::instance() {
|
||||
|
||||
@@ -39,9 +39,8 @@ class SonarClient : public SonarWebSocket::Callbacks {
|
||||
/**
|
||||
Only public for testing
|
||||
*/
|
||||
SonarClient(std::unique_ptr<SonarWebSocket> socket)
|
||||
: socket_(std::move(socket)) {
|
||||
sonarState_ = std::make_unique<SonarState>();
|
||||
SonarClient(std::unique_ptr<SonarWebSocket> socket, std::shared_ptr<SonarState> state)
|
||||
: socket_(std::move(socket)), sonarState_(state) {
|
||||
auto step = sonarState_->start("Create client");
|
||||
socket_->setCallbacks(this);
|
||||
step->complete();
|
||||
@@ -92,7 +91,7 @@ class SonarClient : public SonarWebSocket::Callbacks {
|
||||
std::map<std::string, std::shared_ptr<SonarPlugin>> plugins_;
|
||||
std::map<std::string, std::shared_ptr<SonarConnectionImpl>> connections_;
|
||||
std::mutex mutex_;
|
||||
std::unique_ptr<SonarState> sonarState_;
|
||||
std::shared_ptr<SonarState> sonarState_;
|
||||
|
||||
void performAndReportError(const std::function<void()>& func);
|
||||
void disconnect(std::shared_ptr<SonarPlugin> plugin);
|
||||
|
||||
@@ -91,8 +91,8 @@ class Responder : public rsocket::RSocketResponder {
|
||||
}
|
||||
};
|
||||
|
||||
SonarWebSocketImpl::SonarWebSocketImpl(SonarInitConfig config)
|
||||
: deviceData_(config.deviceData), sonarEventBase_(config.callbackWorker), connectionEventBase_(config.connectionWorker) {}
|
||||
SonarWebSocketImpl::SonarWebSocketImpl(SonarInitConfig config, std::shared_ptr<SonarState> state)
|
||||
: deviceData_(config.deviceData), sonarState_(state), sonarEventBase_(config.callbackWorker), connectionEventBase_(config.connectionWorker) {}
|
||||
|
||||
SonarWebSocketImpl::~SonarWebSocketImpl() {
|
||||
stop();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <Sonar/SonarInitConfig.h>
|
||||
#include <Sonar/SonarWebSocket.h>
|
||||
#include <Sonar/SonarState.h>
|
||||
#include <folly/Executor.h>
|
||||
#include <folly/io/async/EventBase.h>
|
||||
#include <rsocket/RSocket.h>
|
||||
@@ -26,7 +27,7 @@ class SonarWebSocketImpl : public SonarWebSocket {
|
||||
friend Responder;
|
||||
|
||||
public:
|
||||
SonarWebSocketImpl(SonarInitConfig config);
|
||||
SonarWebSocketImpl(SonarInitConfig config, std::shared_ptr<SonarState> state);
|
||||
|
||||
~SonarWebSocketImpl();
|
||||
|
||||
@@ -46,6 +47,7 @@ class SonarWebSocketImpl : public SonarWebSocket {
|
||||
bool isOpen_ = false;
|
||||
Callbacks* callbacks_;
|
||||
DeviceData deviceData_;
|
||||
std::shared_ptr<SonarState> sonarState_;
|
||||
|
||||
folly::EventBase* sonarEventBase_;
|
||||
folly::EventBase* connectionEventBase_;
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace test {
|
||||
|
||||
using folly::dynamic;
|
||||
|
||||
auto state = std::make_shared<SonarState>();
|
||||
|
||||
TEST(SonarClientTests, testSaneMocks) {
|
||||
SonarWebSocketMock socket;
|
||||
socket.start();
|
||||
@@ -32,7 +34,7 @@ TEST(SonarClientTests, testSaneMocks) {
|
||||
|
||||
TEST(SonarClientTests, testGetPlugins) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
client.start();
|
||||
|
||||
client.addPlugin(std::make_shared<SonarPluginMock>("Cat"));
|
||||
@@ -48,7 +50,7 @@ TEST(SonarClientTests, testGetPlugins) {
|
||||
|
||||
TEST(SonarClientTests, testGetPlugin) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
const auto catPlugin = std::make_shared<SonarPluginMock>("Cat");
|
||||
client.addPlugin(catPlugin);
|
||||
@@ -61,7 +63,7 @@ TEST(SonarClientTests, testGetPlugin) {
|
||||
|
||||
TEST(SonarClientTests, testGetPluginWithDowncast) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
const auto catPlugin = std::make_shared<SonarPluginMock>("Cat");
|
||||
client.addPlugin(catPlugin);
|
||||
@@ -70,7 +72,7 @@ TEST(SonarClientTests, testGetPluginWithDowncast) {
|
||||
|
||||
TEST(SonarClientTests, testRemovePlugin) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
client.start();
|
||||
|
||||
auto plugin = std::make_shared<SonarPluginMock>("Test");
|
||||
@@ -87,7 +89,7 @@ TEST(SonarClientTests, testRemovePlugin) {
|
||||
|
||||
TEST(SonarClientTests, testStartStop) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
client.start();
|
||||
EXPECT_TRUE(socket->isOpen());
|
||||
@@ -98,7 +100,7 @@ TEST(SonarClientTests, testStartStop) {
|
||||
|
||||
TEST(SonarClientTests, testConnectDisconnect) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
bool pluginConnected = false;
|
||||
const auto connectionCallback = [&](std::shared_ptr<SonarConnection> conn) {
|
||||
@@ -121,7 +123,7 @@ TEST(SonarClientTests, testConnectDisconnect) {
|
||||
|
||||
TEST(SonarClientTests, testInitDeinit) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
bool pluginConnected = false;
|
||||
const auto connectionCallback = [&](std::shared_ptr<SonarConnection> conn) {
|
||||
@@ -159,7 +161,7 @@ TEST(SonarClientTests, testInitDeinit) {
|
||||
|
||||
TEST(SonarClientTests, testRemovePluginWhenConnected) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
bool pluginConnected = false;
|
||||
const auto connectionCallback = [&](std::shared_ptr<SonarConnection> conn) {
|
||||
@@ -180,7 +182,7 @@ TEST(SonarClientTests, testRemovePluginWhenConnected) {
|
||||
|
||||
TEST(SonarClientTests, testUnhandleableMethod) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
auto plugin = std::make_shared<SonarPluginMock>("Test");
|
||||
client.addPlugin(plugin);
|
||||
@@ -200,7 +202,7 @@ TEST(SonarClientTests, testUnhandleableMethod) {
|
||||
|
||||
TEST(SonarClientTests, testExecute) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
client.start();
|
||||
|
||||
const auto connectionCallback = [](std::shared_ptr<SonarConnection> conn) {
|
||||
@@ -230,7 +232,7 @@ TEST(SonarClientTests, testExecute) {
|
||||
|
||||
TEST(SonarClientTests, testExecuteWithParams) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
|
||||
const auto connectionCallback = [&](std::shared_ptr<SonarConnection> conn) {
|
||||
const auto receiver = [](const dynamic ¶ms,
|
||||
@@ -263,7 +265,7 @@ TEST(SonarClientTests, testExecuteWithParams) {
|
||||
|
||||
TEST(SonarClientTests, testExceptionUnknownPlugin) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
client.start();
|
||||
|
||||
dynamic messageInit = dynamic::object("method", "init")(
|
||||
@@ -276,7 +278,7 @@ TEST(SonarClientTests, testExceptionUnknownPlugin) {
|
||||
|
||||
TEST(SonarClientTests, testExceptionUnknownApi) {
|
||||
auto socket = new SonarWebSocketMock;
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket});
|
||||
SonarClient client(std::unique_ptr<SonarWebSocketMock>{socket}, state);
|
||||
client.start();
|
||||
|
||||
dynamic messageInit = dynamic::object("method", "execute")(
|
||||
|
||||
Reference in New Issue
Block a user