Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 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 | |
| 5 #include "chromeos/components/tether/message_wrapper.h" | |
| 6 | |
| 7 #include <sstream> | |
| 8 | |
| 9 #include "base/base64url.h" | |
| 10 #include "base/macros.h" | |
| 11 #include "chromeos/components/tether/proto/tether.pb.h" | |
| 12 #include "testing/gmock/include/gmock/gmock.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | |
| 14 | |
| 15 namespace chromeos { | |
| 16 | |
| 17 namespace tether { | |
| 18 | |
| 19 namespace { | |
| 20 | |
| 21 DeviceStatus CreateFakeDeviceStatus() { | |
| 22 WifiStatus wifi_status; | |
| 23 wifi_status.set_status_code( | |
| 24 WifiStatus_StatusCode::WifiStatus_StatusCode_CONNECTED); | |
| 25 wifi_status.set_ssid("Google A"); | |
| 26 | |
| 27 DeviceStatus device_status; | |
| 28 device_status.set_battery_percentage(75); | |
| 29 device_status.set_cell_provider("Google Fi"); | |
| 30 device_status.set_connection_strength(4); | |
| 31 device_status.mutable_wifi_status()->CopyFrom(wifi_status); | |
| 32 | |
| 33 return device_status; | |
| 34 } | |
| 35 | |
| 36 void VerifyProtoConversion(const google::protobuf::MessageLite* proto, | |
| 37 const MessageWrapper& wrapper, | |
| 38 const MessageType& expected_message_type) { | |
| 39 std::string raw_message = wrapper.ToRawMessage(); | |
| 40 EXPECT_TRUE(raw_message.length() > 0); | |
| 41 | |
| 42 std::unique_ptr<MessageWrapper> wrapper_from_raw_message = | |
| 43 MessageWrapper::FromRawMessage(raw_message); | |
| 44 EXPECT_TRUE(wrapper_from_raw_message); | |
| 45 EXPECT_EQ(expected_message_type, wrapper_from_raw_message->GetMessageType()); | |
| 46 EXPECT_EQ(proto->SerializeAsString(), | |
| 47 wrapper_from_raw_message->GetProto()->SerializeAsString()); | |
| 48 } | |
| 49 | |
| 50 } // namespace | |
| 51 | |
| 52 class MessageWrapperTest : public testing::Test { | |
| 53 protected: | |
| 54 MessageWrapperTest() {} | |
| 55 | |
| 56 private: | |
| 57 DISALLOW_COPY_AND_ASSIGN(MessageWrapperTest); | |
| 58 }; | |
| 59 | |
| 60 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_ConnectTetheringRequest) { | |
| 61 ConnectTetheringRequest request; | |
| 62 | |
| 63 MessageWrapper wrapper(request); | |
|
Ryan Hansberry
2017/02/17 02:29:07
Constructing a MessageWrapper is common to all of
Kyle Horimoto
2017/02/17 20:05:04
It's not a good idea to do that. MessageWrapper's
| |
| 64 VerifyProtoConversion(&request, wrapper, | |
| 65 MessageType::CONNECT_TETHERING_REQUEST); | |
| 66 } | |
| 67 | |
| 68 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_ConnectTetheringResponse) { | |
| 69 ConnectTetheringResponse response; | |
| 70 response.set_ssid("Instant Tethering 123456"); | |
| 71 response.set_password("password"); | |
| 72 response.set_response_code(ConnectTetheringResponse_ResponseCode:: | |
| 73 ConnectTetheringResponse_ResponseCode_SUCCESS); | |
| 74 response.mutable_device_status()->CopyFrom(CreateFakeDeviceStatus()); | |
| 75 | |
| 76 MessageWrapper wrapper(response); | |
| 77 VerifyProtoConversion(&response, wrapper, | |
| 78 MessageType::CONNECT_TETHERING_RESPONSE); | |
| 79 } | |
| 80 | |
| 81 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_DisconnectTetheringRequest) { | |
| 82 DisconnectTetheringRequest request; | |
| 83 | |
| 84 MessageWrapper wrapper(request); | |
| 85 VerifyProtoConversion(&request, wrapper, | |
| 86 MessageType::DISCONNECT_TETHERING_REQUEST); | |
| 87 } | |
| 88 | |
| 89 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_KeepAliveTickle) { | |
| 90 KeepAliveTickle tickle; | |
| 91 | |
| 92 MessageWrapper wrapper(tickle); | |
| 93 VerifyProtoConversion(&tickle, wrapper, MessageType::KEEP_ALIVE_TICKLE); | |
| 94 } | |
| 95 | |
| 96 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_TetherAvailabilityRequest) { | |
| 97 TetherAvailabilityRequest request; | |
| 98 | |
| 99 MessageWrapper wrapper(request); | |
| 100 VerifyProtoConversion(&request, wrapper, | |
| 101 MessageType::TETHER_AVAILABILITY_REQUEST); | |
| 102 } | |
| 103 | |
| 104 TEST_F(MessageWrapperTest, TestToAndFromRawMessage_TetherAvailabilityResponse) { | |
| 105 TetherAvailabilityResponse response; | |
| 106 response.set_response_code( | |
| 107 TetherAvailabilityResponse_ResponseCode:: | |
| 108 TetherAvailabilityResponse_ResponseCode_TETHER_AVAILABLE); | |
| 109 response.mutable_device_status()->CopyFrom(CreateFakeDeviceStatus()); | |
| 110 | |
| 111 MessageWrapper wrapper(response); | |
| 112 VerifyProtoConversion(&response, wrapper, | |
| 113 MessageType::TETHER_AVAILABILITY_RESPONSE); | |
| 114 } | |
| 115 | |
| 116 TEST_F(MessageWrapperTest, TestHandleInvalidJson) { | |
| 117 EXPECT_FALSE(MessageWrapper::FromRawMessage("not JSON")); | |
| 118 } | |
| 119 | |
| 120 TEST_F(MessageWrapperTest, TestHandleJsonWithoutType) { | |
| 121 ConnectTetheringRequest request; | |
| 122 std::string encoded_message; | |
| 123 base::Base64UrlEncode(request.SerializeAsString(), | |
| 124 base::Base64UrlEncodePolicy::INCLUDE_PADDING, | |
| 125 &encoded_message); | |
| 126 | |
| 127 std::stringstream ss; | |
| 128 ss << "{data: \"" << encoded_message << "\"}"; | |
|
Ryan Hansberry
2017/02/17 02:29:07
I think JSON keys are wrapped in quotes too -- ple
Kyle Horimoto
2017/02/17 20:05:04
Done.
| |
| 129 | |
| 130 EXPECT_FALSE(MessageWrapper::FromRawMessage(ss.str())); | |
| 131 } | |
| 132 | |
| 133 TEST_F(MessageWrapperTest, TestHandleJsonWithoutData) { | |
| 134 EXPECT_FALSE(MessageWrapper::FromRawMessage("{type: 1}")); | |
| 135 } | |
| 136 | |
| 137 TEST_F(MessageWrapperTest, TestHandleJsonWithoutTypeOrData) { | |
| 138 EXPECT_FALSE(MessageWrapper::FromRawMessage("{}")); | |
| 139 } | |
| 140 | |
| 141 TEST_F(MessageWrapperTest, TestHandleDataNotEncodedWithBase64) { | |
| 142 ConnectTetheringRequest request; | |
| 143 | |
| 144 std::stringstream ss; | |
| 145 ss << "{type: " << static_cast<int>(MessageType::CONNECT_TETHERING_REQUEST) | |
| 146 << ", data: \"" | |
| 147 << request.SerializeAsString() // Do not convert to base-64. | |
| 148 << "\"}"; | |
| 149 | |
| 150 EXPECT_FALSE(MessageWrapper::FromRawMessage(ss.str())); | |
| 151 } | |
| 152 | |
|
Ryan Hansberry
2017/02/17 02:29:07
It's a PITA, but do you see any value adding a san
Kyle Horimoto
2017/02/17 20:05:04
Done.
| |
| 153 } // namespace tether | |
|
Ryan Hansberry
2017/02/17 02:29:07
Please add test that makes sure this works when th
Kyle Horimoto
2017/02/17 20:05:04
Done.
| |
| 154 | |
| 155 } // namespace cryptauth | |
| OLD | NEW |