/[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.12 - (hide 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 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     #include "file_loader.h"
10 sysadm 1.9 #include "log.h"
11 sysadm 1.5 #include "trie_dict.h"
12 sysadm 1.9 #include <errno.h>
13 sysadm 1.1 #include <stdio.h>
14     #include <unistd.h>
15 sysadm 1.2 #include <sys/shm.h>
16 sysadm 1.1
17 sysadm 1.12 static const char TRIE_DICT_SHM_FILE[] = "~trie_dict_shm.dat";
18 sysadm 1.5
19 sysadm 1.1 const char *files[] = {
20     "../data/welcome.txt",
21     "../data/copyright.txt",
22     "../data/register.txt",
23     "../data/license.txt",
24 sysadm 1.2 "../data/login_error.txt",
25     "../data/read_help.txt"};
26 sysadm 1.1
27 sysadm 1.2 int files_cnt = 6;
28 sysadm 1.1
29     int main(int argc, char *argv[])
30     {
31     int ret;
32     int i;
33 sysadm 1.3 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 sysadm 1.5 FILE *fp;
39 sysadm 1.1
40     if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
41     {
42     printf("Open log error\n");
43     return -1;
44     }
45    
46 sysadm 1.7 log_common_redir(STDOUT_FILENO);
47     log_error_redir(STDERR_FILENO);
48 sysadm 1.1
49 sysadm 1.5 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 sysadm 1.6 if (trie_dict_init(TRIE_DICT_SHM_FILE, TRIE_NODE_PER_POOL) < 0)
57 sysadm 1.5 {
58     printf("trie_dict_init failed\n");
59     return -1;
60     }
61    
62 sysadm 1.2 ret = file_loader_init();
63 sysadm 1.1 if (ret < 0)
64     {
65     printf("file_loader_init() error (%d)\n", ret);
66     return ret;
67     }
68    
69 sysadm 1.2 ret = file_loader_init();
70 sysadm 1.1 if (ret == 0)
71     {
72     printf("Rerun file_loader_init() error\n");
73     }
74    
75     printf("Testing #1\n");
76    
77 sysadm 1.2 for (i = 0; i < files_cnt; i++)
78 sysadm 1.1 {
79 sysadm 1.5 if (load_file(files[i]) < 0)
80 sysadm 1.1 {
81     printf("Load file %s error\n", files[i]);
82     }
83     }
84    
85 sysadm 1.2 for (i = 0; i < files_cnt; i++)
86 sysadm 1.1 {
87 sysadm 1.5 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
88 sysadm 1.1 {
89 sysadm 1.2 printf("Get file shm %s error\n", files[i]);
90 sysadm 1.1 }
91     else
92     {
93 sysadm 1.3 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
94 sysadm 1.4
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 sysadm 1.5
100     if (detach_file_shm(p_shm) < 0)
101     {
102     log_error("detach_file_shm(%s) error\n", files[i]);
103     }
104 sysadm 1.1 }
105     }
106    
107 sysadm 1.2 printf("Testing #2\n");
108    
109     for (i = 0; i < files_cnt; i++)
110 sysadm 1.1 {
111 sysadm 1.5 if (unload_file(files[i]) < 0)
112 sysadm 1.1 {
113     printf("Unload file %s error\n", files[i]);
114     }
115     }
116    
117     for (i = 0; i < files_cnt; i++)
118     {
119 sysadm 1.5 if (load_file(files[i]) < 0)
120 sysadm 1.1 {
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 sysadm 1.2 if (i % 2 == 0)
130 sysadm 1.1 {
131 sysadm 1.5 if (unload_file(files[i]) < 0)
132 sysadm 1.2 {
133     printf("Unload file %s error\n", files[i]);
134     }
135 sysadm 1.1 }
136 sysadm 1.2 }
137    
138     for (i = 0; i < files_cnt; i++)
139     {
140     if (i % 2 != 0)
141 sysadm 1.1 {
142 sysadm 1.5 if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
143 sysadm 1.2 {
144     printf("Get file shm %s error\n", files[i]);
145     }
146     else
147     {
148 sysadm 1.3 printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
149 sysadm 1.5
150     if (detach_file_shm(p_shm) < 0)
151     {
152     log_error("detach_file_shm(%s) error\n", files[i]);
153     }
154 sysadm 1.2 }
155 sysadm 1.1 }
156     }
157    
158     file_loader_cleanup();
159     file_loader_cleanup();
160    
161 sysadm 1.5 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 sysadm 1.1 log_end();
170    
171     return 0;
172     }

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