diff --git a/fastboot/socket_mock.cpp b/fastboot/socket_mock.cpp index bcb91ecf3..c962f303d 100644 --- a/fastboot/socket_mock.cpp +++ b/fastboot/socket_mock.cpp @@ -55,8 +55,9 @@ bool SocketMock::Send(const void* data, size_t length) { return false; } + bool return_value = events_.front().return_value; events_.pop(); - return true; + return return_value; } // Mock out multi-buffer send to be one large send, since that's what it should looks like from @@ -115,13 +116,12 @@ std::unique_ptr SocketMock::Accept() { } void SocketMock::ExpectSend(std::string message) { - events_.push(Event(EventType::kSend, std::move(message), 0, nullptr)); + events_.push(Event(EventType::kSend, std::move(message), true, nullptr)); } -// TODO: make this properly return false to the caller. -//void SocketMock::ExpectSendFailure(std::string message) { -// events_.push(Event(EventType::kSend, std::move(message), 0, nullptr)); -//} +void SocketMock::ExpectSendFailure(std::string message) { + events_.push(Event(EventType::kSend, std::move(message), false, nullptr)); +} void SocketMock::AddReceive(std::string message) { ssize_t return_value = message.length(); diff --git a/fastboot/socket_mock.h b/fastboot/socket_mock.h index c48aa7bd9..41fe06db0 100644 --- a/fastboot/socket_mock.h +++ b/fastboot/socket_mock.h @@ -65,6 +65,9 @@ class SocketMock : public Socket { // Adds an expectation for Send(). void ExpectSend(std::string message); + // Adds an expectation for Send() that returns false. + void ExpectSendFailure(std::string message); + // Adds data to provide for Receive(). void AddReceive(std::string message); diff --git a/fastboot/socket_test.cpp b/fastboot/socket_test.cpp index 9365792a1..cc7107529 100644 --- a/fastboot/socket_test.cpp +++ b/fastboot/socket_test.cpp @@ -250,6 +250,9 @@ TEST(SocketMockTest, TestSendSuccess) { TEST(SocketMockTest, TestSendFailure) { SocketMock* mock = new SocketMock; + mock->ExpectSendFailure("foo"); + EXPECT_FALSE(SendString(mock, "foo")); + EXPECT_NONFATAL_FAILURE(SendString(mock, "foo"), "no message was expected"); mock->ExpectSend("foo"); @@ -274,11 +277,24 @@ TEST(SocketMockTest, TestReceiveSuccess) { mock.AddReceive("123"); EXPECT_TRUE(ReceiveString(&mock, "abc")); EXPECT_TRUE(ReceiveString(&mock, "123")); + + // Make sure ReceiveAll() can piece together multiple receives. + mock.AddReceive("foo"); + mock.AddReceive("bar"); + mock.AddReceive("123"); + EXPECT_TRUE(ReceiveString(&mock, "foobar123")); } TEST(SocketMockTest, TestReceiveFailure) { SocketMock* mock = new SocketMock; + mock->AddReceiveFailure(); + EXPECT_FALSE(ReceiveString(mock, "foo")); + + mock->AddReceive("foo"); + mock->AddReceiveFailure(); + EXPECT_FALSE(ReceiveString(mock, "foobar")); + EXPECT_NONFATAL_FAILURE(ReceiveString(mock, "foo"), "no message was ready"); mock->ExpectSend("foo");