1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <unittest/unittest.h> 6#include <zircon/process.h> 7#include <zircon/syscalls.h> 8 9extern zx_handle_t get_root_resource(void); 10 11 12static bool make_profile_fails(void) { 13 BEGIN_TEST; 14 15 zx_handle_t rrh = get_root_resource(); 16 if (rrh == ZX_HANDLE_INVALID) { 17 unittest_printf("no root resource. skipping test\n"); 18 } else { 19 zx_handle_t profile; 20 21 ASSERT_EQ(zx_profile_create(rrh, NULL, &profile), ZX_ERR_INVALID_ARGS, ""); 22 ASSERT_EQ(zx_profile_create(ZX_HANDLE_INVALID, NULL, &profile), ZX_ERR_BAD_HANDLE, ""); 23 24 zx_profile_info_t profile_info = { 0 }; 25 ASSERT_EQ(zx_profile_create(rrh, &profile_info, &profile), ZX_ERR_NOT_SUPPORTED, ""); 26 27 profile_info.type = ZX_PROFILE_INFO_SCHEDULER; 28 profile_info.scheduler.priority = ZX_PRIORITY_HIGHEST + 1; 29 ASSERT_EQ(zx_profile_create(rrh, &profile_info, &profile), ZX_ERR_INVALID_ARGS, ""); 30 } 31 32 END_TEST; 33} 34 35static bool change_priority_via_profile(void) { 36 BEGIN_TEST; 37 38 zx_handle_t rrh = get_root_resource(); 39 if (rrh == ZX_HANDLE_INVALID) { 40 unittest_printf("no root resource. skipping test\n"); 41 } else { 42 zx_profile_info_t profile_info = { 0 }; 43 profile_info.type = ZX_PROFILE_INFO_SCHEDULER; 44 45 zx_handle_t profile1; 46 profile_info.scheduler.priority = ZX_PRIORITY_HIGH; 47 ASSERT_EQ(zx_profile_create(rrh, &profile_info, &profile1), ZX_OK, ""); 48 49 zx_handle_t profile2; 50 profile_info.scheduler.priority = ZX_PRIORITY_DEFAULT; 51 ASSERT_EQ(zx_profile_create(rrh, &profile_info, &profile2), ZX_OK, ""); 52 53 ASSERT_EQ(zx_object_set_profile(zx_thread_self(), profile1, 0), ZX_OK, ""); 54 zx_nanosleep(ZX_USEC(100)); 55 ASSERT_EQ(zx_object_set_profile(zx_thread_self(), profile2, 0), ZX_OK, ""); 56 57 ASSERT_EQ(zx_handle_close(profile1), ZX_OK, ""); 58 ASSERT_EQ(zx_handle_close(profile2), ZX_OK, ""); 59 } 60 61 END_TEST; 62} 63 64BEGIN_TEST_CASE(profile_tests) 65RUN_TEST(make_profile_fails) 66RUN_TEST(change_priority_via_profile) 67END_TEST_CASE(profile_tests) 68