• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  *   Copyright (c) International Business Machines  Corp., 2002
4  *
5  *   This program is free software;  you can redistribute it and/or modify
6  *   it under the terms of the GNU General Public License as published by
7  *   the Free Software Foundation; either version 2 of the License, or
8  *   (at your option) any later version.
9  *
10  *   This program is distributed in the hope that it will be useful,
11  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
13  *   the GNU General Public License for more details.
14  *
15  *   You should have received a copy of the GNU General Public License
16  *   along with this program;  if not, write to the Free Software
17  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 /* 01/02/2003	Port to LTP avenkat@us.ibm.com */
21 /* 06/30/2001	Port to Linux	nsharoff@us.ibm.com */
22 
23 /*
24  * fmtmsg(3C) and addseverity(3C)
25  *
26  * ALGORITHM
27  *      Check basic functionality using various messages and severity levels.
28  */
29 
30 #include <sys/types.h>
31 #include <sys/stat.h>
32 #include <fcntl.h>
33 #include <ctype.h>
34 #include <stdio.h>
35 #if !defined(__UCLIBC__)
36 #include <fmtmsg.h>		/* interface definition */
37 #endif
38 #include <string.h>
39 
40 #include <stdlib.h>
41 #include <unistd.h>
42 #include <errno.h>
43 #include "test.h"
44 #define FAILED 0
45 #define PASSED 1
46 
47 char *TCID = "fmtms01";
48 
49 int local_flag = PASSED;
50 int block_number;
51 FILE *temp;
52 int TST_TOTAL = 1;
53 
54 int anyfail();
55 int blenter();
56 int blexit();
57 void setup();
58 
59 char ch;
60 char buf[80];
61 char *str1 = "LTP:fmtmsg: INFO: LTP fmtmsg() test1 message, NOT an error";
62 char *str2 = "TO FIX: This is correct output, no action needed  LTP:msg:001";
63 char *str3 = "LTP:fmtmsg: LTP_TEST: LTP fmtmsg() test2 message, NOT an error";
64 char *str4 = "TO FIX: This is correct output, no action needed  LTP:msg:002";
65 
clearbuf(void)66 void clearbuf(void)
67 {
68 	int i;
69 	for (i = 0; i < 80; i++)
70 		buf[i] = '\0';
71 }
72 
73 #if !defined(__UCLIBC__)
74 
main(int argc,char * argv[])75 int main(int argc, char *argv[])
76 {
77 	int fd, ret_val;
78 	FILE *fp;
79 
80 	tst_parse_opts(argc, argv, NULL, NULL);
81 
82 	setup();
83 /*--------------------------------------------------------------*/
84 	blenter();
85 
86 	/* Check that system SEV_LEVEL output is correct */
87 
88 	close(2);		/* redirect stderr to file */
89 	fd = creat("fmtfile", 0644);
90 	ret_val = fmtmsg(MM_PRINT | MM_SOFT, "LTP:fmtmsg", MM_INFO,
91 			 "LTP fmtmsg() test1 message, NOT an error",
92 			 "This is correct output, no action needed",
93 			 "LTP:msg:001");
94 	close(fd);
95 
96 	if (ret_val != 0) {
97 		fprintf(temp, "fmtmsg returned %d, expected 0\n\n", ret_val);
98 		local_flag = FAILED;
99 	}
100 
101 	fp = fopen("fmtfile", "r");
102 	clearbuf();
103 	fread(buf, sizeof(buf[0]), strlen(str1), fp);
104 	if (strcmp(str1, buf) != 0) {
105 		fprintf(temp, "Expected string: %s\n", str1);
106 		fprintf(temp, "does not match\n");
107 		fprintf(temp, "received string: %s\n\n", buf);
108 		local_flag = FAILED;
109 	}
110 
111 	/* Read past spaces in output */
112 	fread(&ch, sizeof(ch), 1, fp);
113 	while (isspace(ch))
114 		fread(&ch, sizeof(ch), 1, fp);
115 	ungetc(ch, fp);
116 
117 	clearbuf();
118 	fread(buf, sizeof(buf[0]), strlen(str2), fp);
119 	fclose(fp);
120 	if (strcmp(str2, buf) != 0) {
121 		fprintf(temp, "Expected string: %s\n", str2);
122 		fprintf(temp, "does not match\n");
123 		fprintf(temp, "received string: %s\n\n", buf);
124 		local_flag = FAILED;
125 	}
126 
127 	blexit();
128 /*--------------------------------------------------------------*/
129 	blenter();
130 
131 	/* Check that a system defined SEV_LEVEL cannot get redefined */
132 
133 	ret_val = addseverity(3, "INVALID");
134 	if (ret_val != MM_NOTOK) {
135 		fprintf(temp, "addseverity returned %d, expected MM_NOTOK\n",
136 			ret_val);
137 		local_flag = FAILED;
138 	}
139 
140 	blexit();
141 /*--------------------------------------------------------------*/
142 	blenter();
143 
144 	/* Check that we can define our own */
145 	/* SEV_LEVEL and output is correct  */
146 
147 	ret_val = addseverity(5, "LTP_TEST");
148 	if (ret_val != MM_OK) {
149 		fprintf(temp, "addseverity returned %d, expected MM_OK\n",
150 			ret_val);
151 		local_flag = FAILED;
152 	}
153 
154 	close(2);		/* redirect stderr to file */
155 	fd = creat("fmtfile", 0644);
156 	ret_val = fmtmsg(MM_PRINT | MM_HARD | MM_OPSYS, "LTP:fmtmsg", 5,
157 			 "LTP fmtmsg() test2 message, NOT an error",
158 			 "This is correct output, no action needed",
159 			 "LTP:msg:002");
160 	close(fd);
161 
162 	if (ret_val != 0) {
163 		fprintf(temp, "fmtmsg returned %d, expected 0\n", ret_val);
164 		local_flag = FAILED;
165 	}
166 
167 	fp = fopen("fmtfile", "r");
168 	clearbuf();
169 	fread(buf, sizeof(buf[0]), strlen(str3), fp);
170 	if (strcmp(str3, buf) != 0) {
171 		fprintf(temp, "Expected string: %s\n", str3);
172 		fprintf(temp, "does not match\n");
173 		fprintf(temp, "received string: %s\n\n", buf);
174 		local_flag = FAILED;
175 	}
176 
177 	/* Read past spaces in output */
178 	fread(&ch, sizeof(ch), 1, fp);
179 	while (isspace(ch))
180 		fread(&ch, sizeof(ch), 1, fp);
181 	ungetc(ch, fp);
182 
183 	clearbuf();
184 	fread(buf, sizeof(buf[0]), strlen(str4), fp);
185 	if (strcmp(str4, buf) != 0) {
186 		fprintf(temp, "Expected string: %s\n", str4);
187 		fprintf(temp, "does not match\n");
188 		fprintf(temp, "received string: %s\n\n", buf);
189 		local_flag = FAILED;
190 	}
191 
192 	fclose(fp);
193 	remove("fmtfile");
194 
195 	blexit();
196 /*--------------------------------------------------------------*/
197 	blenter();
198 
199 	/* Test result of writing to /dev/console */
200 
201 	ret_val = fmtmsg(MM_CONSOLE | MM_HARD | MM_OPSYS, "LTP:fmtmsg", 5,
202 			 "LTP fmtmsg() test3 message, NOT an error",
203 			 "This is correct output, no action needed",
204 			 "LTP:msg:003");
205 	if (ret_val != MM_OK) {
206 		fprintf(temp, "fmtmsg returned %d, expected MM_OK\n", ret_val);
207 		fprintf(temp, "failed to write to console\n\n");
208 		local_flag = FAILED;
209 	}
210 
211 	blexit();
212 	anyfail();
213 	tst_exit();
214 }
215 
anyfail(void)216 int anyfail(void)
217 {
218 	(local_flag == FAILED) ? tst_resm(TFAIL,
219 					  "Test failed") : tst_resm(TPASS,
220 								    "Test passed");
221 	tst_rmdir();
222 	tst_exit();
223 }
224 
setup(void)225 void setup(void)
226 {
227 	temp = stderr;
228 	tst_tmpdir();
229 }
230 
blenter(void)231 int blenter(void)
232 {
233 	local_flag = PASSED;
234 	return 0;
235 }
236 
blexit(void)237 int blexit(void)
238 {
239 	(local_flag == FAILED) ? tst_resm(TFAIL,
240 					  "Test failed") : tst_resm(TPASS,
241 								    "Test passed");
242 	return 0;
243 }
244 
245 #else
246 
main(void)247 int main(void)
248 {
249 	tst_brkm(TCONF, NULL, "test is not available on uClibc");
250 }
251 
252 #endif /* if !defined(__UCLIBC__) */
253