Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c094f79 authored by David Pursell's avatar David Pursell
Browse files

fastboot: fix SocketMock send failures.

Fixes SocketMock::ExpectSendFailure() to allow unit testing of errors
during send, and adds tests for ExpectSendFailure() and
AddReceiveFailure().

Also adds missing tests to make sure ReceiveAll() continues to read
until failure or all bytes have been read.

Bug: http://b/26157893
Change-Id: I67e7d6de8e8ec4a3b62a6b7d7217f7530862edf7
parent f6f800ef
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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<Socket> 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();
+3 −0
Original line number Diff line number Diff line
@@ -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);

+16 −0
Original line number Diff line number Diff line
@@ -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");