(file) Return to test_oi.cpp CVS log (file) (dir) Up to [OMI] / omi / tests / oi

  1 krisbash 1.1 /*
  2              **==============================================================================
  3              **
  4              ** Open Management Infrastructure (OMI)
  5              **
  6              ** Copyright (c) Microsoft Corporation
  7              ** 
  8              ** Licensed under the Apache License, Version 2.0 (the ZT("License")); you may not 
  9              ** use this file except in compliance with the License. You may obtain a copy 
 10              ** of the License at 
 11              **
 12              **     http://www.apache.org/licenses/LICENSE-2.0 
 13              **
 14              ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15              ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
 16              ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
 17              ** MERCHANTABLITY OR NON-INFRINGEMENT. 
 18              **
 19              ** See the Apache 2 License for the specific language governing permissions 
 20              ** and limitations under the License.
 21              **
 22 krisbash 1.1 **==============================================================================
 23              */
 24              
 25              #include <iostream>
 26              #include <string>
 27              #include <vector>
 28              #include <cstdio>
 29              #include <ut/ut.h>
 30              #include <common.h>
 31              #include <base/paths.h>
 32              #include <base/log.h>
 33              #include <pal/file.h>
 34              
 35              #include "OIParser.h"
 36              #include "FileGen.h"
 37              #if defined(CONFIG_OS_WINDOWS)
 38              #include "EtwGen.h"
 39              #include "ManifestGen.h"
 40              #endif
 41              #include "Syslog.h"
 42              
 43 krisbash 1.1 #if defined(CONFIG_ENABLE_WCHAR)
 44              typedef std::wstring String;
 45              #else
 46              typedef std::string String;
 47              #endif
 48              
 49              using namespace std;
 50              
 51              NitsSetup(TestOiSetup)
 52              NitsEndSetup
 53              
 54              NitsCleanup(TestOiSetup)
 55              NitsEndCleanup
 56              
 57              NitsTestWithSetup(Test_SingleEvent, TestOiSetup)
 58              {
 59                  OIParser parser;
 60                  OIEvent * events = 0;
 61                  int count = 0;
 62                  char path[PAL_MAX_PATH_SIZE];
 63              
 64 krisbash 1.1     Strlcpy(path, OMI_GetPath(ID_PREFIX), sizeof(path));
 65                  Strlcat(path, "/tests/oi/", sizeof(path));
 66                  Strlcat(path, "test1.txt", sizeof(path));
 67              
 68                  memset(&parser, 0, sizeof(OIParser));
 69                  UT_ASSERT_EQUAL(Parser_Init(&parser, path), MI_TRUE);
 70                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
 71              
 72                  UT_ASSERT_EQUAL(count, 1);
 73                  if (count > 0)
 74                  {
 75                      UT_ASSERT_EQUAL(Strcmp(events->Name, "FrogEvents_JumpEvent"), 0);
 76                      UT_ASSERT_EQUAL(Strcmp(events->Format, "\"I have jumped %d feet\""), 0);
 77                      UT_ASSERT_EQUAL(events->next, 0);
 78              
 79                      UT_ASSERT(events->Argument != NULL);
 80                      if (events->Argument)
 81                      {
 82                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Name, "number"), 0);
 83                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Type, "int"), 0);
 84                          UT_ASSERT_EQUAL(events->Argument->next, 0);
 85 krisbash 1.1         }
 86                  }
 87              
 88                  Parser_Destroy(&parser);
 89              }
 90              NitsEndTest
 91              
 92              NitsTestWithSetup(Test_MultipleEvents, TestOiSetup)
 93              {
 94                  OIParser parser;
 95                  OIEvent * events = 0;
 96                  int count = 0;
 97                  char path[PAL_MAX_PATH_SIZE];
 98              
 99                  Strlcpy(path, OMI_GetPath(ID_PREFIX), sizeof(path));
100                  Strlcat(path, "/tests/oi/", sizeof(path));
101                  Strlcat(path, "test2.txt", sizeof(path));
102              
103                  memset(&parser, 0, sizeof(OIParser));
104                  UT_ASSERT_EQUAL(Parser_Init(&parser, path), MI_TRUE);
105                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
106 krisbash 1.1 
107                  UT_ASSERT_EQUAL(count, 3);
108                  if (count > 0)
109                  {
110                      UT_ASSERT_EQUAL(Strcmp(events->Name, "FrogEvents_JumpEvent"), 0);
111                      UT_ASSERT_EQUAL(Strcmp(events->Format, "\"I have jumped %d feet\""), 0);
112              
113                      OIArgument * arg = events->Argument;
114                      UT_ASSERT(arg != NULL);
115                      if (arg)
116                      {
117                          UT_ASSERT_EQUAL(Strcmp(arg->Name, "number"), 0);
118                          UT_ASSERT_EQUAL(Strcmp(arg->Type, "int"), 0);
119                          UT_ASSERT_EQUAL(arg->next, 0);
120                      }
121              
122                      UT_ASSERT(events->next != 0);
123                      OIEvent * e = events->next;        
124                      if (e)
125                      {
126                          UT_ASSERT_EQUAL(Strcmp(e->Name, "FrogEvents_EatFlysEvent"), 0);
127 krisbash 1.1             UT_ASSERT_EQUAL(Strcmp(e->Format, "\"I have eaten %d flys\""), 0);
128              
129                          OIArgument * arg = e->Argument;
130                          UT_ASSERT(arg != NULL);
131                          if (arg)
132                          {
133                              UT_ASSERT_EQUAL(Strcmp(arg->Name, "number"), 0);
134                              UT_ASSERT_EQUAL(Strcmp(arg->Type, "int"), 0);
135                              UT_ASSERT_EQUAL(arg->next, 0);
136                          }
137                      }
138              
139                      UT_ASSERT(e->next != 0);
140                      e = e->next;
141                      if (e)
142                      {
143                          UT_ASSERT_EQUAL(Strcmp(e->Name, "FrogEvents_DiveEvent"), 0);
144                          UT_ASSERT_EQUAL(Strcmp(e->Format, "\"I have dived %d feet for %d seconds\""), 0);
145              
146                          OIArgument * arg = e->Argument;
147                          UT_ASSERT(arg != NULL);
148 krisbash 1.1             if (arg)
149                          {
150                              UT_ASSERT_EQUAL(Strcmp(arg->Name, "depth"), 0);
151                              UT_ASSERT_EQUAL(Strcmp(arg->Type, "int"), 0);
152                              UT_ASSERT(arg->next != 0);
153                          }
154              
155                          arg = arg->next;
156                          UT_ASSERT(arg != NULL);
157                          if (arg)
158                          {
159                              UT_ASSERT_EQUAL(Strcmp(arg->Name, "time"), 0);
160                              UT_ASSERT_EQUAL(Strcmp(arg->Type, "int"), 0);
161                              UT_ASSERT_EQUAL(arg->next, 0);
162                          }
163                      }
164                  }
165              
166                  Parser_Destroy(&parser);
167              }
168              NitsEndTest
169 krisbash 1.1 
170              static bool Inhale(const char* path, string& strOut, bool baseline)
171              {
172                  char buf[1024];
173                  string str;
174              
175                  /* Open file */
176                  FILE* is = File_Open(path, "rb");
177                  if (!is)
178                      return false;
179              
180                  /* Read file into str parameter */
181                  for (;;)
182                  {
183              #if defined(CONFIG_OS_WINDOWS)
184                      long n = fread(buf, 1, sizeof(buf)-2, is);
185              #else
186                      ssize_t n = fread(buf, 1, sizeof(buf)-1, is);
187              #endif
188                      if (n <= 0)
189                          break;
190 krisbash 1.1         _Analysis_assume_(n<1023);
191                      buf[n] = '\0';
192              #if defined(CONFIG_OS_WINDOWS)
193                      // convert buf to ansi string
194                      if (!baseline)
195                      {
196                          size_t len = n / 2 + 1;
197                          char* cpBuf = (char*)PAL_Malloc(len);
198                          buf[n + 1] = '\0';
199                          if (cpBuf == NULL) return false;
200                          StrWcslcpy(cpBuf, (ZChar*)buf, len);
201                          str += cpBuf;
202                          PAL_Free(cpBuf);
203                      }
204                      else
205                          str += buf;
206              #else
207                      str += buf;
208              #endif
209                  }
210              
211 krisbash 1.1     fclose(is);
212              
213                  // Remove carriage-returns (Ctrl-M) characters:
214              
215                  strOut.clear();
216              
217                  for (size_t i = 0; i < str.size(); i++)
218                  {
219                      if (str[i] != '\r' && str[i] != '\n')
220                          strOut += str[i];
221                  }
222              
223                  return true;
224              }
225              
226              static bool InhaleTestFile(const char* file, string& str)
227              {
228                  char path[PAL_MAX_PATH_SIZE];
229              
230                  Strlcpy(path, OMI_GetPath(ID_PREFIX), sizeof(path));
231                  Strlcat(path, "/tests/oi/", sizeof(path));
232 krisbash 1.1     Strlcat(path, file, sizeof(path));
233              
234                  return Inhale(path, str, true);
235              }
236              
237              #if defined(CONFIG_OS_WINDOWS)
238              
239              NitsTestWithSetup(Test_SingleEvent_ETW, TestOiSetup)
240              {
241                  OIParser parser;
242                  OIEvent * events = 0;
243                  int count = 0;
244                  char in[PAL_MAX_PATH_SIZE];
245                  char out[PAL_MAX_PATH_SIZE];
246                  char providerId[] = "{F93D404F-F291-496E-9D8D-56D8C6F8F650}";
247              
248                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
249                  Strlcat(in, "/tests/oi/", sizeof(in));
250                  Strlcat(in, "test1.txt", sizeof(in));
251              
252                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
253 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
254                  Strlcat(out, "out.c.txt", sizeof(out));
255              
256                  memset(&parser, 0, sizeof(OIParser));
257                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
258                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
259              
260                  UT_ASSERT_EQUAL(count, 1);
261              
262                  Buckets set;
263                  memset(&set, 0, sizeof(Buckets));
264                  MI_Boolean ret = GenerateTaskOpcodeKeywords(events, &set);
265                  UT_ASSERT_EQUAL(ret, MI_TRUE);
266              
267                  ret = GenerateEtw(events, &set, providerId, out);
268                  UT_ASSERT_EQUAL(ret, MI_TRUE);
269              
270                  string gen, expected;
271                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
272                  UT_ASSERT_EQUAL(InhaleTestFile("expected1.etw.txt", expected), true);
273              
274 krisbash 1.1     UT_ASSERT(gen == expected);
275              
276                  Parser_Destroy(&parser);
277                  CleanupBuckets(&set);
278              }
279              NitsEndTest
280              
281              NitsTestWithSetup(Test_ETWTaskOpcodesKeywords, TestOiSetup)
282              {
283                  OIParser parser;
284                  OIEvent * events = 0;
285                  int count = 0;
286                  char in[PAL_MAX_PATH_SIZE];
287                  char out[PAL_MAX_PATH_SIZE];
288                  char providerId[] = "{F93D404F-F291-496E-9D8D-56D8C6F8F650}";
289              
290                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
291                  Strlcat(in, "/tests/oi/", sizeof(in));
292                  Strlcat(in, "test2.txt", sizeof(in));
293              
294                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
295 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
296                  Strlcat(out, "out.c.txt", sizeof(out));
297              
298                  memset(&parser, 0, sizeof(OIParser));
299                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
300                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
301              
302                  UT_ASSERT_EQUAL(count, 3);
303                  
304                  Buckets set;
305                  memset(&set, 0, sizeof(Buckets));
306                  MI_Boolean ret = GenerateTaskOpcodeKeywords(events, &set);
307                  UT_ASSERT_EQUAL(ret, MI_TRUE);
308              
309                  ret = GenerateEtw(events, &set, providerId, out);
310                  UT_ASSERT_EQUAL(ret, MI_TRUE);
311              
312                  string gen, expected;
313                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
314                  UT_ASSERT_EQUAL(InhaleTestFile("expected2.etw.txt", expected), true);
315              
316 krisbash 1.1     UT_ASSERT(gen == expected);
317              
318                  Parser_Destroy(&parser);
319                  CleanupBuckets(&set);
320              }
321              NitsEndTest
322              
323              NitsTestWithSetup(Test_ETWMultipleTasksEtc, TestOiSetup)
324              {
325                  OIParser parser;
326                  OIEvent * events = 0;
327                  int count = 0;
328                  char in[PAL_MAX_PATH_SIZE];
329                  char out[PAL_MAX_PATH_SIZE];
330                  char providerId[] = "{F93D404F-F291-496E-9D8D-56D8C6F8F650}";
331              
332                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
333                  Strlcat(in, "/tests/oi/", sizeof(in));
334                  Strlcat(in, "test4.txt", sizeof(in));
335              
336                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
337 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
338                  Strlcat(out, "out.c.txt", sizeof(out));
339              
340                  memset(&parser, 0, sizeof(OIParser));
341                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
342                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
343              
344                  UT_ASSERT_EQUAL(count, 7);
345                  
346                  Buckets set;
347                  memset(&set, 0, sizeof(Buckets));
348                  MI_Boolean ret = GenerateTaskOpcodeKeywords(events, &set);
349                  UT_ASSERT_EQUAL(ret, MI_TRUE);
350              
351                  ret = GenerateEtw(events, &set, providerId, out);
352                  UT_ASSERT_EQUAL(ret, MI_TRUE);
353              
354                  string gen, expected;
355                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
356                  UT_ASSERT_EQUAL(InhaleTestFile("expected4.etw.txt", expected), true);
357              
358 krisbash 1.1     UT_ASSERT(gen == expected);
359              
360                  Parser_Destroy(&parser);
361                  CleanupBuckets(&set);
362              }
363              NitsEndTest
364              
365              NitsTestWithSetup(Test_Manifest, TestOiSetup)
366              {
367                  OIParser parser;
368                  OIEvent * events = 0;
369                  int count = 0;
370                  char in[PAL_MAX_PATH_SIZE];
371                  char out[PAL_MAX_PATH_SIZE];
372                  char providerId[] = "{d2c91d76-d9a9-46bb-b080-efc944c3ba2d}";
373              
374                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
375                  Strlcat(in, "/tests/oi/", sizeof(in));
376                  Strlcat(in, "test2.txt", sizeof(in));
377              
378                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
379 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
380                  Strlcat(out, "man2.txt", sizeof(out));
381              
382                  memset(&parser, 0, sizeof(OIParser));
383                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
384                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
385              
386                  UT_ASSERT_EQUAL(count, 3);
387              
388                  Buckets set;
389                  memset(&set, 0, sizeof(Buckets));
390                  MI_Boolean ret = GenerateTaskOpcodeKeywords(events, &set);
391                  UT_ASSERT_EQUAL(ret, MI_TRUE);
392              
393                  ret = GenerateManifest(events, &set, "FrogProvider", providerId, "FrogProvider.exe", out);
394                  UT_ASSERT_EQUAL(ret, MI_TRUE);
395              
396                  string gen, expected;
397                  UT_ASSERT_EQUAL(InhaleTestFile("man2.txt", gen), true);
398                  UT_ASSERT_EQUAL(InhaleTestFile("manifest2.man.txt", expected), true);
399              
400 krisbash 1.1     UT_ASSERT(gen == expected);
401              
402                  Parser_Destroy(&parser);
403                  CleanupBuckets(&set);
404              }
405              NitsEndTest
406              
407              NitsTestWithSetup(Test_Manifest_KeywordsOpcodesTasks, TestOiSetup)
408              {
409                  OIParser parser;
410                  OIEvent * events = 0;
411                  int count = 0;
412                  char in[PAL_MAX_PATH_SIZE];
413                  char out[PAL_MAX_PATH_SIZE];
414                  char providerId[] = "{d2c91d76-d9a9-46bb-b080-efc944c3ba2d}";
415              
416                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
417                  Strlcat(in, "/tests/oi/", sizeof(in));
418                  Strlcat(in, "test4.txt", sizeof(in));
419              
420                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
421 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
422                  Strlcat(out, "man4.txt", sizeof(out));
423              
424                  memset(&parser, 0, sizeof(OIParser));
425                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
426                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
427              
428                  UT_ASSERT_EQUAL(count, 7);
429              
430                  Buckets set;
431                  memset(&set, 0, sizeof(Buckets));
432                  MI_Boolean ret = GenerateTaskOpcodeKeywords(events, &set);
433                  UT_ASSERT_EQUAL(ret, MI_TRUE);
434              
435                  ret = GenerateManifest(events, &set, "FrogProvider", providerId, "FrogProvider.exe", out);
436                  UT_ASSERT_EQUAL(ret, MI_TRUE);
437              
438                  string gen, expected;
439                  UT_ASSERT_EQUAL(InhaleTestFile("man4.txt", gen), true);
440                  UT_ASSERT_EQUAL(InhaleTestFile("manifest4.man.txt", expected), true);
441              
442 krisbash 1.1     UT_ASSERT(gen == expected);
443                  
444                  Parser_Destroy(&parser);
445                  CleanupBuckets(&set);
446              }
447              NitsEndTest
448              #endif
449              
450              NitsTestWithSetup(Test_Parser_SyslogPriority, TestOiSetup)
451              {
452                  OIParser parser;
453                  OIEvent * events = 0;
454                  int count = 0;
455                  char in[PAL_MAX_PATH_SIZE];
456                  char out[PAL_MAX_PATH_SIZE];
457              
458                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
459                  Strlcat(in, "/tests/oi/", sizeof(in));
460                  Strlcat(in, "syslog1.txt", sizeof(in));
461              
462                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
463 krisbash 1.1     Strlcat(out, "/tests/oi/", sizeof(out));
464                  Strlcat(out, "out.c.txt", sizeof(out));
465              
466                  memset(&parser, 0, sizeof(OIParser));
467                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
468                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
469              
470                  UT_ASSERT_EQUAL(count, 1);
471                  if (count > 0)
472                  {
473                      UT_ASSERT_EQUAL(Strcmp(events->Name, "FrogEvents_JumpEvent"), 0);
474                      UT_ASSERT_EQUAL(Strcmp(events->Format, "\"I have jumped %d feet\""), 0);
475                      UT_ASSERT_EQUAL(Strcmp(events->Priority, "LOG_NOTICE"), 0);
476                      UT_ASSERT_EQUAL(events->next, 0);
477              
478                      UT_ASSERT(events->Argument != NULL);
479                      if (events->Argument)
480                      {
481                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Name, "number"), 0);
482                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Type, "int"), 0);
483                          UT_ASSERT_EQUAL(events->Argument->next, 0);
484 krisbash 1.1         }
485                  }
486              
487                  Parser_Destroy(&parser);
488              }
489              NitsEndTest
490              
491              NitsTestWithSetup(Test_Parser_SyslogPriorities, TestOiSetup)
492              {
493                  OIParser parser;
494                  OIEvent * events = 0;
495                  int count = 0;
496                  char in[PAL_MAX_PATH_SIZE];
497                  char out[PAL_MAX_PATH_SIZE];
498              
499                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
500                  Strlcat(in, "/tests/oi/", sizeof(in));
501                  Strlcat(in, "syslog2.txt", sizeof(in));
502              
503                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
504                  Strlcat(out, "/tests/oi/", sizeof(out));
505 krisbash 1.1     Strlcat(out, "out.c.txt", sizeof(out));
506              
507                  memset(&parser, 0, sizeof(OIParser));
508                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
509                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
510              
511                  UT_ASSERT_EQUAL(count, 2);
512                  if (count > 0)
513                  {
514                      UT_ASSERT_EQUAL(Strcmp(events->Name, "FrogEvents_JumpEvent"), 0);
515                      UT_ASSERT_EQUAL(Strcmp(events->Format, "\"I have jumped %d feet\""), 0);
516                      UT_ASSERT_EQUAL(Strcmp(events->Priority, "LOG_NOTICE"), 0);
517                      UT_ASSERT(events->Argument != NULL);
518                      if (events->Argument)
519                      {
520                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Name, "number"), 0);
521                          UT_ASSERT_EQUAL(Strcmp(events->Argument->Type, "int"), 0);
522                          UT_ASSERT_EQUAL(events->Argument->next, 0);
523                      }
524              
525                      UT_ASSERT(events->next != NULL);
526 krisbash 1.1         if (events->next)
527                      {
528                          OIEvent * second = events->next;
529                          UT_ASSERT_EQUAL(Strcmp(second->Priority, "LOG_WARNING"), 0);
530                          UT_ASSERT(second->next == NULL);
531                      }
532                  }
533              
534                  Parser_Destroy(&parser);
535              }
536              NitsEndTest
537              
538              NitsTestWithSetup(Test_SingleEvent_Syslog, TestOiSetup)
539              {
540                  OIParser parser;
541                  OIEvent * events = 0;
542                  int count = 0;
543                  char in[PAL_MAX_PATH_SIZE];
544                  char out[PAL_MAX_PATH_SIZE];
545              
546                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
547 krisbash 1.1     Strlcat(in, "/tests/oi/", sizeof(in));
548                  Strlcat(in, "syslog1.txt", sizeof(in));
549              
550                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
551                  Strlcat(out, "/tests/oi/", sizeof(out));
552                  Strlcat(out, "out.c.txt", sizeof(out));
553              
554                  memset(&parser, 0, sizeof(OIParser));
555                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
556                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
557              
558                  UT_ASSERT_EQUAL(count, 1);
559              
560                  MI_Boolean ret = GenerateSyslog(events, "examplelog", "LOG_CONS | LOG_PID | LOG_NDELAY", "LOG_LOCAL1", out);
561                  UT_ASSERT_EQUAL(ret, MI_TRUE);
562              
563                  string gen, expected;
564                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
565                  UT_ASSERT_EQUAL(InhaleTestFile("expected1.syslog.txt", expected), true);
566              
567                  UT_ASSERT(gen == expected);
568 krisbash 1.1 
569                  Parser_Destroy(&parser);
570              }
571              NitsEndTest
572              
573              NitsTestWithSetup(Test_Parser_AutoID, TestOiSetup)
574              {
575                  OIParser parser;
576                  OIEvent * events = 0;
577                  int count = 0;
578                  char in[PAL_MAX_PATH_SIZE];
579                  char out[PAL_MAX_PATH_SIZE];
580              
581                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
582                  Strlcat(in, "/tests/oi/", sizeof(in));
583                  Strlcat(in, "syslog3.txt", sizeof(in));
584              
585                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
586                  Strlcat(out, "/tests/oi/", sizeof(out));
587                  Strlcat(out, "out.c.txt", sizeof(out));
588              
589 krisbash 1.1     memset(&parser, 0, sizeof(OIParser));
590                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
591                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
592              
593                  UT_ASSERT_EQUAL(count, 5);
594                  if (count > 0)
595                  {
596                      // first event
597                      UT_ASSERT_EQUAL(Strcmp(events->Name, "trace_1"), 0);
598                      UT_ASSERT_EQUAL(Strcmp(events->EventId, "1000"), 0);
599              
600                      // second event
601                      OIEvent * second = events->next;
602                      UT_ASSERT(second != NULL);
603                      if (second)
604                      {
605                          UT_ASSERT_EQUAL(Strcmp(second->EventId, "1001"), 0);
606                          UT_ASSERT(second->next != NULL);
607              
608                          // third event
609                          OIEvent * third = second->next;
610 krisbash 1.1             UT_ASSERT(third != NULL);
611                          if (third)
612                          {
613                              UT_ASSERT_EQUAL(Strcmp(third->EventId, "2001"), 0);
614                              UT_ASSERT(third->next != NULL);
615              
616                              // forth event
617                              OIEvent * forth = third->next;
618                              UT_ASSERT(forth != NULL);
619                              if (forth)
620                              {
621                                  UT_ASSERT_EQUAL(Strcmp(forth->EventId, "2002"), 0);
622                                  UT_ASSERT(forth->next != NULL);
623              
624                                  // last event
625                                  OIEvent * last = forth->next;
626                                  UT_ASSERT(last != NULL);
627                                  if (last)
628                                  {
629                                      UT_ASSERT_EQUAL(Strcmp(last->EventId, "3000"), 0);
630                                      UT_ASSERT(last->next == NULL);
631 krisbash 1.1                     }
632                              }
633                          }
634                      }
635                  }
636              
637                  Parser_Destroy(&parser);
638              }
639              NitsEndTest
640              
641              NitsTestWithSetup(Test_AutoID_Syslog, TestOiSetup)
642              {
643                  OIParser parser;
644                  OIEvent * events = 0;
645                  int count = 0;
646                  char in[PAL_MAX_PATH_SIZE];
647                  char out[PAL_MAX_PATH_SIZE];
648              
649                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
650                  Strlcat(in, "/tests/oi/", sizeof(in));
651                  Strlcat(in, "syslog3.txt", sizeof(in));
652 krisbash 1.1 
653                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
654                  Strlcat(out, "/tests/oi/", sizeof(out));
655                  Strlcat(out, "out.c.txt", sizeof(out));
656              
657                  memset(&parser, 0, sizeof(OIParser));
658                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
659                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
660              
661                  UT_ASSERT_EQUAL(count, 5);
662              
663                  MI_Boolean ret = GenerateSyslog(events, "examplelog", "LOG_CONS | LOG_PID | LOG_NDELAY", "LOG_LOCAL1", out);
664                  UT_ASSERT_EQUAL(ret, MI_TRUE);
665              
666                  string gen, expected;
667                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
668                  UT_ASSERT_EQUAL(InhaleTestFile("expected3.syslog.txt", expected), true);
669              
670                  UT_ASSERT(gen == expected);
671              
672                  Parser_Destroy(&parser);
673 krisbash 1.1 }
674              NitsEndTest
675              
676              NitsTestWithSetup(Test_SingleEvent_FileGen, TestOiSetup)
677              {
678                  OIParser parser;
679                  OIEvent * events = 0;
680                  int count = 0;
681                  char in[PAL_MAX_PATH_SIZE];
682                  char out[PAL_MAX_PATH_SIZE];
683              
684                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
685                  Strlcat(in, "/tests/oi/", sizeof(in));
686                  Strlcat(in, "syslog1.txt", sizeof(in));
687              
688                  Strlcpy(out, OMI_GetPath(ID_PREFIX), sizeof(out));
689                  Strlcat(out, "/tests/oi/", sizeof(out));
690                  Strlcat(out, "out.c.txt", sizeof(out));
691              
692                  memset(&parser, 0, sizeof(OIParser));
693                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
694 krisbash 1.1     UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
695              
696                  UT_ASSERT_EQUAL(count, 1);
697              
698                  MI_Boolean ret = GenerateFile(events, out);
699                  UT_ASSERT_EQUAL(ret, MI_TRUE);
700              
701                  string gen, expected;
702                  UT_ASSERT_EQUAL(InhaleTestFile("out.c.txt", gen), true);
703                  UT_ASSERT_EQUAL(InhaleTestFile("expected1.filegen.txt", expected), true);
704              
705                  UT_ASSERT(gen == expected);
706              
707                  Parser_Destroy(&parser);
708              }
709              NitsEndTest
710              
711              NitsTestWithSetup(Test_Parser_Parsing, TestOiSetup)
712              {
713                  OIParser parser;
714                  OIEvent * events = 0;
715 krisbash 1.1     int count = 0;
716                  char in[PAL_MAX_PATH_SIZE];
717              
718                  Strlcpy(in, OMI_GetPath(ID_PREFIX), sizeof(in));
719                  Strlcat(in, "/tests/oi/", sizeof(in));
720                  Strlcat(in, "test3.txt", sizeof(in));
721              
722                  memset(&parser, 0, sizeof(OIParser));
723                  UT_ASSERT_EQUAL(Parser_Init(&parser, in), MI_TRUE);
724                  UT_ASSERT_EQUAL(Parser_Parse(&parser, &events, &count), MI_TRUE);
725              
726                  UT_ASSERT_EQUAL(count, 1);
727                  if (count > 0)
728                  {
729                      // first event
730                      UT_ASSERT_EQUAL(Strcmp(events->Name, "trace_Me"), 0);
731                      UT_ASSERT_EQUAL(Strcmp(events->EventId, "1"), 0);
732                      UT_ASSERT_EQUAL(Strcmp(events->Format, "\", testing commas , , , \""), 0);
733                  }
734              
735                  Parser_Destroy(&parser);
736 krisbash 1.1 }
737              NitsEndTest
738              
739              #if 0
740              /*
741              This test should only work when the code is built for ETW logging
742              */
743              NitsTestWithSetup(Test_ETWActivityID, TestOiSetup)
744              {
745                  OIGUID test, newone;
746                  memset(&test, 0, sizeof(OIGUID));    
747                  memset(&newone, 0, sizeof(OIGUID));    
748                  UT_ASSERT_EQUAL(test.Data1, 0);
749              
750                  OIActivityId(OI_CTRL_CREATE_ID, &test);
751                  OIActivityId(OI_CTRL_SET_ID, &test);
752                  OIActivityId(OI_CTRL_GET_ID, &newone);
753              
754                  trace_EventTransfer(&test, &newone);
755                  trace_EventTransfer(NULL, &newone);
756              
757 krisbash 1.1     UT_ASSERT_EQUAL(test.Data1, newone.Data1);
758              }
759              NitsEndTest
760              #endif
761              
762              

ViewCVS 0.9.2