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

Annotation of /lbbs/src/test_file_loader.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide 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 sysadm 1.10 /* SPDX-License-Identifier: GPL-3.0-or-later */
2     /*
3     * test_file_loader
4     * - tester for shared memory based file loader
5     *
6 sysadm 1.11 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 sysadm 1.10 */
8 sysadm 1.1
9 sysadm 1.13 #ifdef HAVE_CONFIG_H
10     #include "config.h"
11     #endif
12    
13 sysadm 1.1 #include "file_loader.h"
14 sysadm 1.9 #include "log.h"
15 sysadm 1.5 #include "trie_dict.h"
16 sysadm 1.9 #include <errno.h>
17 sysadm 1.1 #include <stdio.h>
18     #include <unistd.h>
19 sysadm 1.2 #include <sys/shm.h>
20 sysadm 1.1
21 sysadm 1.12 static const char TRIE_DICT_SHM_FILE[] = "~trie_dict_shm.dat";
22 sysadm 1.5
23 sysadm 1.1 const char *files[] = {
24     "../data/welcome.txt",
25     "../data/copyright.txt",
26     "../data/register.txt",
27     "../data/license.txt",
28 sysadm 1.2 "../data/login_error.txt",
29     "../data/read_help.txt"};
30 sysadm 1.1
31 sysadm 1.2 int files_cnt = 6;
32 sysadm 1.1
33     int main(int argc, char *argv[])
34     {
35     int ret;
36     int i;
37 sysadm 1.3 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 sysadm 1.5 FILE *fp;
43 sysadm 1.1
44     if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
45     {
46     printf("Open log error\n");
47     return -1;
48     }
49    
50 sysadm 1.7 log_common_redir(STDOUT_FILENO);
51     log_error_redir(STDERR_FILENO);
52 sysadm 1.1
53 sysadm 1.5 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 sysadm 1.6 if (trie_dict_init(TRIE_DICT_SHM_FILE, TRIE_NODE_PER_POOL) < 0)
61 sysadm 1.5 {
62     printf("trie_dict_init failed\n");
63     return -1;
64     }
65    
66 sysadm 1.2 ret = file_loader_init();
67 sysadm 1.1 if (ret < 0)
68     {
69     printf("file_loader_init() error (%d)\n", ret);
70     return ret;
71     }
72    
73 sysadm 1.2 ret = file_loader_init();
74 sysadm 1.1 if (ret == 0)
75     {
76     printf("Rerun file_loader_init() error\n");
77     }
78    
79     printf("Testing #1\n");
80    
81 sysadm 1.2 for (i = 0; i < files_cnt; i++)
82 sysadm 1.1 {
83 sysadm 1.5 if (load_file(files[i]) < 0)
84 sysadm 1.1 {
85     printf("Load file %s error\n", files[i]);
86     }
87     }
88    
89 sysadm 1.2 for (i = 0; i < files_cnt; i++)
90 sysadm 1.1 {
91 sysadm 1.5 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
92 sysadm 1.1 {
93 sysadm 1.2 printf("Get file shm %s error\n", files[i]);
94 sysadm 1.1 }
95     else
96     {
97 sysadm 1.3 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
98 sysadm 1.4
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 sysadm 1.5
104     if (detach_file_shm(p_shm) < 0)
105     {
106     log_error("detach_file_shm(%s) error\n", files[i]);
107     }
108 sysadm 1.1 }
109     }
110    
111 sysadm 1.2 printf("Testing #2\n");
112    
113     for (i = 0; i < files_cnt; i++)
114 sysadm 1.1 {
115 sysadm 1.5 if (unload_file(files[i]) < 0)
116 sysadm 1.1 {
117     printf("Unload file %s error\n", files[i]);
118     }
119     }
120    
121     for (i = 0; i < files_cnt; i++)
122     {
123 sysadm 1.5 if (load_file(files[i]) < 0)
124 sysadm 1.1 {
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 sysadm 1.2 if (i % 2 == 0)
134 sysadm 1.1 {
135 sysadm 1.5 if (unload_file(files[i]) < 0)
136 sysadm 1.2 {
137     printf("Unload file %s error\n", files[i]);
138     }
139 sysadm 1.1 }
140 sysadm 1.2 }
141    
142     for (i = 0; i < files_cnt; i++)
143     {
144     if (i % 2 != 0)
145 sysadm 1.1 {
146 sysadm 1.5 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
147 sysadm 1.2 {
148     printf("Get file shm %s error\n", files[i]);
149     }
150     else
151     {
152 sysadm 1.3 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
153 sysadm 1.5
154     if (detach_file_shm(p_shm) < 0)
155     {
156     log_error("detach_file_shm(%s) error\n", files[i]);
157     }
158 sysadm 1.2 }
159 sysadm 1.1 }
160     }
161    
162     file_loader_cleanup();
163     file_loader_cleanup();
164    
165 sysadm 1.5 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 sysadm 1.1 log_end();
174    
175     return 0;
176     }

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