[LTP] [PATCH] open_posix_testsuite/pthread_attr_init

Lucas Boehm lucas@opentech.at
Thu Oct 12 16:45:04 CEST 2017


new test of checking default attr of phtread_attr_init()

Linux specific implementation

Signed-off-by: Lucas Boehm <lucas@opentech.at>
---
 .../conformance/interfaces/pthread_attr_init/1-2.c | 126 +++++++++++++++++++++
 1 file changed, 126 insertions(+)
 create mode 100644 testcases/open_posix_testsuite/conformance/interfaces/pthread_attr_init/1-2.c

diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_attr_init/1-2.c b/testcases/open_posix_testsuite/conformance/interfaces/pthread_attr_init/1-2.c
new file mode 100644
index 000000000..ec740e78c
--- /dev/null
+++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_attr_init/1-2.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2017, Opentech EDV Research GmbH. All rights reserved.
+ * Created by:  lucas AT opentech DOT at
+ * This file is licensed under the GPL license.  For the full content
+ * of this license, see the COPYING file at the top level of this
+ * source tree.
+
+ * Test that pthread_attr_init()
+ *  shall initialize a thread attributes object 'attr' with the default value
+ *  for all the individual attributes used by a given implementation.
+
+ *  Detache state:
+ *  The default setting of the detach state attribute in a newly initialized 
+ *  thread attributes object is PTHREAD_CREATE_JOINABLE.
+ *  (man pthread_attr_getdetachstate)
+ *  
+ *  Scope:
+ *  Linux supports PTHREAD_SCOPE_SYSTEM, but not PTHREAD_SCOPE_PROCESS.
+ *  (man pthread_attr_setscope)
+ *  
+ *  Inherit Scheduler: 	
+ *  The default setting of the inherit-scheduler attribute in a newly 
+ *  initialized thread attributes object is PTHREAD_INHERIT_SCHED.
+ *  (man phread_attr_getinheritsched)
+ *
+ *  Scheduling Policy:
+ *  SCHED_OTHER is the standard Linux time-sharing scheduler that is
+ *  intended for all threads that do not require the special real-time 
+ *  mechanisms. 
+ *  (man sched)
+ *
+ * Scheduling Priority:
+ * For threads scheduled under one of the normal scheduling policies 
+ * (SCHED_OTHER, SCHED_IDLE, SCHED_BATCH), sched_priority is not used 
+ * in scheduling decisions (it must be specified as 0)
+ * (man sched) 
+ *
+ * Steps:
+ * 1.  Initialize a pthread_attr_t object using pthread_attr_init()
+ * 2.  Using pthread_attr_getdetachstate(), test that the default value
+ *     of the detachstate is PTHREAD_CREATE_JOINABLE (the default).
+ * 3.  Using pthread_attr_getscope(), test that the default value
+ *     of the scope is PTHREAD_SCOPE_SYSTEM (the default).
+ * 4.  Using pthread_attr_getinheritsched(), test that the default value
+ *     of the Inherit scheduler is PTHREAD_INHERIT_SCHED (the default).
+ * 5.  Using pthread_attr_getschedpolicy(), test that the default value
+ *     of the sched_policy is SCHED_OTHER (the default).
+ * 6.  Using pthread_attr_getschedparam(), test that the default value
+ *     of the sched_priority is 0 (the default).
+ */
+
+#include <pthread.h>
+#include <stdio.h>
+#include "posixtest.h"
+
+
+int main(void)
+{
+	pthread_attr_t new_attr;
+	int detach_state;
+	int scope;
+	int inherit_sched;
+	int sched_policy;
+	struct sched_param sched_priority;
+
+
+	/* Initialize attribute */
+	if (pthread_attr_init(&new_attr) != 0) {
+		perror("Cannot initialize attribute object\n");
+		return PTS_UNRESOLVED;
+	}
+
+	/* The test passes if the attribute object has a detachstate of
+	 * PTHREAD_CREATE_JOINABLE, which is the default value for this
+	 * attribute. */
+	if (pthread_attr_getdetachstate(&new_attr, &detach_state) != 0) {
+		perror("Error obtaining the detachstate of the attribute\n");
+		return PTS_UNRESOLVED;
+	}
+
+	/* The test passes if the attribute object has a scope of
+	 * PTHREAD_SCOPE_SYSTEM, which is the default value for this
+	 * attribute. */
+	if (pthread_attr_getscope(&new_attr, &scope) != 0) {
+		perror("Error obtaining the scope of the attribute\n");
+		return PTS_UNRESOLVED;
+	}
+
+	/* The test passes if the attribute object has a inherit sched of
+	 * PTHREAD_INHERIT_SCHED, which is the default value for this
+	 * attribute. */
+	if (pthread_attr_getinheritsched(&new_attr, &inherit_sched) != 0) {
+		perror("Error obtaining the inherit scheduling of the attribute\n");
+		return PTS_UNRESOLVED;
+	}
+
+	/* The test passes if the attribute object has a sched policy of
+	 * SCHED_OTHER, which is the default value for this
+	 * attribute. */
+	if (pthread_attr_getschedpolicy(&new_attr, &sched_policy) != 0) {
+		perror("Error obtaining the sched policy of the attribute\n");
+		return PTS_UNRESOLVED;
+	}
+
+	/* The test passes if the attribute object has a inherit sched of
+	 * pthread_attr_getschedparam, which is the default value for this
+	 * attribute. */
+	if (pthread_attr_getschedparam(&new_attr, &sched_priority) != 0) {
+		perror("Error obtaining the sched policy of the attribute\n");
+		return PTS_UNRESOLVED;
+	}
+
+	if (
+		detach_state == PTHREAD_CREATE_JOINABLE && \
+		scope == PTHREAD_SCOPE_SYSTEM && \
+		inherit_sched == PTHREAD_INHERIT_SCHED && \
+		sched_policy == SCHED_OTHER && \
+		sched_priority.sched_priority == 0) {
+		printf("Test PASSED\n");
+		return PTS_PASS;
+	}
+	else {
+		printf("Test FAILED\n");
+		return PTS_FAIL;
+	}
+}
-- 
2.11.0



More information about the ltp mailing list