Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1414)

Unified Diff: native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc

Issue 565343002: [NaCl SDK] nacl_io: Plumb through {,f}utime{,s} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc
diff --git a/native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc b/native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc
index bf4b51d8a03cb20e94acc992b77ea64a14a536dd..dffc1ba89b28c90ef522da1e284a1e5ab6c145c0 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc
+++ b/native_client_sdk/src/tests/nacl_io_test/fuse_fs_test.cc
@@ -14,6 +14,7 @@
#include "nacl_io/kernel_handle.h"
#include "nacl_io/kernel_intercept.h"
#include "nacl_io/kernel_proxy.h"
+#include "nacl_io/ostime.h"
using namespace nacl_io;
@@ -30,8 +31,13 @@ class FuseFsForTesting : public FuseFs {
// Implementation of a simple flat memory filesystem.
struct File {
+ File() {
+ memset(&times, 0, sizeof(times));
+ }
+
std::string name;
std::vector<uint8_t> data;
+ timespec times[2];
};
typedef std::vector<File> Files;
@@ -77,6 +83,10 @@ int testfs_getattr(const char* path, struct stat* stbuf) {
stbuf->st_mode = S_IFREG | last_create_mode;
stbuf->st_size = file->data.size();
+ stbuf->st_atime = file->times[0].tv_sec;
+ stbuf->st_atimensec = file->times[0].tv_nsec;
+ stbuf->st_mtime = file->times[1].tv_sec;
+ stbuf->st_mtimensec = file->times[1].tv_nsec;
return 0;
}
@@ -160,32 +170,43 @@ int testfs_write(const char* path,
return size;
}
+int testfs_utimens(const char* path, const struct timespec times[2]) {
+ File* file = FindFile(path);
+ if (file == NULL)
+ return -ENOENT;
+
+ file->times[0] = times[0];
+ file->times[1] = times[1];
+ return 0;
+}
+
const char hello_world[] = "Hello, World!\n";
fuse_operations g_fuse_operations = {
- 0, // flag_nopath
- 0, // flag_reserved
- NULL, // init
- NULL, // destroy
- NULL, // access
- testfs_create, // create
- NULL, // fgetattr
- NULL, // fsync
- NULL, // ftruncate
- testfs_getattr, // getattr
- NULL, // mkdir
- NULL, // mknod
- testfs_open, // open
- NULL, // opendir
- testfs_read, // read
- testfs_readdir, // readdir
- NULL, // release
- NULL, // releasedir
- NULL, // rename
- NULL, // rmdir
- NULL, // truncate
- NULL, // unlink
- testfs_write, // write
+ 0, // flag_nopath
+ 0, // flag_reserved
+ NULL, // init
+ NULL, // destroy
+ NULL, // access
+ testfs_create, // create
+ NULL, // fgetattr
+ NULL, // fsync
+ NULL, // ftruncate
+ testfs_getattr, // getattr
+ NULL, // mkdir
+ NULL, // mknod
+ testfs_open, // open
+ NULL, // opendir
+ testfs_read, // read
+ testfs_readdir, // readdir
+ NULL, // release
+ NULL, // releasedir
+ NULL, // rename
+ NULL, // rmdir
+ NULL, // truncate
+ NULL, // unlink
+ testfs_write, // write
+ testfs_utimens, // utimens
};
class FuseFsTest : public ::testing::Test {
@@ -320,6 +341,26 @@ TEST_F(FuseFsTest, GetDents) {
EXPECT_STREQ("foobar", entries[3].d_name);
}
+TEST_F(FuseFsTest, Utimens) {
+ struct stat statbuf;
+ ScopedNode node;
+
+ struct timespec times[2];
+ times[0].tv_sec = 1000;
+ times[0].tv_nsec = 2000;
+ times[1].tv_sec = 3000;
+ times[1].tv_nsec = 4000;
+
+ ASSERT_EQ(0, fs_.Open(Path("/hello"), O_RDONLY, &node));
+ EXPECT_EQ(0, node->Futimens(times));
+
+ EXPECT_EQ(0, node->GetStat(&statbuf));
+ EXPECT_EQ(times[0].tv_sec, statbuf.st_atime);
+ EXPECT_EQ(times[0].tv_nsec, statbuf.st_atimensec);
+ EXPECT_EQ(times[1].tv_sec, statbuf.st_mtime);
+ EXPECT_EQ(times[1].tv_nsec, statbuf.st_mtimensec);
+}
+
namespace {
class KernelProxyFuseTest : public ::testing::Test {

Powered by Google App Engine
This is Rietveld 408576698