/[LeafOK_CVS]/lbbs/src/test_file_loader.c
ViewVC logotype

Contents of /lbbs/src/test_file_loader.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (show annotations)
Wed Nov 5 06:14:01 2025 UTC (4 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.11: +1 -1 lines
Content type: text/x-csrc
Use enum / const int instead of macro define constant integers
Use const char * instead of macro define for constant strings

1 /* SPDX-License-Identifier: GPL-3.0-or-later */
2 /*
3 * test_file_loader
4 * - tester for shared memory based file loader
5 *
6 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 */
8
9 #include "file_loader.h"
10 #include "log.h"
11 #include "trie_dict.h"
12 #include <errno.h>
13 #include <stdio.h>
14 #include <unistd.h>
15 #include <sys/shm.h>
16
17 static const char TRIE_DICT_SHM_FILE[] = "~trie_dict_shm.dat";
18
19 const char *files[] = {
20 "../data/welcome.txt",
21 "../data/copyright.txt",
22 "../data/register.txt",
23 "../data/license.txt",
24 "../data/login_error.txt",
25 "../data/read_help.txt"};
26
27 int files_cnt = 6;
28
29 int main(int argc, char *argv[])
30 {
31 int ret;
32 int i;
33 const void *p_shm;
34 size_t data_len;
35 long line_total;
36 const void *p_data;
37 const long *p_line_offsets;
38 FILE *fp;
39
40 if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
41 {
42 printf("Open log error\n");
43 return -1;
44 }
45
46 log_common_redir(STDOUT_FILENO);
47 log_error_redir(STDERR_FILENO);
48
49 if ((fp = fopen(TRIE_DICT_SHM_FILE, "w")) == NULL)
50 {
51 log_error("fopen(%s) error\n", TRIE_DICT_SHM_FILE);
52 return -1;
53 }
54 fclose(fp);
55
56 if (trie_dict_init(TRIE_DICT_SHM_FILE, TRIE_NODE_PER_POOL) < 0)
57 {
58 printf("trie_dict_init failed\n");
59 return -1;
60 }
61
62 ret = file_loader_init();
63 if (ret < 0)
64 {
65 printf("file_loader_init() error (%d)\n", ret);
66 return ret;
67 }
68
69 ret = file_loader_init();
70 if (ret == 0)
71 {
72 printf("Rerun file_loader_init() error\n");
73 }
74
75 printf("Testing #1\n");
76
77 for (i = 0; i < files_cnt; i++)
78 {
79 if (load_file(files[i]) < 0)
80 {
81 printf("Load file %s error\n", files[i]);
82 }
83 }
84
85 for (i = 0; i < files_cnt; i++)
86 {
87 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
88 {
89 printf("Get file shm %s error\n", files[i]);
90 }
91 else
92 {
93 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
94
95 for (int j = 0; j < line_total; j++)
96 {
97 printf("Line %d: %ld ~ %ld\n", j, p_line_offsets[j], p_line_offsets[j + 1]);
98 }
99
100 if (detach_file_shm(p_shm) < 0)
101 {
102 log_error("detach_file_shm(%s) error\n", files[i]);
103 }
104 }
105 }
106
107 printf("Testing #2\n");
108
109 for (i = 0; i < files_cnt; i++)
110 {
111 if (unload_file(files[i]) < 0)
112 {
113 printf("Unload file %s error\n", files[i]);
114 }
115 }
116
117 for (i = 0; i < files_cnt; i++)
118 {
119 if (load_file(files[i]) < 0)
120 {
121 printf("Load file %s error\n", files[i]);
122 }
123 }
124
125 printf("Testing #3\n");
126
127 for (i = 0; i < files_cnt; i++)
128 {
129 if (i % 2 == 0)
130 {
131 if (unload_file(files[i]) < 0)
132 {
133 printf("Unload file %s error\n", files[i]);
134 }
135 }
136 }
137
138 for (i = 0; i < files_cnt; i++)
139 {
140 if (i % 2 != 0)
141 {
142 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
143 {
144 printf("Get file shm %s error\n", files[i]);
145 }
146 else
147 {
148 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
149
150 if (detach_file_shm(p_shm) < 0)
151 {
152 log_error("detach_file_shm(%s) error\n", files[i]);
153 }
154 }
155 }
156 }
157
158 file_loader_cleanup();
159 file_loader_cleanup();
160
161 trie_dict_cleanup();
162
163 if (unlink(TRIE_DICT_SHM_FILE) < 0)
164 {
165 log_error("unlink(%s) error\n", TRIE_DICT_SHM_FILE);
166 return -1;
167 }
168
169 log_end();
170
171 return 0;
172 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1