| // |
| // Copyright (C) 2023 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #include "fastboot_driver.h" |
| |
| #include <memory> |
| #include <optional> |
| |
| #include <gtest/gtest.h> |
| #include "mock_transport.h" |
| |
| using namespace ::testing; |
| using namespace fastboot; |
| |
| class DriverTest : public ::testing::Test { |
| protected: |
| InSequence s_; |
| }; |
| |
| TEST_F(DriverTest, GetVar) { |
| std::unique_ptr<MockTransport> transport_pointer = std::make_unique<MockTransport>(); |
| MockTransport* transport = transport_pointer.get(); |
| FastBootDriver driver(std::move(transport_pointer)); |
| |
| EXPECT_CALL(*transport, Write(_, _)) |
| .With(AllArgs(RawData("getvar:version"))) |
| .WillOnce(ReturnArg<1>()); |
| EXPECT_CALL(*transport, Read(_, _)).WillOnce(Invoke(CopyData("OKAY0.4"))); |
| |
| std::string output; |
| ASSERT_EQ(driver.GetVar("version", &output), SUCCESS) << driver.Error(); |
| ASSERT_EQ(output, "0.4"); |
| } |
| |
| TEST_F(DriverTest, InfoMessage) { |
| std::unique_ptr<MockTransport> transport_pointer = std::make_unique<MockTransport>(); |
| MockTransport* transport = transport_pointer.get(); |
| FastBootDriver driver(std::move(transport_pointer)); |
| |
| EXPECT_CALL(*transport, Write(_, _)) |
| .With(AllArgs(RawData("oem dmesg"))) |
| .WillOnce(ReturnArg<1>()); |
| EXPECT_CALL(*transport, Read(_, _)).WillOnce(Invoke(CopyData("INFOthis is an info line"))); |
| EXPECT_CALL(*transport, Read(_, _)).WillOnce(Invoke(CopyData("OKAY"))); |
| |
| std::vector<std::string> info; |
| ASSERT_EQ(driver.RawCommand("oem dmesg", "", nullptr, &info), SUCCESS) << driver.Error(); |
| ASSERT_EQ(info.size(), size_t(1)); |
| ASSERT_EQ(info[0], "this is an info line"); |
| } |
| |
| TEST_F(DriverTest, TextMessage) { |
| std::string text; |
| std::unique_ptr<MockTransport> transport_pointer = std::make_unique<MockTransport>(); |
| MockTransport* transport = transport_pointer.get(); |
| |
| DriverCallbacks callbacks{[](const std::string&) {}, [](int) {}, [](const std::string&) {}, |
| [&text](const std::string& extra_text) { text += extra_text; }}; |
| |
| FastBootDriver driver(std::move(transport_pointer), callbacks); |
| |
| EXPECT_CALL(*transport, Write(_, _)) |
| .With(AllArgs(RawData("oem trusty runtest trusty.hwaes.bench"))) |
| .WillOnce(ReturnArg<1>()); |
| EXPECT_CALL(*transport, Read(_, _)).WillOnce(Invoke(CopyData("TEXTthis is a text line"))); |
| EXPECT_CALL(*transport, Read(_, _)) |
| .WillOnce(Invoke( |
| CopyData("TEXT, albeit very long and split over multiple TEXT messages."))); |
| EXPECT_CALL(*transport, Read(_, _)) |
| .WillOnce(Invoke(CopyData("TEXT Indeed we can do that now with a TEXT message whenever " |
| "we feel like it."))); |
| EXPECT_CALL(*transport, Read(_, _)) |
| .WillOnce(Invoke(CopyData("TEXT Isn't that truly super cool?"))); |
| |
| EXPECT_CALL(*transport, Read(_, _)).WillOnce(Invoke(CopyData("OKAY"))); |
| |
| std::vector<std::string> info; |
| ASSERT_EQ(driver.RawCommand("oem trusty runtest trusty.hwaes.bench", "", nullptr, &info), |
| SUCCESS) |
| << driver.Error(); |
| ASSERT_EQ(text, |
| "this is a text line" |
| ", albeit very long and split over multiple TEXT messages." |
| " Indeed we can do that now with a TEXT message whenever we feel like it." |
| " Isn't that truly super cool?"); |
| } |