| // Copyright 2016 The Android Open Source Project |
| // |
| // This software is licensed under the terms of the GNU General Public |
| // License version 2, as published by the Free Software Foundation, and |
| // may be copied, distributed, and modified under those terms. |
| // |
| // This program is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| #include "android/emulation/testing/TestAndroidPipeDevice.h" |
| |
| #include <gtest/gtest.h> |
| |
| #include <memory> |
| #include <string> |
| |
| #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) |
| |
| using Guest = android::TestAndroidPipeDevice::Guest; |
| |
| // A TestAndroidPipeDevice that provides the 'zero' service. |
| extern "C" void android_pipe_add_type_zero(void); |
| |
| class ZeroPipeDevice : public android::TestAndroidPipeDevice { |
| public: |
| ZeroPipeDevice() { |
| android_pipe_add_type_zero(); |
| } |
| }; |
| |
| TEST(AndroidPipe,ZeroPipeWrites) { |
| ZeroPipeDevice dev; |
| std::unique_ptr<Guest> guest(Guest::create()); |
| EXPECT_EQ(0, guest->connect("zero")); |
| EXPECT_EQ(PIPE_POLL_IN|PIPE_POLL_OUT, guest->poll()); |
| |
| static const size_t kSizes[] = { |
| 0, 100, 128, 256, 512, 1000, 2048, 8192, 655356, |
| }; |
| for (size_t n = 0; n < ARRAY_SIZE(kSizes); n++) { |
| std::string buffer('x', kSizes[n]); |
| EXPECT_EQ(PIPE_POLL_IN|PIPE_POLL_OUT, guest->poll()); |
| EXPECT_EQ(buffer.size(), |
| guest->write(buffer.c_str(), buffer.size())); |
| } |
| } |
| |
| TEST(AndroidPipe,ZeroPipeReads) { |
| ZeroPipeDevice dev; |
| std::unique_ptr<Guest> guest(Guest::create()); |
| EXPECT_EQ(0, guest->connect("zero")); |
| EXPECT_EQ(PIPE_POLL_IN|PIPE_POLL_OUT, guest->poll()); |
| |
| static const size_t kSizes[] = { |
| 0, 100, 128, 256, 512, 1000, 2048, 8192, 655356, |
| }; |
| for (size_t n = 0; n < ARRAY_SIZE(kSizes); n++) { |
| std::string buffer('x', kSizes[n]); |
| EXPECT_EQ(PIPE_POLL_IN|PIPE_POLL_OUT, guest->poll()); |
| EXPECT_EQ(buffer.size(), |
| guest->read(&buffer[0], buffer.size())); |
| for (size_t i = 0; i < buffer.size(); ++i) { |
| EXPECT_EQ('\0', buffer[i]) << "# "<< i << " / " << kSizes[n]; |
| } |
| } |
| } |