eche_message_receiver_impl_unittest.cc 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/webui/eche_app_ui/eche_message_receiver_impl.h"
  5. #include "ash/services/secure_channel/public/cpp/client/fake_connection_manager.h"
  6. #include "ash/webui/eche_app_ui/proto/exo_messages.pb.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace ash {
  9. namespace eche_app {
  10. namespace {
  11. class FakeObserver : public EcheMessageReceiver::Observer {
  12. public:
  13. FakeObserver() = default;
  14. ~FakeObserver() override = default;
  15. size_t apps_access_state_response_num_calls() const {
  16. return apps_access_state_response_num_calls_;
  17. }
  18. size_t apps_setup_response_num_calls() const { return apps_setup_response_; }
  19. size_t status_change_num_calls() const { return status_change_num_calls_; }
  20. size_t apps_policy_state_change_num_calls() const {
  21. return apps_policy_state_change_num_calls_;
  22. }
  23. proto::GetAppsAccessStateResponse get_last_apps_access_state() const {
  24. return last_apps_access_state_response_;
  25. }
  26. proto::SendAppsSetupResponse get_last_apps_setup_response() const {
  27. return last_apps_setup_reponse_;
  28. }
  29. proto::StatusChangeType get_last_status_change_type() const {
  30. return last_status_change_type_;
  31. }
  32. proto::AppStreamingPolicy get_last_apps_policy_state() const {
  33. return last_apps_policy_state_;
  34. }
  35. // EcheMessageReceiver::Observer:
  36. void OnGetAppsAccessStateResponseReceived(
  37. proto::GetAppsAccessStateResponse apps_access_state_response) override {
  38. last_apps_access_state_response_ = apps_access_state_response;
  39. ++apps_access_state_response_num_calls_;
  40. }
  41. void OnSendAppsSetupResponseReceived(
  42. proto::SendAppsSetupResponse apps_setup_response) override {
  43. last_apps_setup_reponse_ = apps_setup_response;
  44. ++apps_setup_response_;
  45. }
  46. void OnStatusChange(proto::StatusChangeType status_change_type) override {
  47. last_status_change_type_ = status_change_type;
  48. ++status_change_num_calls_;
  49. }
  50. void OnAppPolicyStateChange(
  51. proto::AppStreamingPolicy app_policy_state) override {
  52. last_apps_policy_state_ = app_policy_state;
  53. ++apps_policy_state_change_num_calls_;
  54. }
  55. private:
  56. size_t apps_access_state_response_num_calls_ = 0;
  57. size_t apps_setup_response_ = 0;
  58. size_t status_change_num_calls_ = 0;
  59. size_t apps_policy_state_change_num_calls_ = 0;
  60. proto::GetAppsAccessStateResponse last_apps_access_state_response_;
  61. proto::SendAppsSetupResponse last_apps_setup_reponse_;
  62. proto::StatusChangeType last_status_change_type_;
  63. proto::AppStreamingPolicy last_apps_policy_state_;
  64. };
  65. } // namespace
  66. class EcheMessageReceiverImplTest : public testing::Test {
  67. protected:
  68. EcheMessageReceiverImplTest()
  69. : fake_connection_manager_(
  70. std::make_unique<secure_channel::FakeConnectionManager>()) {}
  71. EcheMessageReceiverImplTest(const EcheMessageReceiverImplTest&) = delete;
  72. EcheMessageReceiverImplTest& operator=(const EcheMessageReceiverImplTest&) =
  73. delete;
  74. ~EcheMessageReceiverImplTest() override = default;
  75. void SetUp() override {
  76. message_receiver_ = std::make_unique<EcheMessageReceiverImpl>(
  77. fake_connection_manager_.get());
  78. message_receiver_->AddObserver(&fake_observer_);
  79. }
  80. void TearDown() override {
  81. message_receiver_->RemoveObserver(&fake_observer_);
  82. message_receiver_.reset();
  83. }
  84. size_t GetNumAppsAccessStateResponseCalls() const {
  85. return fake_observer_.apps_access_state_response_num_calls();
  86. }
  87. size_t GetNumAppsSetupResponseCalls() const {
  88. return fake_observer_.apps_setup_response_num_calls();
  89. }
  90. size_t GetNumStatusChangeCalls() const {
  91. return fake_observer_.status_change_num_calls();
  92. }
  93. size_t GetNumAppsPolicyStateChangeCalls() const {
  94. return fake_observer_.apps_policy_state_change_num_calls();
  95. }
  96. proto::GetAppsAccessStateResponse GetLastAppsAccessState() const {
  97. return fake_observer_.get_last_apps_access_state();
  98. }
  99. proto::SendAppsSetupResponse GetLastAppsSetupResponse() const {
  100. return fake_observer_.get_last_apps_setup_response();
  101. }
  102. proto::StatusChangeType GetLastStatusChangeType() const {
  103. return fake_observer_.get_last_status_change_type();
  104. }
  105. proto::AppStreamingPolicy GetAppStreamingPolicyState() const {
  106. return fake_observer_.get_last_apps_policy_state();
  107. }
  108. FakeObserver fake_observer_;
  109. std::unique_ptr<secure_channel::FakeConnectionManager>
  110. fake_connection_manager_;
  111. std::unique_ptr<EcheMessageReceiver> message_receiver_;
  112. };
  113. TEST_F(EcheMessageReceiverImplTest, OnGetAppsAccessStateResponseReceived) {
  114. proto::GetAppsAccessStateResponse response;
  115. response.set_result(eche_app::proto::Result::RESULT_NO_ERROR);
  116. response.set_apps_access_state(
  117. eche_app::proto::AppsAccessState::ACCESS_GRANTED);
  118. proto::ExoMessage message;
  119. *message.mutable_apps_access_state_response() = std::move(response);
  120. fake_connection_manager_->NotifyMessageReceived(message.SerializeAsString());
  121. proto::GetAppsAccessStateResponse actual_apps_state =
  122. GetLastAppsAccessState();
  123. EXPECT_EQ(1u, GetNumAppsAccessStateResponseCalls());
  124. EXPECT_EQ(0u, GetNumAppsSetupResponseCalls());
  125. EXPECT_EQ(0u, GetNumStatusChangeCalls());
  126. EXPECT_EQ(0u, GetNumAppsPolicyStateChangeCalls());
  127. EXPECT_EQ(eche_app::proto::Result::RESULT_NO_ERROR,
  128. actual_apps_state.result());
  129. EXPECT_EQ(eche_app::proto::AppsAccessState::ACCESS_GRANTED,
  130. actual_apps_state.apps_access_state());
  131. }
  132. TEST_F(EcheMessageReceiverImplTest, OnSendAppsSetupResponseReceived) {
  133. proto::SendAppsSetupResponse response;
  134. response.set_result(eche_app::proto::Result::RESULT_NO_ERROR);
  135. response.set_apps_access_state(
  136. eche_app::proto::AppsAccessState::ACCESS_GRANTED);
  137. proto::ExoMessage message;
  138. *message.mutable_apps_setup_response() = std::move(response);
  139. fake_connection_manager_->NotifyMessageReceived(message.SerializeAsString());
  140. proto::SendAppsSetupResponse actual_apps_setup_response =
  141. GetLastAppsSetupResponse();
  142. EXPECT_EQ(0u, GetNumAppsAccessStateResponseCalls());
  143. EXPECT_EQ(1u, GetNumAppsSetupResponseCalls());
  144. EXPECT_EQ(0u, GetNumStatusChangeCalls());
  145. EXPECT_EQ(0u, GetNumAppsPolicyStateChangeCalls());
  146. EXPECT_EQ(eche_app::proto::Result::RESULT_NO_ERROR,
  147. actual_apps_setup_response.result());
  148. EXPECT_EQ(eche_app::proto::AppsAccessState::ACCESS_GRANTED,
  149. actual_apps_setup_response.apps_access_state());
  150. }
  151. TEST_F(EcheMessageReceiverImplTest, OnStatusChangeReceived) {
  152. proto::StatusChange status_change;
  153. status_change.set_type(proto::StatusChangeType::TYPE_STREAM_START);
  154. proto::ExoMessage message;
  155. *message.mutable_status_change() = std::move(status_change);
  156. fake_connection_manager_->NotifyMessageReceived(message.SerializeAsString());
  157. proto::StatusChangeType status_change_type = GetLastStatusChangeType();
  158. EXPECT_EQ(0u, GetNumAppsAccessStateResponseCalls());
  159. EXPECT_EQ(0u, GetNumAppsSetupResponseCalls());
  160. EXPECT_EQ(1u, GetNumStatusChangeCalls());
  161. EXPECT_EQ(0u, GetNumAppsPolicyStateChangeCalls());
  162. EXPECT_EQ(proto::StatusChangeType::TYPE_STREAM_START, status_change_type);
  163. }
  164. TEST_F(EcheMessageReceiverImplTest, OnAppPolicyStateChangeReceived) {
  165. proto::PolicyStateChange policy_state_change;
  166. policy_state_change.set_app_policy_state(
  167. proto::AppStreamingPolicy::APP_POLICY_DISABLED);
  168. proto::ExoMessage message;
  169. *message.mutable_policy_state_change() = std::move(policy_state_change);
  170. fake_connection_manager_->NotifyMessageReceived(message.SerializeAsString());
  171. proto::AppStreamingPolicy app_policy_state = GetAppStreamingPolicyState();
  172. EXPECT_EQ(0u, GetNumAppsAccessStateResponseCalls());
  173. EXPECT_EQ(0u, GetNumAppsSetupResponseCalls());
  174. EXPECT_EQ(0u, GetNumStatusChangeCalls());
  175. EXPECT_EQ(1u, GetNumAppsPolicyStateChangeCalls());
  176. EXPECT_EQ(proto::AppStreamingPolicy::APP_POLICY_DISABLED, app_policy_state);
  177. }
  178. } // namespace eche_app
  179. } // namespace ash