153a5a1b3Sopenharmony_ci/*** 253a5a1b3Sopenharmony_ci This file is part of PulseAudio. 353a5a1b3Sopenharmony_ci 453a5a1b3Sopenharmony_ci PulseAudio is free software; you can redistribute it and/or modify 553a5a1b3Sopenharmony_ci it under the terms of the GNU Lesser General Public License as 653a5a1b3Sopenharmony_ci published by the Free Software Foundation; either version 2.1 of the 753a5a1b3Sopenharmony_ci License, or (at your option) any later version. 853a5a1b3Sopenharmony_ci 953a5a1b3Sopenharmony_ci PulseAudio is distributed in the hope that it will be useful, but 1053a5a1b3Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 1153a5a1b3Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1253a5a1b3Sopenharmony_ci General Public License for more details. 1353a5a1b3Sopenharmony_ci 1453a5a1b3Sopenharmony_ci You should have received a copy of the GNU Lesser General Public 1553a5a1b3Sopenharmony_ci License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 1653a5a1b3Sopenharmony_ci***/ 1753a5a1b3Sopenharmony_ci 1853a5a1b3Sopenharmony_ci#ifdef HAVE_CONFIG_H 1953a5a1b3Sopenharmony_ci#include <config.h> 2053a5a1b3Sopenharmony_ci#endif 2153a5a1b3Sopenharmony_ci 2253a5a1b3Sopenharmony_ci#include <assert.h> 2353a5a1b3Sopenharmony_ci#include <time.h> 2453a5a1b3Sopenharmony_ci#include <stdlib.h> 2553a5a1b3Sopenharmony_ci#include <stdio.h> 2653a5a1b3Sopenharmony_ci#include <signal.h> 2753a5a1b3Sopenharmony_ci 2853a5a1b3Sopenharmony_ci#include <check.h> 2953a5a1b3Sopenharmony_ci 3053a5a1b3Sopenharmony_ci#include <pulse/mainloop.h> 3153a5a1b3Sopenharmony_ci 3253a5a1b3Sopenharmony_ci#ifdef TEST2 3353a5a1b3Sopenharmony_ci#include <pulse/mainloop-signal.h> 3453a5a1b3Sopenharmony_ci#endif 3553a5a1b3Sopenharmony_ci 3653a5a1b3Sopenharmony_ci#include <daemon/cpulimit.h> 3753a5a1b3Sopenharmony_ci 3853a5a1b3Sopenharmony_ci/* A simple example for testing the cpulimit subsystem */ 3953a5a1b3Sopenharmony_ci 4053a5a1b3Sopenharmony_cistatic time_t start; 4153a5a1b3Sopenharmony_ci 4253a5a1b3Sopenharmony_ci#ifdef TEST2 4353a5a1b3Sopenharmony_ci 4453a5a1b3Sopenharmony_cistatic void func(pa_mainloop_api *m, pa_signal_event *e, int sig, void *userdata) { 4553a5a1b3Sopenharmony_ci time_t now; 4653a5a1b3Sopenharmony_ci time(&now); 4753a5a1b3Sopenharmony_ci 4853a5a1b3Sopenharmony_ci if ((now - start) >= 30) { 4953a5a1b3Sopenharmony_ci m->quit(m, 1); 5053a5a1b3Sopenharmony_ci fprintf(stderr, "Test failed\n"); 5153a5a1b3Sopenharmony_ci ck_abort(); 5253a5a1b3Sopenharmony_ci } else 5353a5a1b3Sopenharmony_ci raise(SIGUSR1); 5453a5a1b3Sopenharmony_ci} 5553a5a1b3Sopenharmony_ci 5653a5a1b3Sopenharmony_ci#endif 5753a5a1b3Sopenharmony_ci 5853a5a1b3Sopenharmony_ciSTART_TEST (cpulimit_test) { 5953a5a1b3Sopenharmony_ci pa_mainloop *m; 6053a5a1b3Sopenharmony_ci 6153a5a1b3Sopenharmony_ci m = pa_mainloop_new(); 6253a5a1b3Sopenharmony_ci fail_unless(m != NULL); 6353a5a1b3Sopenharmony_ci 6453a5a1b3Sopenharmony_ci pa_cpu_limit_init(pa_mainloop_get_api(m)); 6553a5a1b3Sopenharmony_ci 6653a5a1b3Sopenharmony_ci time(&start); 6753a5a1b3Sopenharmony_ci 6853a5a1b3Sopenharmony_ci#ifdef TEST2 6953a5a1b3Sopenharmony_ci pa_signal_init(pa_mainloop_get_api(m)); 7053a5a1b3Sopenharmony_ci pa_signal_new(SIGUSR1, func, NULL); 7153a5a1b3Sopenharmony_ci raise(SIGUSR1); 7253a5a1b3Sopenharmony_ci pa_mainloop_run(m, NULL); 7353a5a1b3Sopenharmony_ci pa_signal_done(); 7453a5a1b3Sopenharmony_ci#else 7553a5a1b3Sopenharmony_ci for (;;) { 7653a5a1b3Sopenharmony_ci time_t now; 7753a5a1b3Sopenharmony_ci time(&now); 7853a5a1b3Sopenharmony_ci 7953a5a1b3Sopenharmony_ci if ((now - start) >= 30) { 8053a5a1b3Sopenharmony_ci fprintf(stderr, "Test failed\n"); 8153a5a1b3Sopenharmony_ci ck_abort(); 8253a5a1b3Sopenharmony_ci break; 8353a5a1b3Sopenharmony_ci } 8453a5a1b3Sopenharmony_ci } 8553a5a1b3Sopenharmony_ci#endif 8653a5a1b3Sopenharmony_ci 8753a5a1b3Sopenharmony_ci pa_cpu_limit_done(); 8853a5a1b3Sopenharmony_ci 8953a5a1b3Sopenharmony_ci pa_mainloop_free(m); 9053a5a1b3Sopenharmony_ci} 9153a5a1b3Sopenharmony_ciEND_TEST 9253a5a1b3Sopenharmony_ci 9353a5a1b3Sopenharmony_ciint main(int argc, char *argv[]) { 9453a5a1b3Sopenharmony_ci int failed = 0; 9553a5a1b3Sopenharmony_ci Suite *s; 9653a5a1b3Sopenharmony_ci TCase *tc; 9753a5a1b3Sopenharmony_ci SRunner *sr; 9853a5a1b3Sopenharmony_ci 9953a5a1b3Sopenharmony_ci s = suite_create("CPU Limit"); 10053a5a1b3Sopenharmony_ci tc = tcase_create("cpulimit"); 10153a5a1b3Sopenharmony_ci tcase_add_test(tc, cpulimit_test); 10253a5a1b3Sopenharmony_ci suite_add_tcase(s, tc); 10353a5a1b3Sopenharmony_ci 10453a5a1b3Sopenharmony_ci sr = srunner_create(s); 10553a5a1b3Sopenharmony_ci srunner_run_all(sr, CK_NORMAL); 10653a5a1b3Sopenharmony_ci failed = srunner_ntests_failed(sr); 10753a5a1b3Sopenharmony_ci srunner_free(sr); 10853a5a1b3Sopenharmony_ci 10953a5a1b3Sopenharmony_ci return (failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 11053a5a1b3Sopenharmony_ci} 111