aboutsummaryrefslogtreecommitdiff
path: root/libc/test/src/sched/param_and_scheduler_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/test/src/sched/param_and_scheduler_test.cpp')
-rw-r--r--libc/test/src/sched/param_and_scheduler_test.cpp48
1 files changed, 27 insertions, 21 deletions
diff --git a/libc/test/src/sched/param_and_scheduler_test.cpp b/libc/test/src/sched/param_and_scheduler_test.cpp
index 8e81f2e..747c7e34 100644
--- a/libc/test/src/sched/param_and_scheduler_test.cpp
+++ b/libc/test/src/sched/param_and_scheduler_test.cpp
@@ -36,7 +36,7 @@
class SchedTest : public LIBC_NAMESPACE::testing::Test {
public:
- void testSched(int policy, bool can_set) {
+ void testSched(int policy, bool is_mandatory) {
LIBC_NAMESPACE::libc_errno = 0;
int init_policy = LIBC_NAMESPACE::sched_getscheduler(0);
@@ -74,24 +74,26 @@ public:
param.sched_priority = max_priority + 1;
ASSERT_EQ(LIBC_NAMESPACE::sched_setscheduler(0, policy, &param), -1);
- // A bit hard to test as depending if we are root or not we can run into
+ // A bit hard to test as depending on user privileges we can run into
// different issues.
ASSERT_TRUE(LIBC_NAMESPACE::libc_errno == EINVAL ||
LIBC_NAMESPACE::libc_errno == EPERM);
LIBC_NAMESPACE::libc_errno = 0;
- // Some sched policies require permissions, so skip
param.sched_priority = min_priority;
- // Success / missing permissions.
- ASSERT_EQ(LIBC_NAMESPACE::sched_setscheduler(0, policy, &param),
- can_set ? 0 : -1);
- ASSERT_TRUE(can_set ? (LIBC_NAMESPACE::libc_errno == 0)
- : (LIBC_NAMESPACE::libc_errno == EINVAL ||
- LIBC_NAMESPACE::libc_errno == EPERM));
+ // Success/unsupported policy/missing permissions.
+ int setscheduler_result =
+ LIBC_NAMESPACE::sched_setscheduler(0, policy, &param);
+ ASSERT_TRUE(setscheduler_result == 0 || setscheduler_result == -1);
+ ASSERT_TRUE(
+ setscheduler_result != -1
+ ? (LIBC_NAMESPACE::libc_errno == 0)
+ : ((!is_mandatory && LIBC_NAMESPACE::libc_errno == EINVAL) ||
+ LIBC_NAMESPACE::libc_errno == EPERM));
LIBC_NAMESPACE::libc_errno = 0;
ASSERT_EQ(LIBC_NAMESPACE::sched_getscheduler(0),
- can_set ? policy : init_policy);
+ setscheduler_result != -1 ? policy : init_policy);
ASSERT_ERRNO_SUCCESS();
// Out of bounds priority
@@ -121,17 +123,21 @@ public:
ASSERT_ERRNO_EQ(EINVAL);
LIBC_NAMESPACE::libc_errno = 0;
- // Success / missing permissions
- ASSERT_EQ(LIBC_NAMESPACE::sched_setparam(0, &param), can_set ? 0 : -1);
- ASSERT_TRUE(can_set ? (LIBC_NAMESPACE::libc_errno == 0)
- : (LIBC_NAMESPACE::libc_errno == EINVAL ||
- LIBC_NAMESPACE::libc_errno == EPERM));
+ // Success/unsupported policy/missing permissions
+ int setparam_result = LIBC_NAMESPACE::sched_setparam(0, &param);
+ ASSERT_TRUE(setparam_result == 0 || setparam_result == -1);
+ ASSERT_TRUE(setparam_result != -1
+ ? (LIBC_NAMESPACE::libc_errno == 0)
+ : ((setscheduler_result == -1 &&
+ LIBC_NAMESPACE::libc_errno == EINVAL) ||
+ LIBC_NAMESPACE::libc_errno == EPERM));
LIBC_NAMESPACE::libc_errno = 0;
ASSERT_EQ(LIBC_NAMESPACE::sched_getparam(0, &param), 0);
ASSERT_ERRNO_SUCCESS();
- ASSERT_EQ(param.sched_priority, can_set ? priority : init_priority);
+ ASSERT_EQ(param.sched_priority,
+ setparam_result != -1 ? priority : init_priority);
}
// Null test
@@ -145,12 +151,12 @@ public:
using LlvmLibcSchedTest = SchedTest; \
TEST_F(LlvmLibcSchedTest, Sched_##policy) { testSched(policy, can_set); }
-// Root is required to set these policies.
-LIST_SCHED_TESTS(SCHED_FIFO, LIBC_NAMESPACE::getuid() == 0)
-LIST_SCHED_TESTS(SCHED_RR, LIBC_NAMESPACE::getuid() == 0)
-
-// No root is required to set these policies.
+// Mandated by POSIX.
LIST_SCHED_TESTS(SCHED_OTHER, true)
+LIST_SCHED_TESTS(SCHED_FIFO, true)
+LIST_SCHED_TESTS(SCHED_RR, true)
+
+// Linux extensions.
LIST_SCHED_TESTS(SCHED_BATCH, true)
LIST_SCHED_TESTS(SCHED_IDLE, true)