1*4d495c6eSApple OSS Distributions /*
2*4d495c6eSApple OSS Distributions * Copyright (c) 2000-2024 Apple Inc. All rights reserved.
3*4d495c6eSApple OSS Distributions *
4*4d495c6eSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*4d495c6eSApple OSS Distributions *
6*4d495c6eSApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code
7*4d495c6eSApple OSS Distributions * as defined in and that are subject to the Apple Public Source License
8*4d495c6eSApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in
9*4d495c6eSApple OSS Distributions * compliance with the License. The rights granted to you under the License
10*4d495c6eSApple OSS Distributions * may not be used to create, or enable the creation or redistribution of,
11*4d495c6eSApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to
12*4d495c6eSApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any
13*4d495c6eSApple OSS Distributions * terms of an Apple operating system software license agreement.
14*4d495c6eSApple OSS Distributions *
15*4d495c6eSApple OSS Distributions * Please obtain a copy of the License at
16*4d495c6eSApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*4d495c6eSApple OSS Distributions *
18*4d495c6eSApple OSS Distributions * The Original Code and all software distributed under the License are
19*4d495c6eSApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*4d495c6eSApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*4d495c6eSApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*4d495c6eSApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*4d495c6eSApple OSS Distributions * Please see the License for the specific language governing rights and
24*4d495c6eSApple OSS Distributions * limitations under the License.
25*4d495c6eSApple OSS Distributions *
26*4d495c6eSApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*4d495c6eSApple OSS Distributions */
28*4d495c6eSApple OSS Distributions
29*4d495c6eSApple OSS Distributions #include "std_safe.h"
30*4d495c6eSApple OSS Distributions #include "dt_proxy.h"
31*4d495c6eSApple OSS Distributions #include <darwintest.h>
32*4d495c6eSApple OSS Distributions
33*4d495c6eSApple OSS Distributions static void
pt_assert_true(bool cond,const char * msg)34*4d495c6eSApple OSS Distributions pt_assert_true(bool cond, const char *msg)
35*4d495c6eSApple OSS Distributions {
36*4d495c6eSApple OSS Distributions T_ASSERT_TRUE(cond, "%s", msg);
37*4d495c6eSApple OSS Distributions }
38*4d495c6eSApple OSS Distributions static void
pt_assert_notnull(void * ptr,const char * msg)39*4d495c6eSApple OSS Distributions pt_assert_notnull(void *ptr, const char *msg)
40*4d495c6eSApple OSS Distributions {
41*4d495c6eSApple OSS Distributions T_ASSERT_NOTNULL(ptr, "%s", msg);
42*4d495c6eSApple OSS Distributions }
43*4d495c6eSApple OSS Distributions static void
pt_assert_posix_zero(int v,const char * msg)44*4d495c6eSApple OSS Distributions pt_assert_posix_zero(int v, const char *msg)
45*4d495c6eSApple OSS Distributions {
46*4d495c6eSApple OSS Distributions T_ASSERT_POSIX_ZERO(v, "%s", msg);
47*4d495c6eSApple OSS Distributions }
48*4d495c6eSApple OSS Distributions static void
pt_log(const char * msg)49*4d495c6eSApple OSS Distributions pt_log(const char *msg)
50*4d495c6eSApple OSS Distributions {
51*4d495c6eSApple OSS Distributions T_LOG("%s", msg);
52*4d495c6eSApple OSS Distributions }
53*4d495c6eSApple OSS Distributions static void
pt_log_fmtstr(const char * fmt,const char * msg)54*4d495c6eSApple OSS Distributions pt_log_fmtstr(const char* fmt, const char *msg)
55*4d495c6eSApple OSS Distributions {
56*4d495c6eSApple OSS Distributions T_LOG(fmt, msg);
57*4d495c6eSApple OSS Distributions }
58*4d495c6eSApple OSS Distributions static void
pt_fail(const char * msg)59*4d495c6eSApple OSS Distributions pt_fail(const char *msg)
60*4d495c6eSApple OSS Distributions {
61*4d495c6eSApple OSS Distributions T_FAIL("%s", msg);
62*4d495c6eSApple OSS Distributions }
63*4d495c6eSApple OSS Distributions static void
pt_quiet(void)64*4d495c6eSApple OSS Distributions pt_quiet(void)
65*4d495c6eSApple OSS Distributions {
66*4d495c6eSApple OSS Distributions T_QUIET;
67*4d495c6eSApple OSS Distributions }
68*4d495c6eSApple OSS Distributions
69*4d495c6eSApple OSS Distributions static struct dt_proxy_callbacks dt_callbacks = {
70*4d495c6eSApple OSS Distributions .t_assert_true = &pt_assert_true,
71*4d495c6eSApple OSS Distributions .t_assert_notnull = &pt_assert_notnull,
72*4d495c6eSApple OSS Distributions .t_assert_posix_zero = &pt_assert_posix_zero,
73*4d495c6eSApple OSS Distributions .t_log = &pt_log,
74*4d495c6eSApple OSS Distributions .t_log_fmtstr = &pt_log_fmtstr,
75*4d495c6eSApple OSS Distributions .t_fail = &pt_fail,
76*4d495c6eSApple OSS Distributions .t_quiet = &pt_quiet
77*4d495c6eSApple OSS Distributions };
78*4d495c6eSApple OSS Distributions
79*4d495c6eSApple OSS Distributions // This code is linked into every test executable to allow the XNU and mocks .dylibs access to some
80*4d495c6eSApple OSS Distributions // darwintest functionality. libdarwintest.a is only linked to the executable so code in the XNU and
81*4d495c6eSApple OSS Distributions // mocks .dylibs can't call into it directly
82*4d495c6eSApple OSS Distributions // due to how dyld works, this constructor is going to be called after the fake_kinit() constructor
83*4d495c6eSApple OSS Distributions // so during fake_kinit() dt_proxy is going to stay NULL and any output to darwintest asserts is lost.
84*4d495c6eSApple OSS Distributions __attribute__((constructor)) void
dt_init(void)85*4d495c6eSApple OSS Distributions dt_init(void)
86*4d495c6eSApple OSS Distributions {
87*4d495c6eSApple OSS Distributions set_dt_proxy_attached(&dt_callbacks);
88*4d495c6eSApple OSS Distributions set_dt_proxy_mock(&dt_callbacks);
89*4d495c6eSApple OSS Distributions }
90