Thanks for thinking about writing tests!

:)

[email protected], le lun. 27 avril 2026 00:07:13 +0100, a ecrit:
> From: Diego Nieto Cid <[email protected]>
> 
> ---
>  tests/test-task.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 106 insertions(+)
> 
> diff --git a/tests/test-task.c b/tests/test-task.c
> index cbc75e23..4be9c193 100644
> --- a/tests/test-task.c
> +++ b/tests/test-task.c
> @@ -27,6 +27,7 @@
>  
>  #include <gnumach.user.h>
>  #include <mach.user.h>
> +#include <mach_host.user.h>
>  
>  
>  void test_task()
> @@ -160,6 +161,110 @@ int test_errors()
>      ASSERT(err == MACH_SEND_INVALID_DEST, "task DEAD");
>  }
>  
> +void test_priority()
> +{
> +/* XXX cannot include <kern/sched.h> */
> +#define BASEPRI_USER 25
> +  kern_return_t err;
> +  struct task_basic_info     tk_binfo;
> +  struct thread_sched_info   th_sinfo;
> +  int                                count;
> +  thread_t                   new_th;
> +
> +  /* Get current task priority */
> +  count = TASK_BASIC_INFO_COUNT;
> +  err = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&tk_binfo, 
> &count);
> +  ASSERT_RET(err, "TASK_BASIC_INFO failed!");
> +  printf("initial base priority is %d\n", tk_binfo.base_priority);
> +  ASSERT(tk_binfo.base_priority == BASEPRI_USER, "(task) Unexpected initial 
> base priority");
> +
> +  err = task_priority(mach_task_self(), 5, 0);
> +  ASSERT_RET(err, "task_priority (5, 0) failed");
> +
> +  err = task_priority(mach_task_self(), 5, 1);
> +  ASSERT(err != KERN_SUCCESS, "task_priority (5, 1) succeeded!");
> +
> +  /* Get current task priority */
> +  count = TASK_BASIC_INFO_COUNT;
> +  err = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&tk_binfo, 
> &count);
> +  ASSERT_RET(err, "TASK_BASIC_INFO failed!");
> +  ASSERT(tk_binfo.base_priority == 5,
> +    "(task) previous call to task_priority didn't set base priority");
> +
> +  /* Restore base priority */
> +  err = task_priority(mach_task_self(), BASEPRI_USER, 0);
> +  ASSERT_RET(err, "task_priority (BASEPRI_USER, 0) failed");
> +
> +  /* Get current thread priority */
> +  count = THREAD_SCHED_INFO_COUNT;
> +  err = thread_info(mach_thread_self(), THREAD_SCHED_INFO, 
> (thread_info_t)&th_sinfo, &count);
> +  ASSERT_RET(err, "THREAD_SCHED_INFO failed!");
> +  ASSERT(th_sinfo.base_priority == BASEPRI_USER, "(thread) Unexpected 
> initial base priority");
> +  ASSERT(th_sinfo.max_priority == BASEPRI_USER, "(thread) Unexpected initial 
> max priority");
> +
> +  err = task_priority_override(mach_host_self(), mach_task_self(), 5);
> +  ASSERT(err == KERN_INVALID_ARGUMENT,
> +    "task_priority_override must require the host privileged port");
> +
> +  err = task_priority_override(host_priv(), mach_task_self(), 5);
> +  ASSERT_RET(err, "task_priority_override (5) failed");
> +
> +  /* Get updated task priority */
> +  count = TASK_BASIC_INFO_COUNT;
> +  err = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&tk_binfo, 
> &count);
> +  ASSERT_RET(err, "TASK_BASIC_INFO failed!");
> +  ASSERT(tk_binfo.base_priority == 5, "Priority not updated");
> +
> +  /* Get updated thread priority */
> +  count = THREAD_SCHED_INFO_COUNT;
> +  err = thread_info(mach_thread_self(), THREAD_SCHED_INFO, 
> (thread_info_t)&th_sinfo, &count);
> +  ASSERT_RET(err, "THREAD_SCHED_INFO failed!");
> +  printf("(thread) updated base priority is %d\n", th_sinfo.base_priority);
> +  ASSERT(th_sinfo.base_priority == 5, "(thread) Unexpected updated base 
> priority");
> +  ASSERT(th_sinfo.max_priority == 5, "(thread) Unexpected updated max 
> priority");
> +
> +  err = thread_create(mach_task_self(), &new_th);
> +  ASSERT_RET(err, "thread_create failed");
> +
> +  /* Get new thread priority */
> +  count = THREAD_SCHED_INFO_COUNT;
> +  err = thread_info(new_th, THREAD_SCHED_INFO, (thread_info_t)&th_sinfo, 
> &count);
> +  ASSERT_RET(err, "THREAD_SCHED_INFO failed!");
> +  printf("(new thread) initial base priority is %d\n", 
> th_sinfo.base_priority);
> +  ASSERT(th_sinfo.base_priority == 5, "(new thread) Unexpected initial base 
> priority");
> +  ASSERT(th_sinfo.max_priority == 5, "(new thread) Unexpected initial max 
> priority");
> +
> +  /* Restore priorities */
> +  err = task_priority_override(host_priv(), mach_task_self(), BASEPRI_USER);
> +  ASSERT_RET(err, "task_priority_override (BASEPRI_USER) failed");
> +
> +  /* Check new thread priority was updated */
> +  count = THREAD_SCHED_INFO_COUNT;
> +  err = thread_info(new_th, THREAD_SCHED_INFO, (thread_info_t)&th_sinfo, 
> &count);
> +  ASSERT_RET(err, "THREAD_SCHED_INFO failed!");
> +  printf("(new thread) updated base priority is %d\n", 
> th_sinfo.base_priority);
> +  ASSERT(th_sinfo.base_priority == BASEPRI_USER, "(new thread) Unexpected 
> updated base priority");
> +  /*
> +   * Here we still expect the updated max priority. The new priority set 
> above
> +   * is bigger than the previous one therefore the max_priority of the thread
> +   * is not adjusted.
> +   */
> +  ASSERT(th_sinfo.max_priority == 5, "(new thread) Unexpected updated max 
> priority");
> +
> +  err = thread_priority(new_th, BASEPRI_USER, TRUE);
> +  ASSERT_RET(err, "thread_priority failed!");
> +
> +  /* Check new thread's max priority was updated */
> +  count = THREAD_SCHED_INFO_COUNT;
> +  err = thread_info(new_th, THREAD_SCHED_INFO, (thread_info_t)&th_sinfo, 
> &count);
> +  ASSERT_RET(err, "THREAD_SCHED_INFO failed!");
> +  printf("(new thread) updated max priority is %d\n", th_sinfo.max_priority);
> +  ASSERT(th_sinfo.max_priority == BASEPRI_USER, "(new thread) Unexpected 
> updated base priority");
> +
> +  err = thread_terminate(new_th);
> +  ASSERT_RET(err, "thread_terminate failed");
> +#undef BASEPRI_USER
> +}
>  
>  int main(int argc, char *argv[], int envc, char *envp[])
>  {
> @@ -167,5 +272,6 @@ int main(int argc, char *argv[], int envc, char *envp[])
>    test_task_threads();
>    test_new_task();
>    test_errors();
> +  test_priority();
>    return 0;
>  }
> -- 
> 2.53.0
> 
> 

-- 
Samuel
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

Reply via email to