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

Side by Side Diff: native_client_sdk/src/tests/nacl_io_test/syscalls_test.cc

Issue 295933009: [NaCl SDK] Add realpath(3) implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <errno.h>
6 #include <limits.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <sys/stat.h>
10
11 #include "gtest/gtest.h"
12
13 #include "nacl_io/kernel_intercept.h"
14 #include "nacl_io/kernel_proxy.h"
15
16 using namespace nacl_io;
17
18 namespace {
19
20 class SyscallsTest : public ::testing::Test {
21 public:
22 SyscallsTest() {}
23
24 void SetUp() {
25 ASSERT_EQ(0, ki_push_state_for_testing());
26 ASSERT_EQ(0, ki_init(&kp_));
27 // Unmount the passthrough FS and mount a memfs.
28 EXPECT_EQ(0, kp_.umount("/"));
29 EXPECT_EQ(0, kp_.mount("", "/", "memfs", 0, NULL));
30 }
31
32 void TearDown() { ki_uninit(); }
33
34 protected:
35 KernelProxy kp_;
36 };
37
38 } // namespace
39
40 #if defined(__native_client__)
41
42 TEST_F(SyscallsTest, Realpath) {
43 char buffer[PATH_MAX];
44
45 ASSERT_EQ(0, ki_mkdir("/foo", S_IREAD | S_IWRITE));
Sam Clegg 2014/05/21 23:39:21 If you wrote these tests with everything happening
binji 2014/05/21 23:56:01 Hm, good idea. I thought I needed write access to
46 ASSERT_EQ(0, ki_mkdir("/foo/bar", S_IREAD | S_IWRITE));
47 int fd = ki_open("/foo/file", O_CREAT | O_RDWR);
48 ASSERT_GT(fd, -1);
49 ASSERT_EQ(0, ki_close(fd));
50
51 // Test absolute paths.
52 EXPECT_STREQ("/", realpath("/", buffer));
53 EXPECT_STREQ("/", realpath("/foo/..", buffer));
54 EXPECT_STREQ("/foo", realpath("/foo", buffer));
55 EXPECT_STREQ("/foo", realpath("/foo/", buffer));
56 EXPECT_STREQ("/foo", realpath("/foo/bar/..", buffer));
57 EXPECT_STREQ("/foo", realpath("/foo/bar/../bar/../../foo", buffer));
58 EXPECT_STREQ("/foo", realpath("/foo/././", buffer));
59 EXPECT_STREQ("/foo", realpath("///foo", buffer));
60 EXPECT_STREQ("/foo/bar", realpath("/foo/bar", buffer));
61
62 EXPECT_EQ(NULL, realpath("/blah", buffer));
63 EXPECT_EQ(ENOENT, errno);
64
65 EXPECT_EQ(NULL, realpath("/blah/blah", buffer));
66 EXPECT_EQ(ENOENT, errno);
67
68 EXPECT_EQ(NULL, realpath("/foo/baz/..", buffer));
69 EXPECT_EQ(ENOENT, errno);
70
71 EXPECT_EQ(NULL, realpath("/foo/file/", buffer));
72 EXPECT_EQ(ENOTDIR, errno);
73
74 EXPECT_EQ(NULL, realpath(NULL, buffer));
75 EXPECT_EQ(EINVAL, errno);
76
77 // Test relative paths.
78 EXPECT_EQ(0, ki_chdir("/foo"));
79
80 EXPECT_STREQ("/", realpath("..", buffer));
81 EXPECT_STREQ("/foo", realpath(".", buffer));
82 EXPECT_STREQ("/foo", realpath("./", buffer));
83 EXPECT_STREQ("/foo", realpath("bar/..", buffer));
84 EXPECT_STREQ("/foo", realpath("bar/../../foo", buffer));
85 EXPECT_STREQ("/foo", realpath(".///", buffer));
86 EXPECT_STREQ("/foo/bar", realpath("bar", buffer));
87
88 // Test when resolved_path is allocated.
89 char* allocated = realpath("/foo", NULL);
90 EXPECT_STREQ("/foo", allocated);
91 free(allocated);
92 }
93
94 #endif // defined(__native_client__)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698