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 (at) us.ibm.com */ 21 /* 06/30/2001 Port to Linux nsharoff (at) us.ibm.com */ 22 23 /* 24 * NAME 25 * fmtmsg -- test fmtmsg(3C) and addseverity(3C) 26 * 27 * CALLS 28 * fmtmsg(3), addseverity(3C) 29 * 30 * ALGORITHM 31 * Check basic functionality using various messages and severity levels. 32 * 33 * RESTRICTIONS 34 */ 35 36 #include <sys/types.h> 37 #include <sys/stat.h> 38 #include <fcntl.h> 39 #include <ctype.h> 40 #include <stdio.h> 41 #if !defined(UCLINUX) && !defined(__UCLIBC__) 42 #include <fmtmsg.h> /* interface definition */ 43 #endif 44 #include <string.h> 45 46 /***** LTP Port *****/ 47 #include <stdlib.h> 48 #include <unistd.h> 49 #include <errno.h> 50 #include "test.h" 51 #define FAILED 0 52 #define PASSED 1 53 54 char *TCID = "fmtms01"; 55 56 int local_flag = PASSED; 57 int block_number; 58 FILE *temp; 59 int TST_TOTAL = 1; 60 61 int anyfail(); 62 int blenter(); 63 int blexit(); 64 void setup(); 65 66 /***** ** ** *****/ 67 //char progname[]= "fmtmsg1()"; 68 69 char ch; 70 char buf[80]; 71 char *str1 = "LTP:fmtmsg: INFO: LTP fmtmsg() test1 message, NOT an error"; 72 char *str2 = "TO FIX: This is correct output, no action needed LTP:msg:001"; 73 char *str3 = "LTP:fmtmsg: LTP_TEST: LTP fmtmsg() test2 message, NOT an error"; 74 char *str4 = "TO FIX: This is correct output, no action needed LTP:msg:002"; 75 76 void clearbuf(void) 77 { 78 int i; 79 for (i = 0; i < 80; i++) 80 buf[i] = '\0'; 81 } 82 83 #if !defined(UCLINUX) && !defined(__UCLIBC__) 84 85 /*--------------------------------------------------------------*/ 86 int main(int argc, char *argv[]) 87 { 88 int fd, ret_val; 89 FILE *fp; 90 91 setup(); /* temp file is now open */ 92 /*--------------------------------------------------------------*/ 93 blenter(); 94 95 /* Check that system SEV_LEVEL output is correct */ 96 97 close(2); /* redirect stderr to file */ 98 fd = creat("fmtfile", 0644); 99 ret_val = fmtmsg(MM_PRINT | MM_SOFT, "LTP:fmtmsg", MM_INFO, 100 "LTP fmtmsg() test1 message, NOT an error", 101 "This is correct output, no action needed", 102 "LTP:msg:001"); 103 close(fd); 104 105 if (ret_val != 0) { 106 fprintf(temp, "fmtmsg returned %d, expected 0\n\n", ret_val); 107 local_flag = FAILED; 108 } 109 110 fp = fopen("fmtfile", "r"); 111 clearbuf(); 112 fread(buf, sizeof(buf[0]), strlen(str1), fp); 113 if (strcmp(str1, buf) != 0) { 114 fprintf(temp, "Expected string: %s\n", str1); 115 fprintf(temp, "does not match\n"); 116 fprintf(temp, "received string: %s\n\n", buf); 117 local_flag = FAILED; 118 } 119 120 /* Read past spaces in output */ 121 fread(&ch, sizeof(ch), 1, fp); 122 while (isspace(ch)) 123 fread(&ch, sizeof(ch), 1, fp); 124 ungetc(ch, fp); 125 126 clearbuf(); 127 fread(buf, sizeof(buf[0]), strlen(str2), fp); 128 fclose(fp); 129 if (strcmp(str2, buf) != 0) { 130 fprintf(temp, "Expected string: %s\n", str2); 131 fprintf(temp, "does not match\n"); 132 fprintf(temp, "received string: %s\n\n", buf); 133 local_flag = FAILED; 134 } 135 136 blexit(); 137 /*--------------------------------------------------------------*/ 138 blenter(); 139 140 /* Check that a system defined SEV_LEVEL cannot get redefined */ 141 142 ret_val = addseverity(3, "INVALID"); 143 if (ret_val != MM_NOTOK) { 144 fprintf(temp, "addseverity returned %d, expected MM_NOTOK\n", 145 ret_val); 146 local_flag = FAILED; 147 } 148 149 blexit(); 150 /*--------------------------------------------------------------*/ 151 blenter(); 152 153 /* Check that we can define our own */ 154 /* SEV_LEVEL and output is correct */ 155 156 ret_val = addseverity(5, "LTP_TEST"); 157 if (ret_val != MM_OK) { 158 fprintf(temp, "addseverity returned %d, expected MM_OK\n", 159 ret_val); 160 local_flag = FAILED; 161 } 162 163 close(2); /* redirect stderr to file */ 164 fd = creat("fmtfile", 0644); 165 ret_val = fmtmsg(MM_PRINT | MM_HARD | MM_OPSYS, "LTP:fmtmsg", 5, 166 "LTP fmtmsg() test2 message, NOT an error", 167 "This is correct output, no action needed", 168 "LTP:msg:002"); 169 close(fd); 170 171 if (ret_val != 0) { 172 fprintf(temp, "fmtmsg returned %d, expected 0\n", ret_val); 173 local_flag = FAILED; 174 } 175 176 fp = fopen("fmtfile", "r"); 177 clearbuf(); 178 fread(buf, sizeof(buf[0]), strlen(str3), fp); 179 if (strcmp(str3, buf) != 0) { 180 fprintf(temp, "Expected string: %s\n", str3); 181 fprintf(temp, "does not match\n"); 182 fprintf(temp, "received string: %s\n\n", buf); 183 local_flag = FAILED; 184 } 185 186 /* Read past spaces in output */ 187 fread(&ch, sizeof(ch), 1, fp); 188 while (isspace(ch)) 189 fread(&ch, sizeof(ch), 1, fp); 190 ungetc(ch, fp); 191 192 clearbuf(); 193 fread(buf, sizeof(buf[0]), strlen(str4), fp); 194 if (strcmp(str4, buf) != 0) { 195 fprintf(temp, "Expected string: %s\n", str4); 196 fprintf(temp, "does not match\n"); 197 fprintf(temp, "received string: %s\n\n", buf); 198 local_flag = FAILED; 199 } 200 201 fclose(fp); 202 remove("fmtfile"); 203 204 blexit(); 205 /*--------------------------------------------------------------*/ 206 blenter(); 207 208 /* Test result of writing to /dev/console */ 209 210 ret_val = fmtmsg(MM_CONSOLE | MM_HARD | MM_OPSYS, "LTP:fmtmsg", 5, 211 "LTP fmtmsg() test3 message, NOT an error", 212 "This is correct output, no action needed", 213 "LTP:msg:003"); 214 if (ret_val != MM_OK) { 215 fprintf(temp, "fmtmsg returned %d, expected MM_OK\n", ret_val); 216 fprintf(temp, "failed to write to console\n\n"); 217 local_flag = FAILED; 218 } 219 220 blexit(); 221 /*--------------------------------------------------------------*/ 222 /* Clean up any files created by test before call to anyfail. */ 223 224 anyfail(); /* THIS CALL DOES NOT RETURN - EXITS!! */ 225 tst_exit(); 226 } 227 228 /*--------------------------------------------------------------*/ 229 230 /***** LTP Port *****/ 231 /* FUNCTIONS GO HERE */ 232 233 int anyfail(void) 234 { 235 (local_flag == FAILED) ? tst_resm(TFAIL, 236 "Test failed") : tst_resm(TPASS, 237 "Test passed"); 238 tst_rmdir(); 239 tst_exit(); 240 } 241 242 void setup(void) 243 { 244 temp = stderr; 245 tst_tmpdir(); 246 } 247 248 int blenter(void) 249 { 250 //tst_resm(TINFO, "Enter block %d", block_number); 251 local_flag = PASSED; 252 return 0; 253 } 254 255 int blexit(void) 256 { 257 //tst_resm(TINFO, "Exitng test"); 258 (local_flag == FAILED) ? tst_resm(TFAIL, 259 "Test failed") : tst_resm(TPASS, 260 "Test passed"); 261 return 0; 262 } 263 264 #else 265 266 int main(void) 267 { 268 tst_resm(TINFO, "test is not available on uClinux"); 269 tst_exit(); 270 } 271 272 #endif /* if !defined(UCLINUX) */ 273 274 /***** ** ** *****/ 275