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 <memory> | 5 #include <memory> |
6 | 6 |
7 #include "tools/battor_agent/battor_agent.h" | 7 #include "tools/battor_agent/battor_agent.h" |
8 | 8 |
9 #include "base/test/test_simple_task_runner.h" | 9 #include "base/test/test_simple_task_runner.h" |
10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 command_error_ = error; | 113 command_error_ = error; |
114 trace_ = trace; | 114 trace_ = trace; |
115 } | 115 } |
116 | 116 |
117 void OnRecordClockSyncMarkerComplete(BattOrError error) override { | 117 void OnRecordClockSyncMarkerComplete(BattOrError error) override { |
118 is_command_complete_ = true; | 118 is_command_complete_ = true; |
119 command_error_ = error; | 119 command_error_ = error; |
120 } | 120 } |
121 | 121 |
122 void OnGetFirmwareGitHashComplete(const std::string& firmware_git_hash, | 122 void OnGetFirmwareGitHashComplete(const std::string& firmware_git_hash, |
123 BattOrError error) override { | 123 BattOrError error) override { |
124 is_command_complete_ = true; | 124 is_command_complete_ = true; |
125 command_error_ = error; | 125 command_error_ = error; |
126 firmware_git_hash_ = firmware_git_hash; | 126 firmware_git_hash_ = firmware_git_hash; |
127 } | 127 } |
128 | 128 |
129 void OnBytesSent(bool success) { | 129 void OnBytesSent(bool success) { |
130 agent_->OnBytesSent(success); | 130 agent_->OnBytesSent(success); |
131 task_runner_->RunUntilIdle(); | 131 task_runner_->RunUntilIdle(); |
132 } | 132 } |
133 | 133 |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 } | 394 } |
395 | 395 |
396 TEST_F(BattOrAgentTest, StartTracingFailsIfInitAckReadFails) { | 396 TEST_F(BattOrAgentTest, StartTracingFailsIfInitAckReadFails) { |
397 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 397 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
398 | 398 |
399 for (int i = 0; i < 21; i++) { | 399 for (int i = 0; i < 21; i++) { |
400 OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); | 400 OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); |
401 | 401 |
402 // Bytes will be sent because INIT will be retried. | 402 // Bytes will be sent because INIT will be retried. |
403 OnBytesSent(true); | 403 OnBytesSent(true); |
404 } | 404 } |
405 | 405 |
406 EXPECT_TRUE(IsCommandComplete()); | 406 EXPECT_TRUE(IsCommandComplete()); |
407 EXPECT_EQ(BATTOR_ERROR_TOO_MANY_INIT_RETRIES, GetCommandError()); | 407 EXPECT_EQ(BATTOR_ERROR_TOO_MANY_INIT_RETRIES, GetCommandError()); |
408 } | 408 } |
409 | 409 |
410 TEST_F(BattOrAgentTest, StartTracingFailsIfInitWrongAckRead) { | 410 TEST_F(BattOrAgentTest, StartTracingFailsIfInitWrongAckRead) { |
411 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 411 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
412 | 412 |
413 for (int i = 0; i < 21; i++) { | 413 for (int i = 0; i < 21; i++) { |
414 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, | 414 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 } | 448 } |
449 | 449 |
450 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingSendFails) { | 450 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingSendFails) { |
451 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 451 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
452 OnBytesSent(false); | 452 OnBytesSent(false); |
453 | 453 |
454 EXPECT_TRUE(IsCommandComplete()); | 454 EXPECT_TRUE(IsCommandComplete()); |
455 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetCommandError()); | 455 EXPECT_EQ(BATTOR_ERROR_SEND_ERROR, GetCommandError()); |
456 } | 456 } |
457 | 457 |
458 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingAckReadFails) { | 458 TEST_F(BattOrAgentTest, StartTracingSucceedsAfterRetriesIfWrongAckRead) { |
459 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); | 459 RunStartTracingTo(BattOrAgentState::CONNECTED); |
460 OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); | 460 |
| 461 for (int i = 0; i < 4; i++) { |
| 462 // Go through the correct init sequence, but give the wrong ack to |
| 463 // START_TRACING. |
| 464 OnBytesSent(true); |
| 465 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 466 ToCharVector(kInitAck)); |
| 467 OnBytesSent(true); |
| 468 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 469 ToCharVector(kSetGainAck)); |
| 470 OnBytesSent(true); |
| 471 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 472 ToCharVector(kInitAck)); |
| 473 } |
| 474 |
| 475 // On the last attempt, give the correct ack to START_TRACING. |
| 476 OnBytesSent(true); |
| 477 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, ToCharVector(kInitAck)); |
| 478 OnBytesSent(true); |
| 479 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 480 ToCharVector(kSetGainAck)); |
| 481 OnBytesSent(true); |
| 482 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 483 ToCharVector(kStartTracingAck)); |
461 | 484 |
462 EXPECT_TRUE(IsCommandComplete()); | 485 EXPECT_TRUE(IsCommandComplete()); |
463 EXPECT_EQ(BATTOR_ERROR_RECEIVE_ERROR, GetCommandError()); | 486 EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); |
464 } | 487 } |
465 | 488 |
466 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingWrongAckRead) { | 489 TEST_F(BattOrAgentTest, StartTracingSucceedsAfterRetriesWithReadFailure) { |
467 RunStartTracingTo(BattOrAgentState::START_TRACING_SENT); | 490 RunStartTracingTo(BattOrAgentState::CONNECTED); |
| 491 |
| 492 for (int i = 0; i < 4; i++) { |
| 493 // Go through the correct init sequence, but indicate that we failed to read |
| 494 // the START_TRACING ack. |
| 495 OnBytesSent(true); |
| 496 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 497 ToCharVector(kInitAck)); |
| 498 OnBytesSent(true); |
| 499 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 500 ToCharVector(kSetGainAck)); |
| 501 OnBytesSent(true); |
| 502 OnMessageRead(false, BATTOR_MESSAGE_TYPE_CONTROL_ACK, nullptr); |
| 503 } |
| 504 |
| 505 // On the last attempt, give the correct ack to START_TRACING. |
| 506 OnBytesSent(true); |
468 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, ToCharVector(kInitAck)); | 507 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, ToCharVector(kInitAck)); |
| 508 OnBytesSent(true); |
| 509 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 510 ToCharVector(kSetGainAck)); |
| 511 OnBytesSent(true); |
| 512 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 513 ToCharVector(kStartTracingAck)); |
469 | 514 |
470 EXPECT_TRUE(IsCommandComplete()); | 515 EXPECT_TRUE(IsCommandComplete()); |
471 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetCommandError()); | 516 EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); |
| 517 } |
| 518 |
| 519 TEST_F(BattOrAgentTest, StartTracingFailsIfStartTracingWrongAckReadTooMuch) { |
| 520 RunStartTracingTo(BattOrAgentState::CONNECTED); |
| 521 |
| 522 for (int i = 0; i < 5; i++) { |
| 523 // Go through the correct init sequence, but give the wrong ack to |
| 524 // START_TRACING. |
| 525 OnBytesSent(true); |
| 526 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 527 ToCharVector(kInitAck)); |
| 528 OnBytesSent(true); |
| 529 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 530 ToCharVector(kSetGainAck)); |
| 531 OnBytesSent(true); |
| 532 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL_ACK, |
| 533 ToCharVector(kInitAck)); |
| 534 } |
| 535 |
| 536 EXPECT_TRUE(IsCommandComplete()); |
| 537 EXPECT_EQ(BATTOR_ERROR_TOO_MANY_START_TRACING_RETRIES, GetCommandError()); |
472 } | 538 } |
473 | 539 |
474 TEST_F(BattOrAgentTest, StartTracingSucceedsWithOneInitFailure) { | 540 TEST_F(BattOrAgentTest, StartTracingSucceedsWithOneInitFailure) { |
475 RunStartTracingTo(BattOrAgentState::INIT_SENT); | 541 RunStartTracingTo(BattOrAgentState::INIT_SENT); |
476 | 542 |
477 // Send some samples instead of an INIT ACK. This will force an INIT retry. | 543 // Send some samples instead of an INIT ACK. This will force an INIT retry. |
478 BattOrFrameHeader frame_header{1, 3 * sizeof(RawBattOrSample)}; | 544 BattOrFrameHeader frame_header{1, 3 * sizeof(RawBattOrSample)}; |
479 RawBattOrSample frame[] = { | 545 RawBattOrSample frame[] = { |
480 RawBattOrSample{1, 1}, RawBattOrSample{2, 2}, RawBattOrSample{3, 3}, | 546 RawBattOrSample{1, 1}, RawBattOrSample{2, 2}, RawBattOrSample{3, 3}, |
481 }; | 547 }; |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 | 946 |
881 EXPECT_TRUE(IsCommandComplete()); | 947 EXPECT_TRUE(IsCommandComplete()); |
882 EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); | 948 EXPECT_EQ(BATTOR_ERROR_NONE, GetCommandError()); |
883 EXPECT_EQ( | 949 EXPECT_EQ( |
884 "# BattOr\n# voltage_range [-2401.2, 2398.8] mV\n# " | 950 "# BattOr\n# voltage_range [-2401.2, 2398.8] mV\n# " |
885 "current_range [-1200.6, 1199.4] mA\n" | 951 "current_range [-1200.6, 1199.4] mA\n" |
886 "# sample_rate 1000 Hz, gain 1.0x\n" | 952 "# sample_rate 1000 Hz, gain 1.0x\n" |
887 "0.00 0.0 0.0 <MY_MARKER>\n" | 953 "0.00 0.0 0.0 <MY_MARKER>\n" |
888 "1.00 0.6 1.2\n", | 954 "1.00 0.6 1.2\n", |
889 GetTrace()); | 955 GetTrace()); |
890 | |
891 } | 956 } |
892 | 957 |
893 TEST_F(BattOrAgentTest, RecordClockSyncMarkerFailsWithoutConnection) { | 958 TEST_F(BattOrAgentTest, RecordClockSyncMarkerFailsWithoutConnection) { |
894 GetAgent()->RecordClockSyncMarker("my_marker"); | 959 GetAgent()->RecordClockSyncMarker("my_marker"); |
895 GetTaskRunner()->RunUntilIdle(); | 960 GetTaskRunner()->RunUntilIdle(); |
896 | 961 |
897 GetAgent()->OnConnectionOpened(false); | 962 GetAgent()->OnConnectionOpened(false); |
898 GetTaskRunner()->RunUntilIdle(); | 963 GetTaskRunner()->RunUntilIdle(); |
899 | 964 |
900 EXPECT_TRUE(IsCommandComplete()); | 965 EXPECT_TRUE(IsCommandComplete()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 RunGetFirmwareGitHashTo(BattOrAgentState::GIT_FIRMWARE_HASH_REQUEST_SENT); | 1021 RunGetFirmwareGitHashTo(BattOrAgentState::GIT_FIRMWARE_HASH_REQUEST_SENT); |
957 | 1022 |
958 uint32_t current_sample = 1; | 1023 uint32_t current_sample = 1; |
959 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL, | 1024 OnMessageRead(true, BATTOR_MESSAGE_TYPE_CONTROL, |
960 ToCharVector(current_sample)); | 1025 ToCharVector(current_sample)); |
961 | 1026 |
962 EXPECT_TRUE(IsCommandComplete()); | 1027 EXPECT_TRUE(IsCommandComplete()); |
963 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetCommandError()); | 1028 EXPECT_EQ(BATTOR_ERROR_UNEXPECTED_MESSAGE, GetCommandError()); |
964 } | 1029 } |
965 } // namespace battor | 1030 } // namespace battor |
OLD | NEW |