forked from newrelic/newrelic-php-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_text.c
83 lines (67 loc) · 2.32 KB
/
test_text.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*
* Copyright 2020 New Relic Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
#include "nr_axiom.h"
#include <stdio.h>
#include <stdlib.h>
#include "util_memory.h"
#include "util_object.h"
#include "util_strings.h"
#include "util_syscalls.h"
#include "util_text.h"
#include "tlib_main.h"
typedef struct _test_text_state_t {
nrobj_t* key_value_hash;
int processor_state;
} test_text_state_t;
static void test_read_file(void) {
char* result;
char file_name[BUFSIZ];
const char stimulus[] = "junk\n";
FILE* fp;
result = nr_read_file_contents(0, 0);
tlib_pass_if_true("null file name", 0 == result, "result=%p", result);
nr_free(result);
result = nr_read_file_contents("/etc/motd_non_existant", 0);
tlib_pass_if_true("non existant file", 0 == result, "result=%p", result);
nr_free(result);
result = nr_read_file_contents("/", 0);
tlib_pass_if_true("directory", 0 == result, "result=%p", result);
nr_free(result);
snprintf(file_name, sizeof(file_name), "/tmp/fileXXXXXX");
mkstemp(file_name);
fp = fopen(file_name, "w");
tlib_pass_if_true("tmpfile", 0 != fp, "fp=%p", fp);
fwrite(stimulus, 1, sizeof(stimulus), fp);
fclose(fp);
result = nr_read_file_contents(file_name, 0);
tlib_pass_if_true("legit filename", 0 != result, "result=%p", result);
if (0 != result) {
tlib_pass_if_true("leading null byte", 0 == result[0], "result[0]=%d",
result[0]);
}
nr_free(result);
result = nr_read_file_contents(file_name, 1);
tlib_pass_if_true("legit filename", 0 != result, "result=%p", result);
if (0 != result) {
tlib_pass_if_true("leading byte", stimulus[0] == result[0], "result[0]=%d",
result[0]);
tlib_pass_if_true("leading byte", 0 == result[1], "result[1]=%d",
result[1]);
}
nr_free(result);
result = nr_read_file_contents(file_name, 1 << 24);
tlib_pass_if_true("legit filename", 0 != result, "result=%p", result);
if (0 != result) {
tlib_pass_if_true("expected contents", 0 == nr_strcmp(stimulus, result),
"stimulus=%s yet result=%s", stimulus, result);
}
nr_free(result);
nr_unlink(file_name);
}
tlib_parallel_info_t parallel_info
= {.suggested_nthreads = 4, .state_size = sizeof(test_text_state_t)};
void test_main(void* p NRUNUSED) {
test_read_file();
}