summaryrefslogtreecommitdiff
path: root/tests/grp_pwd_test.cpp
diff options
context:
space:
mode:
authorSteven Laver <lavers@google.com>2019-08-07 15:49:43 -0700
committerSteven Laver <lavers@google.com>2019-08-07 15:49:43 -0700
commitbfda022dd6fbbcea60e9f52496d90ece514b32da (patch)
tree97c69d2bdd0e0ff59d55a0d2a8596ed678cded3e /tests/grp_pwd_test.cpp
parent70ebd716b3e81d304cda14d2bd77996cc2840962 (diff)
parent848e1d8a30a3465040edc27085927309fe6cbcff (diff)
Merge RP1A.190528.001
Change-Id: If6e905407e26a19e0266185af46b4ff461c4d45e
Diffstat (limited to 'tests/grp_pwd_test.cpp')
-rw-r--r--tests/grp_pwd_test.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/grp_pwd_test.cpp b/tests/grp_pwd_test.cpp
index b46839bf4..ebc357c4b 100644
--- a/tests/grp_pwd_test.cpp
+++ b/tests/grp_pwd_test.cpp
@@ -217,6 +217,89 @@ TEST(pwd, getpwnam_app_id_u1_a40000) {
TEST(pwd, getpwnam_app_id_u1_i0) {
check_get_passwd("u1_i0", 190000, TYPE_APP);
}
+
+TEST(pwd, getpwnam_r_alignment) {
+#if defined(__BIONIC__)
+ passwd pwd_storage;
+ alignas(16) char buf[512];
+ passwd* pwd;
+ int result = getpwnam_r("root", &pwd_storage, buf + 1, sizeof(buf) - 1, &pwd);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd, "root", 0, TYPE_SYSTEM, true);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
+TEST(pwd, getpwuid_r_alignment) {
+#if defined(__BIONIC__)
+ passwd pwd_storage;
+ alignas(16) char buf[512];
+ passwd* pwd;
+ int result = getpwuid_r(0, &pwd_storage, buf + 1, sizeof(buf) - 1, &pwd);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd, "root", 0, TYPE_SYSTEM, true);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
+TEST(pwd, getpwnam_r_reentrancy) {
+#if defined(__BIONIC__)
+ passwd pwd_storage[2];
+ char buf[2][512];
+ passwd* pwd[3];
+ int result = getpwnam_r("root", &pwd_storage[0], buf[0], sizeof(buf[0]), &pwd[0]);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd[0], "root", 0, TYPE_SYSTEM, true);
+ pwd[1] = getpwnam("system");
+ ASSERT_NE(nullptr, pwd[1]);
+ check_passwd(pwd[1], "system", 1000, TYPE_SYSTEM, true);
+ result = getpwnam_r("radio", &pwd_storage[1], buf[1], sizeof(buf[1]), &pwd[2]);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd[2], "radio", 1001, TYPE_SYSTEM, true);
+ check_passwd(pwd[0], "root", 0, TYPE_SYSTEM, true);
+ check_passwd(pwd[1], "system", 1000, TYPE_SYSTEM, true);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
+TEST(pwd, getpwuid_r_reentrancy) {
+#if defined(__BIONIC__)
+ passwd pwd_storage[2];
+ char buf[2][512];
+ passwd* pwd[3];
+ int result = getpwuid_r(0, &pwd_storage[0], buf[0], sizeof(buf[0]), &pwd[0]);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd[0], "root", 0, TYPE_SYSTEM, true);
+ pwd[1] = getpwuid(1000);
+ ASSERT_NE(nullptr, pwd[1]);
+ check_passwd(pwd[1], "system", 1000, TYPE_SYSTEM, true);
+ result = getpwuid_r(1001, &pwd_storage[1], buf[1], sizeof(buf[1]), &pwd[2]);
+ ASSERT_EQ(0, result);
+ check_passwd(pwd[2], "radio", 1001, TYPE_SYSTEM, true);
+ check_passwd(pwd[0], "root", 0, TYPE_SYSTEM, true);
+ check_passwd(pwd[1], "system", 1000, TYPE_SYSTEM, true);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
+TEST(pwd, getpwnam_r_large_enough_suggested_buffer_size) {
+#if defined(__BIONIC__)
+ long size = sysconf(_SC_GETPW_R_SIZE_MAX);
+ ASSERT_GT(size, 0);
+ char buf[size];
+ passwd pwd_storage;
+ passwd* pwd;
+ ASSERT_EQ(0, getpwnam_r("root", &pwd_storage, buf, size, &pwd));
+ check_passwd(pwd, "root", 0, TYPE_SYSTEM, true);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
#if defined(__BIONIC__)
template <typename T>
static void expect_ids(const T& ids) {
@@ -477,6 +560,32 @@ TEST(grp, getgrnam_app_id_u1_i0) {
check_get_group("u1_i0", 190000);
}
+TEST(grp, getgrnam_r_alignment) {
+#if defined(__BIONIC__)
+ group grp_storage;
+ alignas(16) char buf[512];
+ group* grp;
+ int result = getgrnam_r("root", &grp_storage, buf + 1, sizeof(buf) - 1, &grp);
+ ASSERT_EQ(0, result);
+ check_group(grp, "root", 0);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
+TEST(grp, getgrgid_r_alignment) {
+#if defined(__BIONIC__)
+ group grp_storage;
+ alignas(16) char buf[512];
+ group* grp;
+ int result = getgrgid_r(0, &grp_storage, buf + 1, sizeof(buf) - 1, &grp);
+ ASSERT_EQ(0, result);
+ check_group(grp, "root", 0);
+#else
+ GTEST_SKIP() << "bionic-only test";
+#endif
+}
+
TEST(grp, getgrnam_r_reentrancy) {
#if defined(__BIONIC__)
group grp_storage[2];