xref: /xnu-11417.121.6/tests/task_policy.c (revision a1e26a70f38d1d7daa7b49b258e2f8538ad81650)
1*a1e26a70SApple OSS Distributions #include <darwintest.h>
2*a1e26a70SApple OSS Distributions #include <signal.h>
3*a1e26a70SApple OSS Distributions #include <spawn.h>
4*a1e26a70SApple OSS Distributions #include <unistd.h>
5*a1e26a70SApple OSS Distributions 
6*a1e26a70SApple OSS Distributions #include <mach/mach.h>
7*a1e26a70SApple OSS Distributions #include <mach/mach_types.h>
8*a1e26a70SApple OSS Distributions #include <mach/task.h>
9*a1e26a70SApple OSS Distributions #include <mach/task_policy.h>
10*a1e26a70SApple OSS Distributions 
11*a1e26a70SApple OSS Distributions extern char **environ;
12*a1e26a70SApple OSS Distributions 
13*a1e26a70SApple OSS Distributions int task_inspect_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t);
14*a1e26a70SApple OSS Distributions int task_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t);
15*a1e26a70SApple OSS Distributions int task_name_for_pid(mach_port_name_t target_tport, int pid, mach_port_name_t *t);
16*a1e26a70SApple OSS Distributions 
17*a1e26a70SApple OSS Distributions T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true));
18*a1e26a70SApple OSS Distributions 
19*a1e26a70SApple OSS Distributions #if defined(UNENTITLED)
20*a1e26a70SApple OSS Distributions 
21*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_task_name, "task_policy_set with task name (not entitled)", T_META_TAG_VM_PREFERRED)
22*a1e26a70SApple OSS Distributions {
23*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
24*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
25*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
26*a1e26a70SApple OSS Distributions 	};
27*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
28*a1e26a70SApple OSS Distributions 
29*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
30*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(),
31*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
32*a1e26a70SApple OSS Distributions 	T_SETUPEND;
33*a1e26a70SApple OSS Distributions 
34*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_set(task_name,
35*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
36*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
37*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
38*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
39*a1e26a70SApple OSS Distributions }
40*a1e26a70SApple OSS Distributions 
41*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_task, "task_policy_set with task (not entitled)", T_META_TAG_VM_PREFERRED)
42*a1e26a70SApple OSS Distributions {
43*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
44*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
45*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
46*a1e26a70SApple OSS Distributions 	};
47*a1e26a70SApple OSS Distributions 
48*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(mach_task_self(),
49*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
50*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
51*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
52*a1e26a70SApple OSS Distributions 	    NULL);
53*a1e26a70SApple OSS Distributions }
54*a1e26a70SApple OSS Distributions 
55*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_inspect, "task_policy_set with task inspect (not entitled)", T_META_TAG_VM_PREFERRED)
56*a1e26a70SApple OSS Distributions {
57*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
58*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
59*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
60*a1e26a70SApple OSS Distributions 	};
61*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
62*a1e26a70SApple OSS Distributions 
63*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
64*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(),
65*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
66*a1e26a70SApple OSS Distributions 	T_SETUPEND;
67*a1e26a70SApple OSS Distributions 
68*a1e26a70SApple OSS Distributions 
69*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_set(task_inspect,
70*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
71*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
72*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
73*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
74*a1e26a70SApple OSS Distributions }
75*a1e26a70SApple OSS Distributions 
76*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task, "task_policy_set for foreign task (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
77*a1e26a70SApple OSS Distributions {
78*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
79*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
80*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
81*a1e26a70SApple OSS Distributions 	};
82*a1e26a70SApple OSS Distributions 	task_t task = TASK_NULL;
83*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
84*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
85*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
86*a1e26a70SApple OSS Distributions 
87*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
88*a1e26a70SApple OSS Distributions 
89*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
90*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
91*a1e26a70SApple OSS Distributions 
92*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid,
93*a1e26a70SApple OSS Distributions 	    &task), NULL);
94*a1e26a70SApple OSS Distributions 	T_SETUPEND;
95*a1e26a70SApple OSS Distributions 
96*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task,
97*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
98*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
99*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
100*a1e26a70SApple OSS Distributions 	    NULL);
101*a1e26a70SApple OSS Distributions 
102*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
103*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
104*a1e26a70SApple OSS Distributions }
105*a1e26a70SApple OSS Distributions 
106*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task_name, "task_policy_set for foreign task name (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
107*a1e26a70SApple OSS Distributions {
108*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
109*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
110*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
111*a1e26a70SApple OSS Distributions 	};
112*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
113*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
114*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
115*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
116*a1e26a70SApple OSS Distributions 
117*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
118*a1e26a70SApple OSS Distributions 
119*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
120*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
121*a1e26a70SApple OSS Distributions 
122*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid,
123*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
124*a1e26a70SApple OSS Distributions 	T_SETUPEND;
125*a1e26a70SApple OSS Distributions 
126*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_set(task_name,
127*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
128*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
129*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
130*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
131*a1e26a70SApple OSS Distributions 
132*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
133*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
134*a1e26a70SApple OSS Distributions }
135*a1e26a70SApple OSS Distributions 
136*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task_inspect, "task_policy_set for foreign task inspect (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
137*a1e26a70SApple OSS Distributions {
138*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
139*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
140*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
141*a1e26a70SApple OSS Distributions 	};
142*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
143*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
144*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
145*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
146*a1e26a70SApple OSS Distributions 
147*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
148*a1e26a70SApple OSS Distributions 
149*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
150*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
151*a1e26a70SApple OSS Distributions 
152*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid,
153*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
154*a1e26a70SApple OSS Distributions 	T_SETUPEND;
155*a1e26a70SApple OSS Distributions 
156*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_set(task_inspect,
157*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
158*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
159*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
160*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
161*a1e26a70SApple OSS Distributions 
162*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
163*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
164*a1e26a70SApple OSS Distributions }
165*a1e26a70SApple OSS Distributions 
166*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_name, "task_policy_get with task name (not entitled)", T_META_TAG_VM_PREFERRED)
167*a1e26a70SApple OSS Distributions {
168*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
169*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
170*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
171*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
172*a1e26a70SApple OSS Distributions 
173*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
174*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(),
175*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
176*a1e26a70SApple OSS Distributions 	T_SETUPEND;
177*a1e26a70SApple OSS Distributions 
178*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_get(task_name,
179*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
180*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
181*a1e26a70SApple OSS Distributions 	    &count,
182*a1e26a70SApple OSS Distributions 	    &get_default),
183*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
184*a1e26a70SApple OSS Distributions }
185*a1e26a70SApple OSS Distributions 
186*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_task, "task_policy_get with task (not entitled)", T_META_TAG_VM_PREFERRED)
187*a1e26a70SApple OSS Distributions {
188*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
189*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
190*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
191*a1e26a70SApple OSS Distributions 
192*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(mach_task_self(),
193*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
194*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
195*a1e26a70SApple OSS Distributions 	    &count,
196*a1e26a70SApple OSS Distributions 	    &get_default),
197*a1e26a70SApple OSS Distributions 	    NULL);
198*a1e26a70SApple OSS Distributions }
199*a1e26a70SApple OSS Distributions 
200*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_inspect, "task_policy_get with task inspect (not entitled)", T_META_TAG_VM_PREFERRED)
201*a1e26a70SApple OSS Distributions {
202*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
203*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
204*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
205*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
206*a1e26a70SApple OSS Distributions 
207*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
208*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(),
209*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
210*a1e26a70SApple OSS Distributions 	T_SETUPEND;
211*a1e26a70SApple OSS Distributions 
212*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect,
213*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
214*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
215*a1e26a70SApple OSS Distributions 	    &count,
216*a1e26a70SApple OSS Distributions 	    &get_default),
217*a1e26a70SApple OSS Distributions 	    NULL);
218*a1e26a70SApple OSS Distributions }
219*a1e26a70SApple OSS Distributions 
220*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task_inspect, "task_policy_get for foreign task inspect (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
221*a1e26a70SApple OSS Distributions {
222*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
223*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
224*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
225*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
226*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
227*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
228*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
229*a1e26a70SApple OSS Distributions 
230*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
231*a1e26a70SApple OSS Distributions 
232*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
233*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
234*a1e26a70SApple OSS Distributions 
235*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid,
236*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
237*a1e26a70SApple OSS Distributions 	T_SETUPEND;
238*a1e26a70SApple OSS Distributions 
239*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect,
240*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
241*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
242*a1e26a70SApple OSS Distributions 	    &count,
243*a1e26a70SApple OSS Distributions 	    &get_default),
244*a1e26a70SApple OSS Distributions 	    NULL);
245*a1e26a70SApple OSS Distributions 
246*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
247*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
248*a1e26a70SApple OSS Distributions }
249*a1e26a70SApple OSS Distributions 
250*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task, "task_policy_get for foreign task (not entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
251*a1e26a70SApple OSS Distributions {
252*a1e26a70SApple OSS Distributions 	task_t task = TASK_NULL;
253*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
254*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
255*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
256*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
257*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
258*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
259*a1e26a70SApple OSS Distributions 
260*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
261*a1e26a70SApple OSS Distributions 
262*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
263*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
264*a1e26a70SApple OSS Distributions 
265*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid,
266*a1e26a70SApple OSS Distributions 	    &task), NULL);
267*a1e26a70SApple OSS Distributions 	T_SETUPEND;
268*a1e26a70SApple OSS Distributions 
269*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task,
270*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
271*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
272*a1e26a70SApple OSS Distributions 	    &count,
273*a1e26a70SApple OSS Distributions 	    &get_default),
274*a1e26a70SApple OSS Distributions 	    NULL);
275*a1e26a70SApple OSS Distributions 
276*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
277*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
278*a1e26a70SApple OSS Distributions }
279*a1e26a70SApple OSS Distributions 
280*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task_name, "task_policy_get for foreign task name (not entitled)", T_META_TAG_VM_PREFERRED)
281*a1e26a70SApple OSS Distributions {
282*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
283*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
284*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
285*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
286*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
287*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
288*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
289*a1e26a70SApple OSS Distributions 
290*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
291*a1e26a70SApple OSS Distributions 
292*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
293*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
294*a1e26a70SApple OSS Distributions 
295*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid,
296*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
297*a1e26a70SApple OSS Distributions 	T_SETUPEND;
298*a1e26a70SApple OSS Distributions 
299*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_ERROR(task_policy_get(task_name,
300*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
301*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
302*a1e26a70SApple OSS Distributions 	    &count,
303*a1e26a70SApple OSS Distributions 	    &get_default),
304*a1e26a70SApple OSS Distributions 	    KERN_INVALID_ARGUMENT, NULL);
305*a1e26a70SApple OSS Distributions 
306*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
307*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
308*a1e26a70SApple OSS Distributions }
309*a1e26a70SApple OSS Distributions 
310*a1e26a70SApple OSS Distributions #else /* ENTITLED */
311*a1e26a70SApple OSS Distributions 
312*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_task_name_entitled, "task_policy_set with task name (entitled)", T_META_ASROOT(true), T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
313*a1e26a70SApple OSS Distributions {
314*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
315*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
316*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
317*a1e26a70SApple OSS Distributions 	};
318*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
319*a1e26a70SApple OSS Distributions 
320*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
321*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(),
322*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
323*a1e26a70SApple OSS Distributions 	T_SETUPEND;
324*a1e26a70SApple OSS Distributions 
325*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task_name,
326*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
327*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
328*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
329*a1e26a70SApple OSS Distributions 	    NULL);
330*a1e26a70SApple OSS Distributions }
331*a1e26a70SApple OSS Distributions 
332*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_task_entitled, "task_policy_set with task (entitled)", T_META_TAG_VM_PREFERRED)
333*a1e26a70SApple OSS Distributions {
334*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
335*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
336*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
337*a1e26a70SApple OSS Distributions 	};
338*a1e26a70SApple OSS Distributions 
339*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(mach_task_self(),
340*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
341*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
342*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
343*a1e26a70SApple OSS Distributions 	    NULL);
344*a1e26a70SApple OSS Distributions }
345*a1e26a70SApple OSS Distributions 
346*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_inspect_entitled, "task_policy_set with task inspect (entitled)", T_META_TAG_VM_PREFERRED)
347*a1e26a70SApple OSS Distributions {
348*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
349*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
350*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
351*a1e26a70SApple OSS Distributions 	};
352*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
353*a1e26a70SApple OSS Distributions 
354*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
355*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(),
356*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
357*a1e26a70SApple OSS Distributions 	T_SETUPEND;
358*a1e26a70SApple OSS Distributions 
359*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task_inspect,
360*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
361*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
362*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
363*a1e26a70SApple OSS Distributions 	    NULL);
364*a1e26a70SApple OSS Distributions }
365*a1e26a70SApple OSS Distributions 
366*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task_entitled, "task_policy_set for foreign task (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
367*a1e26a70SApple OSS Distributions {
368*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
369*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
370*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
371*a1e26a70SApple OSS Distributions 	};
372*a1e26a70SApple OSS Distributions 	task_t task = TASK_NULL;
373*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
374*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
375*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
376*a1e26a70SApple OSS Distributions 
377*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
378*a1e26a70SApple OSS Distributions 
379*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
380*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
381*a1e26a70SApple OSS Distributions 
382*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid,
383*a1e26a70SApple OSS Distributions 	    &task), NULL);
384*a1e26a70SApple OSS Distributions 	T_SETUPEND;
385*a1e26a70SApple OSS Distributions 
386*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task,
387*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
388*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
389*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
390*a1e26a70SApple OSS Distributions 	    NULL);
391*a1e26a70SApple OSS Distributions 
392*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
393*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
394*a1e26a70SApple OSS Distributions }
395*a1e26a70SApple OSS Distributions 
396*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task_name_entitled, "task_policy_set for foreign task name (entitled)", T_META_ASROOT(true), T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
397*a1e26a70SApple OSS Distributions {
398*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
399*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
400*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
401*a1e26a70SApple OSS Distributions 	};
402*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
403*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
404*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
405*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
406*a1e26a70SApple OSS Distributions 
407*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
408*a1e26a70SApple OSS Distributions 
409*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
410*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
411*a1e26a70SApple OSS Distributions 
412*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid,
413*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
414*a1e26a70SApple OSS Distributions 	T_SETUPEND;
415*a1e26a70SApple OSS Distributions 
416*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task_name,
417*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
418*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
419*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
420*a1e26a70SApple OSS Distributions 	    NULL);
421*a1e26a70SApple OSS Distributions 
422*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
423*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
424*a1e26a70SApple OSS Distributions }
425*a1e26a70SApple OSS Distributions 
426*a1e26a70SApple OSS Distributions T_DECL(task_policy_set_foreign_task_inspect_entitled, "task_policy_set for foreign task inspect (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
427*a1e26a70SApple OSS Distributions {
428*a1e26a70SApple OSS Distributions 	struct task_qos_policy qosinfo = {
429*a1e26a70SApple OSS Distributions 		.task_latency_qos_tier = LATENCY_QOS_TIER_0,
430*a1e26a70SApple OSS Distributions 		.task_throughput_qos_tier = THROUGHPUT_QOS_TIER_0,
431*a1e26a70SApple OSS Distributions 	};
432*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
433*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
434*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
435*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
436*a1e26a70SApple OSS Distributions 
437*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
438*a1e26a70SApple OSS Distributions 
439*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
440*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
441*a1e26a70SApple OSS Distributions 
442*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid,
443*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
444*a1e26a70SApple OSS Distributions 	T_SETUPEND;
445*a1e26a70SApple OSS Distributions 
446*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_set(task_inspect,
447*a1e26a70SApple OSS Distributions 	    TASK_BASE_QOS_POLICY,
448*a1e26a70SApple OSS Distributions 	    (task_policy_t)&qosinfo,
449*a1e26a70SApple OSS Distributions 	    TASK_QOS_POLICY_COUNT),
450*a1e26a70SApple OSS Distributions 	    NULL);
451*a1e26a70SApple OSS Distributions 
452*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
453*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
454*a1e26a70SApple OSS Distributions }
455*a1e26a70SApple OSS Distributions 
456*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_name_entitled, "task_policy_get with task name (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
457*a1e26a70SApple OSS Distributions {
458*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
459*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
460*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
461*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
462*a1e26a70SApple OSS Distributions 
463*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
464*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), getpid(),
465*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
466*a1e26a70SApple OSS Distributions 	T_SETUPEND;
467*a1e26a70SApple OSS Distributions 
468*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_name,
469*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
470*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
471*a1e26a70SApple OSS Distributions 	    &count,
472*a1e26a70SApple OSS Distributions 	    &get_default),
473*a1e26a70SApple OSS Distributions 	    NULL);
474*a1e26a70SApple OSS Distributions }
475*a1e26a70SApple OSS Distributions 
476*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_task_entitled, "task_policy_get with task (entitled)", T_META_TAG_VM_PREFERRED)
477*a1e26a70SApple OSS Distributions {
478*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
479*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
480*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
481*a1e26a70SApple OSS Distributions 
482*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(mach_task_self(),
483*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
484*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
485*a1e26a70SApple OSS Distributions 	    &count,
486*a1e26a70SApple OSS Distributions 	    &get_default),
487*a1e26a70SApple OSS Distributions 	    NULL);
488*a1e26a70SApple OSS Distributions }
489*a1e26a70SApple OSS Distributions 
490*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_inspect_entitled, "task_policy_get with task inspect (entitled)", T_META_TAG_VM_PREFERRED)
491*a1e26a70SApple OSS Distributions {
492*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
493*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
494*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
495*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
496*a1e26a70SApple OSS Distributions 
497*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
498*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), getpid(),
499*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
500*a1e26a70SApple OSS Distributions 	T_SETUPEND;
501*a1e26a70SApple OSS Distributions 
502*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect,
503*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
504*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
505*a1e26a70SApple OSS Distributions 	    &count,
506*a1e26a70SApple OSS Distributions 	    &get_default),
507*a1e26a70SApple OSS Distributions 	    NULL);
508*a1e26a70SApple OSS Distributions }
509*a1e26a70SApple OSS Distributions 
510*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task_inspect_entitled, "task_policy_get for foreign task inspect (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
511*a1e26a70SApple OSS Distributions {
512*a1e26a70SApple OSS Distributions 	task_inspect_t task_inspect = TASK_INSPECT_NULL;
513*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
514*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
515*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
516*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
517*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
518*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
519*a1e26a70SApple OSS Distributions 
520*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
521*a1e26a70SApple OSS Distributions 
522*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
523*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
524*a1e26a70SApple OSS Distributions 
525*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_inspect_for_pid(mach_task_self(), pid,
526*a1e26a70SApple OSS Distributions 	    &task_inspect), NULL);
527*a1e26a70SApple OSS Distributions 	T_SETUPEND;
528*a1e26a70SApple OSS Distributions 
529*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_inspect,
530*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
531*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
532*a1e26a70SApple OSS Distributions 	    &count,
533*a1e26a70SApple OSS Distributions 	    &get_default),
534*a1e26a70SApple OSS Distributions 	    NULL);
535*a1e26a70SApple OSS Distributions 
536*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
537*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
538*a1e26a70SApple OSS Distributions }
539*a1e26a70SApple OSS Distributions 
540*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task_entitled, "task_policy_get for foreign task (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
541*a1e26a70SApple OSS Distributions {
542*a1e26a70SApple OSS Distributions 	task_t task = TASK_NULL;
543*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
544*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
545*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
546*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
547*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
548*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
549*a1e26a70SApple OSS Distributions 
550*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
551*a1e26a70SApple OSS Distributions 
552*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
553*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
554*a1e26a70SApple OSS Distributions 
555*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_for_pid(mach_task_self(), pid,
556*a1e26a70SApple OSS Distributions 	    &task), NULL);
557*a1e26a70SApple OSS Distributions 	T_SETUPEND;
558*a1e26a70SApple OSS Distributions 
559*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task,
560*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
561*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
562*a1e26a70SApple OSS Distributions 	    &count,
563*a1e26a70SApple OSS Distributions 	    &get_default),
564*a1e26a70SApple OSS Distributions 	    NULL);
565*a1e26a70SApple OSS Distributions 
566*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
567*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
568*a1e26a70SApple OSS Distributions }
569*a1e26a70SApple OSS Distributions 
570*a1e26a70SApple OSS Distributions T_DECL(task_policy_get_foreign_task_name_entitled, "task_policy_get for foreign task name (entitled)", T_META_ASROOT(true), T_META_TAG_VM_PREFERRED)
571*a1e26a70SApple OSS Distributions {
572*a1e26a70SApple OSS Distributions 	task_name_t task_name = TASK_NAME_NULL;
573*a1e26a70SApple OSS Distributions 	struct task_category_policy role[TASK_CATEGORY_POLICY_COUNT];
574*a1e26a70SApple OSS Distributions 	mach_msg_type_number_t count = TASK_CATEGORY_POLICY_COUNT;
575*a1e26a70SApple OSS Distributions 	boolean_t get_default = FALSE;
576*a1e26a70SApple OSS Distributions 	kern_return_t ret = KERN_FAILURE;
577*a1e26a70SApple OSS Distributions 	char *args[] = { "sleep", "10", NULL };
578*a1e26a70SApple OSS Distributions 	pid_t pid = 0;
579*a1e26a70SApple OSS Distributions 
580*a1e26a70SApple OSS Distributions 	T_SETUPBEGIN;
581*a1e26a70SApple OSS Distributions 
582*a1e26a70SApple OSS Distributions 	ret = posix_spawnp(&pid, args[0], NULL, NULL, args, environ);
583*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "spawning sleep 10");
584*a1e26a70SApple OSS Distributions 
585*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_name_for_pid(mach_task_self(), pid,
586*a1e26a70SApple OSS Distributions 	    &task_name), NULL);
587*a1e26a70SApple OSS Distributions 	T_SETUPEND;
588*a1e26a70SApple OSS Distributions 
589*a1e26a70SApple OSS Distributions 	T_ASSERT_MACH_SUCCESS(task_policy_get(task_name,
590*a1e26a70SApple OSS Distributions 	    TASK_CATEGORY_POLICY,
591*a1e26a70SApple OSS Distributions 	    (task_policy_t)role,
592*a1e26a70SApple OSS Distributions 	    &count,
593*a1e26a70SApple OSS Distributions 	    &get_default),
594*a1e26a70SApple OSS Distributions 	    NULL);
595*a1e26a70SApple OSS Distributions 
596*a1e26a70SApple OSS Distributions 	ret = kill(pid, SIGTERM);
597*a1e26a70SApple OSS Distributions 	T_QUIET; T_ASSERT_POSIX_ZERO(ret, "killing sleep");
598*a1e26a70SApple OSS Distributions }
599*a1e26a70SApple OSS Distributions 
600*a1e26a70SApple OSS Distributions #endif /* UNENTITLED */
601