| Index: mojo/services/files/public/c/tests/file_fd_impl_unittest.cc
|
| diff --git a/mojo/services/files/public/c/tests/file_fd_impl_unittest.cc b/mojo/services/files/public/c/tests/file_fd_impl_unittest.cc
|
| deleted file mode 100644
|
| index 2f91e3974b082b5c726b797aacf115fa62bf675c..0000000000000000000000000000000000000000
|
| --- a/mojo/services/files/public/c/tests/file_fd_impl_unittest.cc
|
| +++ /dev/null
|
| @@ -1,282 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "files/public/c/lib/file_fd_impl.h"
|
| -
|
| -#include <errno.h>
|
| -
|
| -#include <string>
|
| -
|
| -#include "files/public/c/mojio_sys_stat.h"
|
| -#include "files/public/c/mojio_unistd.h"
|
| -#include "files/public/c/tests/mock_errno_impl.h"
|
| -#include "files/public/c/tests/mojio_impl_test_base.h"
|
| -#include "files/public/c/tests/test_utils.h"
|
| -#include "files/public/interfaces/files.mojom.h"
|
| -#include "files/public/interfaces/types.mojom.h"
|
| -
|
| -namespace mojio {
|
| -namespace {
|
| -
|
| -using FileFDImplTest = mojio::test::MojioImplTestBase;
|
| -
|
| -const int kLastErrorSentinel = -12345;
|
| -
|
| -TEST_F(FileFDImplTest, ConstructClose) {
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl,
|
| - test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagWrite |
|
| - mojo::files::kOpenFlagCreate));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_TRUE(ffdi.Close());
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Dup) {
|
| - test::CreateTestFileAt(&directory(), "my_file", 1000);
|
| -
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl, test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagRead));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - std::unique_ptr<FDImpl> duped_ffdi = ffdi.Dup();
|
| - EXPECT_TRUE(duped_ffdi);
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Seeking in one should change the position in the other.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(123, ffdi.Lseek(123, MOJIO_SEEK_SET));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(123, duped_ffdi->Lseek(0, MOJIO_SEEK_CUR));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // And vice versa.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(123 + 456, duped_ffdi->Lseek(456, MOJIO_SEEK_CUR));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(123 + 456, ffdi.Lseek(0, MOJIO_SEEK_CUR));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Ftruncate) {
|
| - test::CreateTestFileAt(&directory(), "my_file", 1000);
|
| -
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl, test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagWrite));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Truncate.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_TRUE(ffdi.Ftruncate(123));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - EXPECT_EQ(123, test::GetFileSize(&directory(), "my_file"));
|
| -
|
| - // Can also extend.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_TRUE(ffdi.Ftruncate(456));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - EXPECT_EQ(456, test::GetFileSize(&directory(), "my_file"));
|
| -
|
| - // TODO(vtl): Check file position after |Ftruncate()|.
|
| -
|
| - // Invalid size.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_FALSE(ffdi.Ftruncate(-1));
|
| - EXPECT_EQ(EINVAL, errno_impl.Get());
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Lseek) {
|
| - test::CreateTestFileAt(&directory(), "my_file", 123);
|
| -
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl, test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagWrite));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Seek and write in various places.
|
| -
|
| - // 5 from beginning.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(5, ffdi.Lseek(5, MOJIO_SEEK_SET));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Write a byte.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - char c = 42;
|
| - EXPECT_EQ(1, ffdi.Write(&c, 1));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // 42 from current.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(5 + 1 + 42, ffdi.Lseek(42, MOJIO_SEEK_CUR));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Write a byte.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - c = 5;
|
| - EXPECT_EQ(1, ffdi.Write(&c, 1));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // 5 before end.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(123 - 5, ffdi.Lseek(-5, MOJIO_SEEK_END));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Write a byte.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - c = 0;
|
| - EXPECT_EQ(1, ffdi.Write(&c, 1));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Now read everything and check.
|
| - std::string expected_contents(123, '\0');
|
| - for (size_t i = 0; i < 123; i++) {
|
| - unsigned char c = static_cast<unsigned char>(i);
|
| - expected_contents[i] = *reinterpret_cast<char*>(&c);
|
| - }
|
| - expected_contents[5] = 42;
|
| - expected_contents[5 + 1 + 42] = 5;
|
| - expected_contents[123 - 5] = 0;
|
| - EXPECT_EQ(expected_contents, test::GetFileContents(&directory(), "my_file"));
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Read) {
|
| - test::CreateTestFileAt(&directory(), "my_file", 123);
|
| -
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl, test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagRead));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Read a bit.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - unsigned char buffer[1000] = {};
|
| - EXPECT_EQ(23, ffdi.Read(buffer, 23));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - for (size_t i = 0; i < 23; i++)
|
| - EXPECT_EQ(static_cast<unsigned char>(i), buffer[i]) << i;
|
| -
|
| - // Read too much.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(100, ffdi.Read(buffer, sizeof(buffer)));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - for (size_t i = 0; i < 100; i++)
|
| - EXPECT_EQ(static_cast<unsigned char>(23 + i), buffer[i]) << i;
|
| -
|
| - // Invalid |count| (must fit within |ssize_t|).
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(-1, ffdi.Read(buffer, static_cast<size_t>(-1)));
|
| - EXPECT_EQ(EINVAL, errno_impl.Get());
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Write) {
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl,
|
| - test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagWrite |
|
| - mojo::files::kOpenFlagCreate |
|
| - mojo::files::kOpenFlagExclusive));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - // Write something.
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - const char kHello[] = {'h', 'e', 'l', 'l', 'o', ' '};
|
| - EXPECT_EQ(static_cast<mojio_off_t>(sizeof(kHello)),
|
| - ffdi.Write(kHello, sizeof(kHello)));
|
| -
|
| - // Write something else.
|
| - const char kMojio[] = {'m', 'o', 'j', 'i', 'o'};
|
| - EXPECT_EQ(static_cast<mojio_off_t>(sizeof(kMojio)),
|
| - ffdi.Write(kMojio, sizeof(kMojio)));
|
| -
|
| - EXPECT_EQ(std::string("hello mojio"),
|
| - test::GetFileContents(&directory(), "my_file"));
|
| -
|
| - // Invalid |count| (must fit within |ssize_t|).
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(-1, ffdi.Write(kHello, static_cast<size_t>(-1)));
|
| - EXPECT_EQ(EINVAL, errno_impl.Get());
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Fstat) {
|
| - test::CreateTestFileAt(&directory(), "my_file_0", 0);
|
| - test::CreateTestFileAt(&directory(), "my_file_1", 512);
|
| - test::CreateTestFileAt(&directory(), "my_file_2", 513);
|
| -
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi0(&errno_impl, test::OpenFileAt(&directory(), "my_file_0",
|
| - mojo::files::kOpenFlagRead));
|
| - FileFDImpl ffdi1(&errno_impl, test::OpenFileAt(&directory(), "my_file_1",
|
| - mojo::files::kOpenFlagRead));
|
| - FileFDImpl ffdi2(&errno_impl, test::OpenFileAt(&directory(), "my_file_2",
|
| - mojo::files::kOpenFlagRead));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - struct mojio_stat buf0 = {};
|
| - EXPECT_TRUE(ffdi0.Fstat(&buf0));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - // Note: Don't check the unfilled values. (Some of the checks may also be
|
| - // fragile, depending on our level of support.)
|
| - EXPECT_EQ(static_cast<mojio_mode_t>(MOJIO_S_IRWXU | MOJIO_S_IFREG),
|
| - buf0.st_mode); // Fragile.
|
| - EXPECT_EQ(1u, buf0.st_nlink); // Fragile.
|
| - EXPECT_EQ(0, buf0.st_size);
|
| - // Just check that |st_atim.tv_sec|, etc. are positive (a bit fragile).
|
| - EXPECT_GT(buf0.st_atim.tv_sec, 0);
|
| - EXPECT_GT(buf0.st_mtim.tv_sec, 0);
|
| - EXPECT_GT(buf0.st_ctim.tv_sec, 0);
|
| - EXPECT_EQ(1024, buf0.st_blksize); // Fragile.
|
| - EXPECT_EQ(0u, buf0.st_blocks);
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - struct mojio_stat buf1 = {};
|
| - EXPECT_TRUE(ffdi1.Fstat(&buf1));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - // Only check the things that should be (interestingly) different.
|
| - EXPECT_EQ(512, buf1.st_size);
|
| - EXPECT_EQ(1u, buf1.st_blocks);
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - struct mojio_stat buf2 = {};
|
| - EXPECT_TRUE(ffdi2.Fstat(&buf2));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| - // Only check the things that should be (interestingly) different.
|
| - EXPECT_EQ(513, buf2.st_size);
|
| - EXPECT_EQ(2u, buf2.st_blocks);
|
| -}
|
| -
|
| -TEST_F(FileFDImplTest, Efault) {
|
| - test::MockErrnoImpl errno_impl(kLastErrorSentinel);
|
| - FileFDImpl ffdi(&errno_impl,
|
| - test::OpenFileAt(&directory(), "my_file",
|
| - mojo::files::kOpenFlagRead |
|
| - mojo::files::kOpenFlagWrite |
|
| - mojo::files::kOpenFlagCreate |
|
| - mojo::files::kOpenFlagExclusive));
|
| - EXPECT_EQ(kLastErrorSentinel, errno_impl.Get()); // No error.
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(-1, ffdi.Read(nullptr, 1));
|
| - EXPECT_EQ(EFAULT, errno_impl.Get());
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_EQ(-1, ffdi.Write(nullptr, 1));
|
| - EXPECT_EQ(EFAULT, errno_impl.Get());
|
| -
|
| - errno_impl.Reset(kLastErrorSentinel);
|
| - EXPECT_FALSE(ffdi.Fstat(nullptr));
|
| - EXPECT_EQ(EFAULT, errno_impl.Get());
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace mojio
|
|
|