/[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.13 - (show annotations)
Tue Nov 11 00:28:05 2025 UTC (4 months ago) by sysadm
Branch: MAIN
Changes since 1.12: +4 -0 lines
Content type: text/x-csrc
Use config.h

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

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