JD2022-TU1/main/extern/Hue/libhuestream/test/TestConnectionFlowManual.cpp

121 lines
No EOL
3.7 KiB
C++

#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <memory>
#include <huestream/connect/ConnectionFlow.h>
#include "MockBridgeAuthenticator.h"
#include "MockBridgeSearcher.h"
#include "TestableConnectionFlow.h"
#include "MockConnectionFlowFactory.h"
#include "MockBridgeStorageAccesser.h"
#include "MessageDispatcherStub.h"
#include "TestConnectionFlowBase.h"
using namespace testing;
using namespace huestream;
using namespace huestream::connectionflow;
class TestConnectionFlow_Manual : public TestConnectionFlowBase {
public:
void connect_manual_ip_starts_pushlink(int index) {
expect_message(PROCEDURE_STARTED, INFO);
string ipAddress = _bridges->at(index)->GetIpAddress();
expect_message(START_AUTHORIZING, INFO);
expect_message(PRESS_PUSH_LINK, USER);
expect_on_authenticator_authenticate(index);
_connectionFlow->ConnectToBridgeWithIp(ipAddress);
_messageDispatcher->ExecutePendingActions();
}
void set_manual(int index) {
_bridges->at(index)->SetUser("HSJKHSDKJHKJDHIUHHFYU&e213");
_bridges->at(index)->SetClientKey("00000000000000000000000000000000");
_bridges->at(index)->SetIsAuthorized(true);
_connectionFlow->SetManual(_bridges->at(index));
}
void set_manual_retrieves_full_config(int index, int numGroups) {
expect_message(PROCEDURE_STARTED, INFO);
expect_initiate_full_config_retrieval();
set_manual(index);
_messageDispatcher->ExecutePendingActions();
retrieve_full_config(index, numGroups);
}
void reset_bridge_returns_empty_bridge() {
expect_message(PROCEDURE_STARTED, INFO);
expect_message(DONE_RESET, INFO, make_shared<Bridge>(), BRIDGE_EMPTY);
expect_on_storage_accesser_save();
_connectionFlow->ResetBridge();
_messageDispatcher->ExecutePendingActions();
}
};
INSTANTIATE_TEST_CASE_P(connect_with_manual_ip,
TestConnectionFlow_Manual, Values(0,1));
TEST_P(TestConnectionFlow_Manual, connect_with_manual_ip) {
set_autostart_based_on_param(GetParam());
connect_manual_ip_starts_pushlink(0);
finish_authorization_successfully_and_retrieve_full_config(0);
finish(_bridges->at(0));
}
INSTANTIATE_TEST_CASE_P(connect_with_manual_ip_and_credentials,
TestConnectionFlow_Manual, Values(0,1));
TEST_P(TestConnectionFlow_Manual, connect_with_manual_ip_and_credentials) {
set_autostart_based_on_param(GetParam());
set_manual_retrieves_full_config(1, 1);
finish(_bridges->at(1));
}
TEST_F(TestConnectionFlow_Manual, reset_bridge) {
reset_bridge_returns_empty_bridge();
finish_without_stream_start(false);
}
TEST_F(TestConnectionFlow_Manual, connect_with_manual_ip_followed_by_connect_with_manual_ip_and_credentials) {
connect_manual_ip_starts_pushlink(0);
finish_authorization_successfully_and_retrieve_full_config(0);
finish(_bridges->at(0));
set_manual_retrieves_full_config(1, 2);
finish_without_stream_start(false);
}
TEST_F(TestConnectionFlow_Manual, connect_with_manual_ip_abort_and_retry) {
connect_manual_ip_starts_pushlink(0);
expect_no_actions();
_connectionFlow->ConnectToBridgeWithIp(_bridges->at(1)->GetIpAddress());
_messageDispatcher->ExecutePendingActions();
abort_finalizes();
connect_manual_ip_starts_pushlink(2);
finish_authorization_successfully_and_retrieve_full_config(2);
finish(_bridges->at(2));
}
TEST_F(TestConnectionFlow_Manual, connect_with_manual_ip_and_credentials_abort_and_retry) {
expect_message(PROCEDURE_STARTED, INFO);
expect_initiate_full_config_retrieval();
set_manual(0);
_messageDispatcher->ExecutePendingActions();
expect_no_actions();
set_manual(1);
_messageDispatcher->ExecutePendingActions();
abort_finalizes();
set_manual_retrieves_full_config(2, 1);
finish(_bridges->at(2));
}