remote_status_update_unittest.cc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // Copyright 2014 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/components/proximity_auth/remote_status_update.h"
  5. #include "base/json/json_reader.h"
  6. #include "base/values.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace proximity_auth {
  9. namespace {
  10. // Parses the |json| into a RemoteStatusUpdate instance.
  11. std::unique_ptr<RemoteStatusUpdate> ParseJson(const std::string& json) {
  12. absl::optional<base::Value> dict = base::JSONReader::Read(json);
  13. return RemoteStatusUpdate::Deserialize(dict->GetDict());
  14. }
  15. } // namespace
  16. // Verify that all valid values can be parsed.
  17. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_Valid_UserPresent) {
  18. const char kValidJson[] =
  19. R"({
  20. "type": "status_update",
  21. "user_presence": "present",
  22. "secure_screen_lock": "enabled",
  23. "trust_agent": "enabled"
  24. })";
  25. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kValidJson);
  26. ASSERT_TRUE(parsed_update);
  27. EXPECT_EQ(USER_PRESENT, parsed_update->user_presence);
  28. EXPECT_EQ(SECURE_SCREEN_LOCK_ENABLED,
  29. parsed_update->secure_screen_lock_state);
  30. EXPECT_EQ(TRUST_AGENT_ENABLED, parsed_update->trust_agent_state);
  31. }
  32. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_Valid_UserAbsent) {
  33. const char kValidJson[] =
  34. R"({
  35. "type": "status_update",
  36. "user_presence": "absent",
  37. "secure_screen_lock": "disabled",
  38. "trust_agent": "disabled"
  39. })";
  40. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kValidJson);
  41. ASSERT_TRUE(parsed_update);
  42. EXPECT_EQ(USER_ABSENT, parsed_update->user_presence);
  43. EXPECT_EQ(SECURE_SCREEN_LOCK_DISABLED,
  44. parsed_update->secure_screen_lock_state);
  45. EXPECT_EQ(TRUST_AGENT_DISABLED, parsed_update->trust_agent_state);
  46. }
  47. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_Valid_UserSecondary) {
  48. const char kValidJson[] =
  49. R"({
  50. "type": "status_update",
  51. "user_presence": "secondary",
  52. "secure_screen_lock": "disabled",
  53. "trust_agent": "disabled"
  54. })";
  55. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kValidJson);
  56. ASSERT_TRUE(parsed_update);
  57. EXPECT_EQ(USER_PRESENCE_SECONDARY, parsed_update->user_presence);
  58. EXPECT_EQ(SECURE_SCREEN_LOCK_DISABLED,
  59. parsed_update->secure_screen_lock_state);
  60. EXPECT_EQ(TRUST_AGENT_DISABLED, parsed_update->trust_agent_state);
  61. }
  62. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_Valid_UserBackground) {
  63. const char kValidJson[] =
  64. R"({
  65. "type": "status_update",
  66. "user_presence": "background",
  67. "secure_screen_lock": "disabled",
  68. "trust_agent": "disabled"
  69. })";
  70. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kValidJson);
  71. ASSERT_TRUE(parsed_update);
  72. EXPECT_EQ(USER_PRESENCE_BACKGROUND, parsed_update->user_presence);
  73. EXPECT_EQ(SECURE_SCREEN_LOCK_DISABLED,
  74. parsed_update->secure_screen_lock_state);
  75. EXPECT_EQ(TRUST_AGENT_DISABLED, parsed_update->trust_agent_state);
  76. }
  77. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_Valid_Unknown) {
  78. const char kValidJson[] =
  79. R"({
  80. "type": "status_update",
  81. "user_presence": "unknown",
  82. "secure_screen_lock": "unknown",
  83. "trust_agent": "unsupported"
  84. })";
  85. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kValidJson);
  86. ASSERT_TRUE(parsed_update);
  87. EXPECT_EQ(USER_PRESENCE_UNKNOWN, parsed_update->user_presence);
  88. EXPECT_EQ(SECURE_SCREEN_LOCK_STATE_UNKNOWN,
  89. parsed_update->secure_screen_lock_state);
  90. EXPECT_EQ(TRUST_AGENT_UNSUPPORTED, parsed_update->trust_agent_state);
  91. }
  92. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_MissingUserPresence) {
  93. const char kJson[] =
  94. R"({
  95. "type": "status_update",
  96. "secure_screen_lock": "enabled",
  97. "trust_agent": "enabled"
  98. })";
  99. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  100. EXPECT_FALSE(parsed_update);
  101. }
  102. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_MissingSecureScreenLock) {
  103. const char kJson[] =
  104. R"({
  105. "type": "status_update",
  106. "user_presence": "present",
  107. "trust_agent": "enabled"
  108. })";
  109. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  110. EXPECT_FALSE(parsed_update);
  111. }
  112. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_MissingTrustAgent) {
  113. const char kJson[] =
  114. R"({
  115. "type": "status_update",
  116. "user_presence": "present",
  117. "secure_screen_lock": "enabled"
  118. })";
  119. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  120. EXPECT_FALSE(parsed_update);
  121. }
  122. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_InvalidType) {
  123. const char kJson[] =
  124. R"({
  125. "type": "garbage",
  126. "user_presence": "present",
  127. "secure_screen_lock": "enabled",
  128. "trust_agent": "enabled"
  129. })";
  130. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  131. EXPECT_FALSE(parsed_update);
  132. }
  133. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_InvalidPresence) {
  134. const char kJson[] =
  135. R"({
  136. "type": "status_update",
  137. "user_presence": "garbage",
  138. "secure_screen_lock": "enabled",
  139. "trust_agent": "enabled"
  140. })";
  141. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  142. EXPECT_FALSE(parsed_update);
  143. }
  144. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_InvalidLock) {
  145. const char kJson[] =
  146. R"({
  147. "type": "status_update",
  148. "user_presence": "present",
  149. "secure_screen_lock": "garbage",
  150. "trust_agent": "enabled"
  151. })";
  152. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  153. EXPECT_FALSE(parsed_update);
  154. }
  155. TEST(ProximityAuthRemoteStatusUpdateTest, Deserialize_InvalidAgent) {
  156. const char kJson[] =
  157. R"({
  158. "type": "status_update",
  159. "user_presence": "present",
  160. "secure_screen_lock": "enabled",
  161. "trust_agent": "garbage"
  162. })";
  163. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  164. EXPECT_FALSE(parsed_update);
  165. }
  166. // Verify that extra fields do not prevent parsing. This provides
  167. // forward-compatibility.
  168. TEST(ProximityAuthRemoteStatusUpdateTest,
  169. Deserialize_ValidStatusWithExtraFields) {
  170. const char kJson[] =
  171. R"({
  172. "type": "status_update",
  173. "user_presence": "present",
  174. "secure_screen_lock": "enabled",
  175. "trust_agent": "enabled",
  176. "secret_sauce": "chipotle"
  177. })";
  178. std::unique_ptr<RemoteStatusUpdate> parsed_update = ParseJson(kJson);
  179. ASSERT_TRUE(parsed_update);
  180. EXPECT_EQ(USER_PRESENT, parsed_update->user_presence);
  181. EXPECT_EQ(SECURE_SCREEN_LOCK_ENABLED,
  182. parsed_update->secure_screen_lock_state);
  183. EXPECT_EQ(TRUST_AGENT_ENABLED, parsed_update->trust_agent_state);
  184. }
  185. } // namespace proximity_auth