| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "tools/battor_agent/battor_agent.h" | 5 #include "tools/battor_agent/battor_agent.h" |
| 6 | 6 |
| 7 #include "base/test/test_simple_task_runner.h" | 7 #include "base/test/test_simple_task_runner.h" |
| 8 #include "base/thread_task_runner_handle.h" | 8 #include "base/thread_task_runner_handle.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 MockBattOrConnection(BattOrConnection::Listener* listener) | 43 MockBattOrConnection(BattOrConnection::Listener* listener) |
| 44 : BattOrConnection(listener) {} | 44 : BattOrConnection(listener) {} |
| 45 ~MockBattOrConnection() override {} | 45 ~MockBattOrConnection() override {} |
| 46 | 46 |
| 47 MOCK_METHOD0(Open, void()); | 47 MOCK_METHOD0(Open, void()); |
| 48 MOCK_METHOD0(Close, void()); | 48 MOCK_METHOD0(Close, void()); |
| 49 MOCK_METHOD3(SendBytes, | 49 MOCK_METHOD3(SendBytes, |
| 50 void(BattOrMessageType type, | 50 void(BattOrMessageType type, |
| 51 const void* buffer, | 51 const void* buffer, |
| 52 size_t bytes_to_send)); | 52 size_t bytes_to_send)); |
| 53 MOCK_METHOD1(ReadBytes, void(size_t bytes_to_read)); | 53 MOCK_METHOD1(ReadMessage, void(size_t bytes_to_read)); |
| 54 MOCK_METHOD0(Flush, void()); | 54 MOCK_METHOD0(Flush, void()); |
| 55 | 55 |
| 56 private: | 56 private: |
| 57 DISALLOW_COPY_AND_ASSIGN(MockBattOrConnection); | 57 DISALLOW_COPY_AND_ASSIGN(MockBattOrConnection); |
| 58 }; | 58 }; |
| 59 | 59 |
| 60 } // namespace | 60 } // namespace |
| 61 | 61 |
| 62 // TestableBattOrAgent uses a fake BattOrConnection to be testable. | 62 // TestableBattOrAgent uses a fake BattOrConnection to be testable. |
| 63 class TestableBattOrAgent : public BattOrAgent { | 63 class TestableBattOrAgent : public BattOrAgent { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 | 121 |
| 122 if (end_state == BattOrAgentState::RESET_SENT) | 122 if (end_state == BattOrAgentState::RESET_SENT) |
| 123 return; | 123 return; |
| 124 | 124 |
| 125 GetAgent()->OnBytesSent(true); | 125 GetAgent()->OnBytesSent(true); |
| 126 GetTaskRunner()->RunUntilIdle(); | 126 GetTaskRunner()->RunUntilIdle(); |
| 127 | 127 |
| 128 if (end_state == BattOrAgentState::INIT_SENT) | 128 if (end_state == BattOrAgentState::INIT_SENT) |
| 129 return; | 129 return; |
| 130 | 130 |
| 131 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 131 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 132 AckToCharVector(kInitAck)); | 132 AckToCharVector(kInitAck)); |
| 133 GetTaskRunner()->RunUntilIdle(); | 133 GetTaskRunner()->RunUntilIdle(); |
| 134 | 134 |
| 135 if (end_state == BattOrAgentState::INIT_ACKED) | 135 if (end_state == BattOrAgentState::INIT_ACKED) |
| 136 return; | 136 return; |
| 137 | 137 |
| 138 GetAgent()->OnBytesSent(true); | 138 GetAgent()->OnBytesSent(true); |
| 139 GetTaskRunner()->RunUntilIdle(); | 139 GetTaskRunner()->RunUntilIdle(); |
| 140 | 140 |
| 141 if (end_state == BattOrAgentState::SET_GAIN_SENT) | 141 if (end_state == BattOrAgentState::SET_GAIN_SENT) |
| 142 return; | 142 return; |
| 143 | 143 |
| 144 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 144 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 145 AckToCharVector(kSetGainAck)); | 145 AckToCharVector(kSetGainAck)); |
| 146 GetTaskRunner()->RunUntilIdle(); | 146 GetTaskRunner()->RunUntilIdle(); |
| 147 | 147 |
| 148 if (end_state == BattOrAgentState::GAIN_ACKED) | 148 if (end_state == BattOrAgentState::GAIN_ACKED) |
| 149 return; | 149 return; |
| 150 | 150 |
| 151 GetAgent()->OnBytesSent(true); | 151 GetAgent()->OnBytesSent(true); |
| 152 GetTaskRunner()->RunUntilIdle(); | 152 GetTaskRunner()->RunUntilIdle(); |
| 153 | 153 |
| 154 if (end_state == BattOrAgentState::START_TRACING_SENT) | 154 if (end_state == BattOrAgentState::START_TRACING_SENT) |
| 155 return; | 155 return; |
| 156 | 156 |
| 157 // Make sure that we're actually forwarding to a state in the start tracing | 157 // Make sure that we're actually forwarding to a state in the start tracing |
| 158 // state machine. | 158 // state machine. |
| 159 DCHECK(end_state == BattOrAgentState::START_TRACING_COMPLETE); | 159 DCHECK(end_state == BattOrAgentState::START_TRACING_COMPLETE); |
| 160 | 160 |
| 161 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 161 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 162 AckToCharVector(kStartTracingAck)); | 162 AckToCharVector(kStartTracingAck)); |
| 163 GetTaskRunner()->RunUntilIdle(); | 163 GetTaskRunner()->RunUntilIdle(); |
| 164 } | 164 } |
| 165 | 165 |
| 166 TestableBattOrAgent* GetAgent() { return agent_.get(); } | 166 TestableBattOrAgent* GetAgent() { return agent_.get(); } |
| 167 | 167 |
| 168 scoped_refptr<base::TestSimpleTaskRunner> GetTaskRunner() { | 168 scoped_refptr<base::TestSimpleTaskRunner> GetTaskRunner() { |
| 169 return task_runner_; | 169 return task_runner_; |
| 170 } | 170 } |
| 171 | 171 |
| 172 BattOrError GetStartTracingError() { return start_tracing_error_; } | 172 BattOrError GetStartTracingError() { return start_tracing_error_; } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 194 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, | 194 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, |
| 195 BufferEq(&reset_msg, sizeof(reset_msg)), sizeof(reset_msg))); | 195 BufferEq(&reset_msg, sizeof(reset_msg)), sizeof(reset_msg))); |
| 196 | 196 |
| 197 EXPECT_CALL(*GetAgent()->GetConnection(), Flush()); | 197 EXPECT_CALL(*GetAgent()->GetConnection(), Flush()); |
| 198 BattOrControlMessage init_msg{BATTOR_CONTROL_MESSAGE_TYPE_INIT, 0, 0}; | 198 BattOrControlMessage init_msg{BATTOR_CONTROL_MESSAGE_TYPE_INIT, 0, 0}; |
| 199 EXPECT_CALL( | 199 EXPECT_CALL( |
| 200 *GetAgent()->GetConnection(), | 200 *GetAgent()->GetConnection(), |
| 201 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, | 201 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, |
| 202 BufferEq(&init_msg, sizeof(init_msg)), sizeof(init_msg))); | 202 BufferEq(&init_msg, sizeof(init_msg)), sizeof(init_msg))); |
| 203 | 203 |
| 204 EXPECT_CALL(*GetAgent()->GetConnection(), ReadBytes(sizeof(kInitAck))); | 204 EXPECT_CALL(*GetAgent()->GetConnection(), ReadMessage(sizeof(kInitAck))); |
| 205 | 205 |
| 206 BattOrControlMessage set_gain_msg{BATTOR_CONTROL_MESSAGE_TYPE_SET_GAIN, | 206 BattOrControlMessage set_gain_msg{BATTOR_CONTROL_MESSAGE_TYPE_SET_GAIN, |
| 207 BATTOR_GAIN_LOW, 0}; | 207 BATTOR_GAIN_LOW, 0}; |
| 208 EXPECT_CALL(*GetAgent()->GetConnection(), | 208 EXPECT_CALL(*GetAgent()->GetConnection(), |
| 209 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, | 209 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, |
| 210 BufferEq(&set_gain_msg, sizeof(set_gain_msg)), | 210 BufferEq(&set_gain_msg, sizeof(set_gain_msg)), |
| 211 sizeof(set_gain_msg))); | 211 sizeof(set_gain_msg))); |
| 212 | 212 |
| 213 EXPECT_CALL(*GetAgent()->GetConnection(), ReadBytes(sizeof(kSetGainAck))); | 213 EXPECT_CALL(*GetAgent()->GetConnection(), ReadMessage(sizeof(kSetGainAck))); |
| 214 | 214 |
| 215 BattOrControlMessage start_tracing_msg{ | 215 BattOrControlMessage start_tracing_msg{ |
| 216 BATTOR_CONTROL_MESSAGE_TYPE_START_SAMPLING_SD, 0, 0}; | 216 BATTOR_CONTROL_MESSAGE_TYPE_START_SAMPLING_SD, 0, 0}; |
| 217 EXPECT_CALL(*GetAgent()->GetConnection(), | 217 EXPECT_CALL(*GetAgent()->GetConnection(), |
| 218 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, | 218 SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, |
| 219 BufferEq(&start_tracing_msg, sizeof(start_tracing_msg)), | 219 BufferEq(&start_tracing_msg, sizeof(start_tracing_msg)), |
| 220 sizeof(start_tracing_msg))); | 220 sizeof(start_tracing_msg))); |
| 221 | 221 |
| 222 EXPECT_CALL(*GetAgent()->GetConnection(), | 222 EXPECT_CALL(*GetAgent()->GetConnection(), |
| 223 ReadBytes(sizeof(kStartTracingAck))); | 223 ReadMessage(sizeof(kStartTracingAck))); |
| 224 | 224 |
| 225 RunStartTracingTo(BattOrAgentState::START_TRACING_COMPLETE); | 225 RunStartTracingTo(BattOrAgentState::START_TRACING_COMPLETE); |
| 226 EXPECT_TRUE(IsStartTracingComplete()); | 226 EXPECT_TRUE(IsStartTracingComplete()); |
| 227 EXPECT_EQ(BATTOR_ERROR_NONE, GetStartTracingError()); | 227 EXPECT_EQ(BATTOR_ERROR_NONE, GetStartTracingError()); |
| 228 } | 228 } |
| 229 | 229 |
| 230 TEST_F(BattOrAgentTest, StartTracingFailsWithoutConnection) { | 230 TEST_F(BattOrAgentTest, StartTracingFailsWithoutConnection) { |
| 231 GetAgent()->StartTracing(); | 231 GetAgent()->StartTracing(); |
| 232 GetTaskRunner()->RunUntilIdle(); | 232 GetTaskRunner()->RunUntilIdle(); |
| 233 | 233 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 251 RunStartTracingTo(BattOrAgentState::RESET_SENT); | 251 RunStartTracingTo(BattOrAgentState::RESET_SENT); |
| 252 GetAgent()->OnBytesSent(false); | 252 GetAgent()->OnBytesSent(false); |
| 253 GetTaskRunner()->RunUntilIdle(); | 253 GetTaskRunner()->RunUntilIdle(); |
| 254 | 254 |
| 255 EXPECT_TRUE(IsStartTracingComplete()); | 255 EXPECT_TRUE(IsStartTracingComplete()); |
| 256 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); | 256 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 TEST_F(BattOrAgentTest, StartTracingFailsIfInitAckReadFails) { | 259 TEST_F(BattOrAgentTest, StartTracingFailsIfInitAckReadFails) { |
| 260 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 260 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
| 261 GetAgent()->OnBytesRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); | 261 GetAgent()->OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); |
| 262 GetTaskRunner()->RunUntilIdle(); | 262 GetTaskRunner()->RunUntilIdle(); |
| 263 | 263 |
| 264 EXPECT_TRUE(IsStartTracingComplete()); | 264 EXPECT_TRUE(IsStartTracingComplete()); |
| 265 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); | 265 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); |
| 266 } | 266 } |
| 267 | 267 |
| 268 TEST_F(BattOrAgentTest, StartTracingFailsIfInitWrongAckRead) { | 268 TEST_F(BattOrAgentTest, StartTracingFailsIfInitWrongAckRead) { |
| 269 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 269 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
| 270 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 270 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 271 AckToCharVector(kStartTracingAck)); | 271 AckToCharVector(kStartTracingAck)); |
| 272 GetTaskRunner()->RunUntilIdle(); | 272 GetTaskRunner()->RunUntilIdle(); |
| 273 | 273 |
| 274 EXPECT_TRUE(IsStartTracingComplete()); | 274 EXPECT_TRUE(IsStartTracingComplete()); |
| 275 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); | 275 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); |
| 276 } | 276 } |
| 277 | 277 |
| 278 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainSendFails) { | 278 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainSendFails) { |
| 279 RunStartTracingTo(BattOrAgentState::RESET_SENT); | 279 RunStartTracingTo(BattOrAgentState::RESET_SENT); |
| 280 GetAgent()->OnBytesSent(false); | 280 GetAgent()->OnBytesSent(false); |
| 281 GetTaskRunner()->RunUntilIdle(); | 281 GetTaskRunner()->RunUntilIdle(); |
| 282 | 282 |
| 283 EXPECT_TRUE(IsStartTracingComplete()); | 283 EXPECT_TRUE(IsStartTracingComplete()); |
| 284 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); | 284 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); |
| 285 } | 285 } |
| 286 | 286 |
| 287 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainAckReadFails) { | 287 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainAckReadFails) { |
| 288 RunStartTracingTo(BattOrAgentState::SET_GAIN_SENT); | 288 RunStartTracingTo(BattOrAgentState::SET_GAIN_SENT); |
| 289 GetAgent()->OnBytesRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); | 289 GetAgent()->OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); |
| 290 GetTaskRunner()->RunUntilIdle(); | 290 GetTaskRunner()->RunUntilIdle(); |
| 291 | 291 |
| 292 EXPECT_TRUE(IsStartTracingComplete()); | 292 EXPECT_TRUE(IsStartTracingComplete()); |
| 293 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); | 293 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); |
| 294 } | 294 } |
| 295 | 295 |
| 296 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainWrongAckRead) { | 296 TEST_F(BattOrAgentTest, StartTracingFailsIfSetGainWrongAckRead) { |
| 297 RunStartTracingTo(BattOrAgentState::SET_GAIN_SENT); | 297 RunStartTracingTo(BattOrAgentState::SET_GAIN_SENT); |
| 298 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 298 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 299 AckToCharVector(kStartTracingAck)); | 299 AckToCharVector(kStartTracingAck)); |
| 300 GetTaskRunner()->RunUntilIdle(); | 300 GetTaskRunner()->RunUntilIdle(); |
| 301 | 301 |
| 302 EXPECT_TRUE(IsStartTracingComplete()); | 302 EXPECT_TRUE(IsStartTracingComplete()); |
| 303 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); | 303 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); |
| 304 } | 304 } |
| 305 | 305 |
| 306 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingSendFails) { | 306 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingSendFails) { |
| 307 RunStartTracingTo(BattOrAgentState::RESET_SENT); | 307 RunStartTracingTo(BattOrAgentState::RESET_SENT); |
| 308 GetAgent()->OnBytesSent(false); | 308 GetAgent()->OnBytesSent(false); |
| 309 GetTaskRunner()->RunUntilIdle(); | 309 GetTaskRunner()->RunUntilIdle(); |
| 310 | 310 |
| 311 EXPECT_TRUE(IsStartTracingComplete()); | 311 EXPECT_TRUE(IsStartTracingComplete()); |
| 312 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); | 312 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetStartTracingError()); |
| 313 } | 313 } |
| 314 | 314 |
| 315 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingAckReadFails) { | 315 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingAckReadFails) { |
| 316 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); | 316 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); |
| 317 GetAgent()->OnBytesRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); | 317 GetAgent()->OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); |
| 318 GetTaskRunner()->RunUntilIdle(); | 318 GetTaskRunner()->RunUntilIdle(); |
| 319 | 319 |
| 320 EXPECT_TRUE(IsStartTracingComplete()); | 320 EXPECT_TRUE(IsStartTracingComplete()); |
| 321 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); | 321 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetStartTracingError()); |
| 322 } | 322 } |
| 323 | 323 |
| 324 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingWrongAckRead) { | 324 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingWrongAckRead) { |
| 325 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); | 325 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); |
| 326 GetAgent()->OnBytesRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 326 GetAgent()->OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 327 AckToCharVector(kInitAck)); | 327 AckToCharVector(kInitAck)); |
| 328 GetTaskRunner()->RunUntilIdle(); | 328 GetTaskRunner()->RunUntilIdle(); |
| 329 | 329 |
| 330 EXPECT_TRUE(IsStartTracingComplete()); | 330 EXPECT_TRUE(IsStartTracingComplete()); |
| 331 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); | 331 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetStartTracingError()); |
| 332 } | 332 } |
| 333 | 333 |
| 334 } // namespace battor | 334 } // namespace battor |
| OLD | NEW |