]> git.saurik.com Git - apple/mdnsresponder.git/blob - Clients/dnssdutil/TestUtils.m
mDNSResponder-1310.40.42.tar.gz
[apple/mdnsresponder.git] / Clients / dnssdutil / TestUtils.m
1 //
2 // TestUtils.m
3 // mDNSResponder
4 //
5 // Copyright (c) 2019 Apple Inc. All rights reserved.
6 //
7
8 #import "TestUtils.h"
9
10 #import <dlfcn.h>
11 #import <XCTest/XCTest.h>
12
13 #if TARGET_OS_OSX
14 #define XCTest_Framework_Runtime_Path "/AppleInternal/Developer/Library/Frameworks/XCTest.framework/XCTest"
15 #else
16 #define XCTest_Framework_Runtime_Path "/Developer/Library/Frameworks/XCTest.framework/XCTest"
17 #endif
18
19 //===========================================================================================================================
20 // XCTest Utils
21 //===========================================================================================================================
22 static bool _load_xctest_framework()
23 {
24 bool loaded = (NSClassFromString(@"XCTestSuite") != nil);
25 static void *s_xctest_handle;
26 if (!loaded) {
27 s_xctest_handle = dlopen(XCTest_Framework_Runtime_Path, RTLD_LAZY | RTLD_LOCAL);
28 loaded = (NSClassFromString(@"XCTestSuite") != nil);
29 if (!loaded) {
30 fprintf(stderr, "%s Failed to load XCTest framework from: %s\n", __FUNCTION__, XCTest_Framework_Runtime_Path);
31 }
32 }
33 return loaded;
34 }
35
36 //===========================================================================================================================
37 // Main Test Running
38 //===========================================================================================================================
39
40 bool run_xctest_named(const char *classname)
41 {
42 bool result = false;
43 if (_load_xctest_framework()) {
44 NSString *name = [NSString stringWithUTF8String:classname];
45 NSBundle *testBundle = [NSBundle bundleWithPath:@"/AppleInternal/XCTests/com.apple.mDNSResponder/Tests.xctest"];
46 [testBundle load];
47
48 XCTestSuite *compiledSuite = [NSClassFromString(@"XCTestSuite") testSuiteForTestCaseWithName: name];
49 if (compiledSuite.tests.count) {
50 [compiledSuite runTest];
51 XCTestRun *testRun = compiledSuite.testRun;
52 result = (testRun.hasSucceeded != NO);
53 } else {
54 fprintf(stderr, "%s Test class %s not found\n", __FUNCTION__, classname);
55 }
56 }
57 return result;
58 }
59
60 bool audit_token_for_pid(pid_t pid, const audit_token_t *token)
61 {
62 kern_return_t err;
63 task_t task;
64 mach_msg_type_number_t info_size = TASK_AUDIT_TOKEN_COUNT;
65
66 err = task_for_pid(mach_task_self(), pid, &task);
67 if (err != KERN_SUCCESS) {
68 return false;
69 }
70
71 err = task_info(task, TASK_AUDIT_TOKEN, (integer_t *) token, &info_size);
72 if (err != KERN_SUCCESS) {
73 return false;
74 }
75
76 return true;
77 }