Changeset View
Changeset View
Standalone View
Standalone View
tests/sys/fs/fusefs/xattr.cc
Show First 20 Lines • Show All 352 Lines • ▼ Show 20 Lines | TEST_F(Listxattr, size_only_nonempty) | ||||
int ns = EXTATTR_NAMESPACE_USER; | int ns = EXTATTR_NAMESPACE_USER; | ||||
expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | ||||
expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto& out) { | expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto& out) { | ||||
out.body.listxattr.size = 45; | out.body.listxattr.size = 45; | ||||
SET_OUT_HEADER_LEN(out, listxattr); | SET_OUT_HEADER_LEN(out, listxattr); | ||||
})); | })); | ||||
// TODO: fix the expected size after fixing the size calculation bug in | expect_listxattr(ino, 45, | ||||
// fuse_vnop_listextattr. It should be exactly 45. | |||||
expect_listxattr(ino, 53, | |||||
ReturnImmediate([](auto in __unused, auto& out) { | ReturnImmediate([](auto in __unused, auto& out) { | ||||
const char l[] = "user.foo"; | const char l[] = "user.foo"; | ||||
strlcpy((char*)out.body.bytes, l, | strlcpy((char*)out.body.bytes, l, | ||||
sizeof(out.body.bytes)); | sizeof(out.body.bytes)); | ||||
out.header.len = sizeof(fuse_out_header) + sizeof(l); | out.header.len = sizeof(fuse_out_header) + sizeof(l); | ||||
}) | }) | ||||
); | ); | ||||
ASSERT_EQ(4, extattr_list_file(FULLPATH, ns, NULL, 0)) | ASSERT_EQ(4, extattr_list_file(FULLPATH, ns, NULL, 0)) | ||||
<< strerror(errno); | << strerror(errno); | ||||
} | } | ||||
TEST_F(Listxattr, size_only_really_big) | TEST_F(Listxattr, size_only_really_big) | ||||
{ | { | ||||
uint64_t ino = 42; | uint64_t ino = 42; | ||||
int ns = EXTATTR_NAMESPACE_USER; | int ns = EXTATTR_NAMESPACE_USER; | ||||
expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | ||||
expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto& out) { | expect_listxattr(ino, 0, ReturnImmediate([](auto i __unused, auto& out) { | ||||
out.body.listxattr.size = 16000; | out.body.listxattr.size = 16000; | ||||
SET_OUT_HEADER_LEN(out, listxattr); | SET_OUT_HEADER_LEN(out, listxattr); | ||||
})); | })); | ||||
// TODO: fix the expected size after fixing the size calculation bug in | expect_listxattr(ino, 16000, | ||||
// fuse_vnop_listextattr. It should be exactly 16000. | |||||
expect_listxattr(ino, 16008, | |||||
ReturnImmediate([](auto in __unused, auto& out) { | ReturnImmediate([](auto in __unused, auto& out) { | ||||
const char l[16] = "user.foobarbang"; | const char l[16] = "user.foobarbang"; | ||||
for (int i=0; i < 1000; i++) { | for (int i=0; i < 1000; i++) { | ||||
memcpy(&out.body.bytes[16 * i], l, 16); | memcpy(&out.body.bytes[16 * i], l, 16); | ||||
} | } | ||||
out.header.len = sizeof(fuse_out_header) + 16000; | out.header.len = sizeof(fuse_out_header) + 16000; | ||||
}) | }) | ||||
); | ); | ||||
Show All 17 Lines | TEST_F(Listxattr, user) | ||||
expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | ||||
expect_listxattr(ino, 0, | expect_listxattr(ino, 0, | ||||
ReturnImmediate([&](auto in __unused, auto& out) { | ReturnImmediate([&](auto in __unused, auto& out) { | ||||
out.body.listxattr.size = sizeof(attrs); | out.body.listxattr.size = sizeof(attrs); | ||||
SET_OUT_HEADER_LEN(out, listxattr); | SET_OUT_HEADER_LEN(out, listxattr); | ||||
}) | }) | ||||
); | ); | ||||
// TODO: fix the expected size after fixing the size calculation bug in | expect_listxattr(ino, sizeof(attrs), | ||||
// fuse_vnop_listextattr. | |||||
expect_listxattr(ino, sizeof(attrs) + 8, | |||||
ReturnImmediate([&](auto in __unused, auto& out) { | ReturnImmediate([&](auto in __unused, auto& out) { | ||||
memcpy((void*)out.body.bytes, attrs, sizeof(attrs)); | memcpy((void*)out.body.bytes, attrs, sizeof(attrs)); | ||||
out.header.len = sizeof(fuse_out_header) + sizeof(attrs); | out.header.len = sizeof(fuse_out_header) + sizeof(attrs); | ||||
})); | })); | ||||
ASSERT_EQ(static_cast<ssize_t>(sizeof(expected)), | ASSERT_EQ(static_cast<ssize_t>(sizeof(expected)), | ||||
extattr_list_file(FULLPATH, ns, data, sizeof(data))) | extattr_list_file(FULLPATH, ns, data, sizeof(data))) | ||||
<< strerror(errno); | << strerror(errno); | ||||
Show All 15 Lines | TEST_F(Listxattr, system) | ||||
expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | expect_lookup(RELPATH, ino, S_IFREG | 0644, 0, 1); | ||||
expect_listxattr(ino, 0, | expect_listxattr(ino, 0, | ||||
ReturnImmediate([&](auto in __unused, auto& out) { | ReturnImmediate([&](auto in __unused, auto& out) { | ||||
out.body.listxattr.size = sizeof(attrs); | out.body.listxattr.size = sizeof(attrs); | ||||
SET_OUT_HEADER_LEN(out, listxattr); | SET_OUT_HEADER_LEN(out, listxattr); | ||||
}) | }) | ||||
); | ); | ||||
// TODO: fix the expected size after fixing the size calculation bug in | expect_listxattr(ino, sizeof(attrs), | ||||
// fuse_vnop_listextattr. | |||||
expect_listxattr(ino, sizeof(attrs) + 8, | |||||
ReturnImmediate([&](auto in __unused, auto& out) { | ReturnImmediate([&](auto in __unused, auto& out) { | ||||
memcpy((void*)out.body.bytes, attrs, sizeof(attrs)); | memcpy((void*)out.body.bytes, attrs, sizeof(attrs)); | ||||
out.header.len = sizeof(fuse_out_header) + sizeof(attrs); | out.header.len = sizeof(fuse_out_header) + sizeof(attrs); | ||||
})); | })); | ||||
ASSERT_EQ(static_cast<ssize_t>(sizeof(expected)), | ASSERT_EQ(static_cast<ssize_t>(sizeof(expected)), | ||||
extattr_list_file(FULLPATH, ns, data, sizeof(data))) | extattr_list_file(FULLPATH, ns, data, sizeof(data))) | ||||
<< strerror(errno); | << strerror(errno); | ||||
▲ Show 20 Lines • Show All 176 Lines • Show Last 20 Lines |