| Index: native_client_sdk/src/libraries/nacl_io_test/mount_test.cc
|
| diff --git a/native_client_sdk/src/libraries/nacl_io_test/mount_test.cc b/native_client_sdk/src/libraries/nacl_io_test/mount_test.cc
|
| index 1604ccafd3bb145c58a85fcce4e62e1627e9d0ef..245d13daf400682c0c856e7a5bb7b3753ed96fde 100644
|
| --- a/native_client_sdk/src/libraries/nacl_io_test/mount_test.cc
|
| +++ b/native_client_sdk/src/libraries/nacl_io_test/mount_test.cc
|
| @@ -22,12 +22,10 @@ class MountMemMock : public MountMem {
|
| public:
|
| MountMemMock() {
|
| StringMap_t map;
|
| - Init(1, map, NULL);
|
| - };
|
| -
|
| - int num_nodes() {
|
| - return (int) inode_pool_.size();
|
| + EXPECT_EQ(0, Init(1, map, NULL));
|
| }
|
| +
|
| + int num_nodes() { return (int) inode_pool_.size(); }
|
| };
|
|
|
| class MountDevMock : public MountDev {
|
| @@ -36,20 +34,20 @@ class MountDevMock : public MountDev {
|
| StringMap_t map;
|
| Init(1, map, NULL);
|
| }
|
| - int num_nodes() {
|
| - return (int) inode_pool_.size();
|
| - }
|
| + int num_nodes() { return (int) inode_pool_.size(); }
|
| };
|
|
|
| } // namespace
|
|
|
| -
|
| -#define NULL_NODE ((MountNode *) NULL)
|
| +#define NULL_NODE ((MountNode*) NULL)
|
|
|
| TEST(MountTest, Sanity) {
|
| MountMemMock* mnt = new MountMemMock();
|
| MountNode* file;
|
| MountNode* root;
|
| + MountNode* result_node;
|
| + size_t result_size = 0;
|
| + int result_bytes = 0;
|
|
|
| char buf1[1024];
|
|
|
| @@ -57,43 +55,54 @@ TEST(MountTest, Sanity) {
|
| EXPECT_EQ(1, mnt->num_nodes());
|
|
|
| // Fail to open non existent file
|
| - EXPECT_EQ(NULL_NODE, mnt->Open(Path("/foo"), O_RDWR));
|
| - EXPECT_EQ(errno, ENOENT);
|
| + EXPECT_EQ(ENOENT, mnt->Open(Path("/foo"), O_RDWR, &result_node));
|
| + EXPECT_EQ(NULL, result_node);
|
|
|
| // Create a file
|
| - file = mnt->Open(Path("/foo"), O_RDWR | O_CREAT);
|
| + EXPECT_EQ(0, mnt->Open(Path("/foo"), O_RDWR | O_CREAT, &file));
|
| EXPECT_NE(NULL_NODE, file);
|
| - if (file == NULL) return;
|
| + if (file == NULL)
|
| + return;
|
| EXPECT_EQ(2, file->RefCount());
|
| EXPECT_EQ(2, mnt->num_nodes());
|
|
|
| + // Open the root directory for write should fail.
|
| + EXPECT_EQ(EISDIR, mnt->Open(Path("/"), O_RDWR, &root));
|
| +
|
| // Open the root directory
|
| - root = mnt->Open(Path("/"), O_RDWR);
|
| + EXPECT_EQ(0, mnt->Open(Path("/"), O_RDONLY, &root));
|
| EXPECT_NE(NULL_NODE, root);
|
| if (NULL != root) {
|
| struct dirent dirs[2];
|
| - int len = root->GetDents(0, dirs, sizeof(dirs));
|
| + int len;
|
| + EXPECT_EQ(0, root->GetDents(0, dirs, sizeof(dirs), &len));
|
| EXPECT_EQ(sizeof(struct dirent), len);
|
| }
|
|
|
| // Fail to re-create the same file
|
| - EXPECT_EQ(NULL_NODE, mnt->Open(Path("/foo"), O_RDWR | O_CREAT | O_EXCL));
|
| - EXPECT_EQ(errno, EEXIST);
|
| + EXPECT_EQ(EEXIST,
|
| + mnt->Open(Path("/foo"), O_RDWR | O_CREAT | O_EXCL, &result_node));
|
| + EXPECT_EQ(NULL_NODE, result_node);
|
| EXPECT_EQ(2, mnt->num_nodes());
|
|
|
| // Fail to create a directory with the same name
|
| - EXPECT_EQ(-1, mnt->Mkdir(Path("/foo"), O_RDWR));
|
| - EXPECT_EQ(errno, EEXIST);
|
| + EXPECT_EQ(EEXIST, mnt->Mkdir(Path("/foo"), O_RDWR));
|
|
|
| // Attempt to READ/WRITE
|
| - EXPECT_EQ(0, file->GetSize());
|
| - EXPECT_EQ(sizeof(buf1), file->Write(0, buf1, sizeof(buf1)));
|
| - EXPECT_EQ(sizeof(buf1), file->GetSize());
|
| - EXPECT_EQ(sizeof(buf1), file->Read(0, buf1, sizeof(buf1)));
|
| + EXPECT_EQ(0, file->GetSize(&result_size));
|
| + EXPECT_EQ(0, result_size);
|
| + EXPECT_EQ(0, file->Write(0, buf1, sizeof(buf1), &result_bytes));
|
| + EXPECT_EQ(sizeof(buf1), result_bytes);
|
| + EXPECT_EQ(0, file->GetSize(&result_size));
|
| + EXPECT_EQ(sizeof(buf1), result_size);
|
| + EXPECT_EQ(0, file->Read(0, buf1, sizeof(buf1), &result_bytes));
|
| + EXPECT_EQ(sizeof(buf1), result_bytes);
|
|
|
| // Attempt to open the same file
|
| - EXPECT_EQ(file, mnt->Open(Path("/foo"), O_RDWR | O_CREAT));
|
| - EXPECT_EQ(sizeof(buf1), file->GetSize());
|
| + EXPECT_EQ(0, mnt->Open(Path("/foo"), O_RDWR | O_CREAT, &result_node));
|
| + EXPECT_EQ(file, result_node);
|
| + EXPECT_EQ(0, file->GetSize(&result_size));
|
| + EXPECT_EQ(sizeof(buf1), result_size);
|
| EXPECT_EQ(3, file->RefCount());
|
| EXPECT_EQ(2, mnt->num_nodes());
|
|
|
| @@ -102,9 +111,8 @@ TEST(MountTest, Sanity) {
|
| EXPECT_EQ(2, mnt->num_nodes());
|
| EXPECT_EQ(0, mnt->Unlink(Path("/foo")));
|
| EXPECT_EQ(2, mnt->num_nodes());
|
| - EXPECT_EQ(-1, mnt->Unlink(Path("/foo")));
|
| + EXPECT_EQ(ENOENT, mnt->Unlink(Path("/foo")));
|
| EXPECT_EQ(2, mnt->num_nodes());
|
| - EXPECT_EQ(errno, ENOENT);
|
| mnt->ReleaseNode(file);
|
| EXPECT_EQ(1, mnt->num_nodes());
|
|
|
| @@ -112,13 +120,13 @@ TEST(MountTest, Sanity) {
|
| EXPECT_EQ(0, mnt->Mkdir(Path("/foo"), O_RDWR));
|
|
|
| // Create a file (exclusively)
|
| - file = mnt->Open(Path("/foo/bar"), O_RDWR | O_CREAT | O_EXCL);
|
| + EXPECT_EQ(0, mnt->Open(Path("/foo/bar"), O_RDWR | O_CREAT | O_EXCL, &file));
|
| EXPECT_NE(NULL_NODE, file);
|
| - if (NULL == file) return;
|
| + if (NULL == file)
|
| + return;
|
|
|
| // Attempt to delete the directory
|
| - EXPECT_EQ(-1, mnt->Rmdir(Path("/foo")));
|
| - EXPECT_EQ(errno, ENOTEMPTY);
|
| + EXPECT_EQ(ENOTEMPTY, mnt->Rmdir(Path("/foo")));
|
|
|
| // Unlink the file, then delete the directory
|
| EXPECT_EQ(0, mnt->Unlink(Path("/foo/bar")));
|
| @@ -128,60 +136,71 @@ TEST(MountTest, Sanity) {
|
| EXPECT_EQ(1, mnt->num_nodes());
|
|
|
| // Verify the directory is gone
|
| - file = mnt->Open(Path("/foo"), O_RDWR);
|
| + EXPECT_EQ(ENOENT, mnt->Open(Path("/foo"), O_RDWR, &file));
|
| EXPECT_EQ(NULL_NODE, file);
|
| - EXPECT_EQ(errno, ENOENT);
|
| }
|
|
|
| TEST(MountTest, MemMountRemove) {
|
| MountMemMock* mnt = new MountMemMock();
|
| MountNode* file;
|
| + MountNode* result_node;
|
|
|
| EXPECT_EQ(0, mnt->Mkdir(Path("/dir"), O_RDWR));
|
| - file = mnt->Open(Path("/file"), O_RDWR | O_CREAT | O_EXCL);
|
| + EXPECT_EQ(0, mnt->Open(Path("/file"), O_RDWR | O_CREAT | O_EXCL, &file));
|
| EXPECT_NE(NULL_NODE, file);
|
| mnt->ReleaseNode(file);
|
|
|
| EXPECT_EQ(0, mnt->Remove(Path("/dir")));
|
| EXPECT_EQ(0, mnt->Remove(Path("/file")));
|
|
|
| - EXPECT_EQ(NULL_NODE, mnt->Open(Path("/dir/foo"), O_CREAT | O_RDWR));
|
| - EXPECT_EQ(ENOENT, errno);
|
| - EXPECT_EQ(NULL_NODE, mnt->Open(Path("/file"), O_RDONLY));
|
| - EXPECT_EQ(ENOENT, errno);
|
| + EXPECT_EQ(ENOENT,
|
| + mnt->Open(Path("/dir/foo"), O_CREAT | O_RDWR, &result_node));
|
| + EXPECT_EQ(NULL_NODE, result_node);
|
| + EXPECT_EQ(ENOENT, mnt->Open(Path("/file"), O_RDONLY, &result_node));
|
| + EXPECT_EQ(NULL_NODE, result_node);
|
| }
|
|
|
| TEST(MountTest, DevNull) {
|
| MountDevMock* mnt = new MountDevMock();
|
| - MountNode* dev_null = mnt->Open(Path("/null"), O_RDWR);
|
| + MountNode* dev_null = NULL;
|
| + int result_bytes = 0;
|
| +
|
| + ASSERT_EQ(0, mnt->Open(Path("/null"), O_RDWR, &dev_null));
|
| ASSERT_NE(NULL_NODE, dev_null);
|
|
|
| // Writing to /dev/null should write everything.
|
| const char msg[] = "Dummy test message.";
|
| - EXPECT_EQ(strlen(msg), dev_null->Write(0, &msg[0], strlen(msg)));
|
| + EXPECT_EQ(0, dev_null->Write(0, &msg[0], strlen(msg), &result_bytes));
|
| + EXPECT_EQ(strlen(msg), result_bytes);
|
|
|
| // Reading from /dev/null should read nothing.
|
| const int kBufferLength = 100;
|
| char buffer[kBufferLength];
|
| - EXPECT_EQ(0, dev_null->Read(0, &buffer[0], kBufferLength));
|
| + EXPECT_EQ(0, dev_null->Read(0, &buffer[0], kBufferLength, &result_bytes));
|
| + EXPECT_EQ(0, result_bytes);
|
| mnt->ReleaseNode(dev_null);
|
| }
|
|
|
| TEST(MountTest, DevZero) {
|
| MountDevMock* mnt = new MountDevMock();
|
| - MountNode* dev_zero = mnt->Open(Path("/zero"), O_RDWR);
|
| + MountNode* dev_zero = NULL;
|
| + int result_bytes = 0;
|
| +
|
| + ASSERT_EQ(0, mnt->Open(Path("/zero"), O_RDWR, &dev_zero));
|
| ASSERT_NE(NULL_NODE, dev_zero);
|
|
|
| // Writing to /dev/zero should write everything.
|
| const char msg[] = "Dummy test message.";
|
| - EXPECT_EQ(strlen(msg), dev_zero->Write(0, &msg[0], strlen(msg)));
|
| + EXPECT_EQ(0, dev_zero->Write(0, &msg[0], strlen(msg), &result_bytes));
|
| + EXPECT_EQ(strlen(msg), result_bytes);
|
|
|
| // Reading from /dev/zero should read all zeroes.
|
| const int kBufferLength = 100;
|
| char buffer[kBufferLength];
|
| // First fill with all 1s.
|
| memset(&buffer[0], 0x1, kBufferLength);
|
| - EXPECT_EQ(kBufferLength, dev_zero->Read(0, &buffer[0], kBufferLength));
|
| + EXPECT_EQ(0, dev_zero->Read(0, &buffer[0], kBufferLength, &result_bytes));
|
| + EXPECT_EQ(kBufferLength, result_bytes);
|
|
|
| char zero_buffer[kBufferLength];
|
| memset(&zero_buffer[0], 0, kBufferLength);
|
| @@ -191,12 +210,16 @@ TEST(MountTest, DevZero) {
|
|
|
| TEST(MountTest, DevUrandom) {
|
| MountDevMock* mnt = new MountDevMock();
|
| - MountNode* dev_urandom = mnt->Open(Path("/urandom"), O_RDWR);
|
| + MountNode* dev_urandom = NULL;
|
| + int result_bytes = 0;
|
| +
|
| + ASSERT_EQ(0, mnt->Open(Path("/urandom"), O_RDWR, &dev_urandom));
|
| ASSERT_NE(NULL_NODE, dev_urandom);
|
|
|
| - // Writing to /dev/zero should write everything.
|
| + // Writing to /dev/urandom should write everything.
|
| const char msg[] = "Dummy test message.";
|
| - EXPECT_EQ(strlen(msg), dev_urandom->Write(0, &msg[0], strlen(msg)));
|
| + EXPECT_EQ(0, dev_urandom->Write(0, &msg[0], strlen(msg), &result_bytes));
|
| + EXPECT_EQ(strlen(msg), result_bytes);
|
|
|
| // Reading from /dev/urandom should read random bytes.
|
| const int kSampleBatches = 1000;
|
| @@ -207,7 +230,9 @@ TEST(MountTest, DevUrandom) {
|
|
|
| unsigned char buffer[kSampleBatchSize];
|
| for (int batch = 0; batch < kSampleBatches; ++batch) {
|
| - int bytes_read = dev_urandom->Read(0, &buffer[0], kSampleBatchSize);
|
| + int bytes_read = 0;
|
| + EXPECT_EQ(0,
|
| + dev_urandom->Read(0, &buffer[0], kSampleBatchSize, &bytes_read));
|
| EXPECT_EQ(kSampleBatchSize, bytes_read);
|
|
|
| for (int i = 0; i < bytes_read; ++i) {
|
|
|