xref: /f-stack/tools/libxo/tests/core/test_11.c (revision d4a07e70)
1*d4a07e70Sfengbojiang /*
2*d4a07e70Sfengbojiang  * Copyright (c) 2014, Juniper Networks, Inc.
3*d4a07e70Sfengbojiang  * All rights reserved.
4*d4a07e70Sfengbojiang  * This SOFTWARE is licensed under the LICENSE provided in the
5*d4a07e70Sfengbojiang  * ../Copyright file. By downloading, installing, copying, or otherwise
6*d4a07e70Sfengbojiang  * using the SOFTWARE, you agree to be bound by the terms of that
7*d4a07e70Sfengbojiang  * LICENSE.
8*d4a07e70Sfengbojiang  * Phil Shafer, July 2014
9*d4a07e70Sfengbojiang  */
10*d4a07e70Sfengbojiang 
11*d4a07e70Sfengbojiang #include <stdio.h>
12*d4a07e70Sfengbojiang #include <stdlib.h>
13*d4a07e70Sfengbojiang #include <string.h>
14*d4a07e70Sfengbojiang #include <unistd.h>
15*d4a07e70Sfengbojiang #include <errno.h>
16*d4a07e70Sfengbojiang #include <time.h>
17*d4a07e70Sfengbojiang #include <ctype.h>
18*d4a07e70Sfengbojiang #include <syslog.h>
19*d4a07e70Sfengbojiang 
20*d4a07e70Sfengbojiang #include "xo.h"
21*d4a07e70Sfengbojiang #include "xo_encoder.h"
22*d4a07e70Sfengbojiang 
23*d4a07e70Sfengbojiang void
test_syslog_open(void)24*d4a07e70Sfengbojiang test_syslog_open (void)
25*d4a07e70Sfengbojiang {
26*d4a07e70Sfengbojiang     printf("syslog open\n");
27*d4a07e70Sfengbojiang }
28*d4a07e70Sfengbojiang 
29*d4a07e70Sfengbojiang void
test_syslog_close(void)30*d4a07e70Sfengbojiang test_syslog_close (void)
31*d4a07e70Sfengbojiang {
32*d4a07e70Sfengbojiang     printf("syslog close\n");
33*d4a07e70Sfengbojiang }
34*d4a07e70Sfengbojiang 
35*d4a07e70Sfengbojiang void
test_syslog_send(const char * full_msg,const char * v0_hdr,const char * text_only)36*d4a07e70Sfengbojiang test_syslog_send (const char *full_msg, const char *v0_hdr,
37*d4a07e70Sfengbojiang 		  const char *text_only)
38*d4a07e70Sfengbojiang {
39*d4a07e70Sfengbojiang     printf("{{%s}}\n{{%s}}\n{{%s}}\n\n", full_msg, v0_hdr, text_only);
40*d4a07e70Sfengbojiang }
41*d4a07e70Sfengbojiang 
42*d4a07e70Sfengbojiang int
main(int argc,char ** argv)43*d4a07e70Sfengbojiang main (int argc, char **argv)
44*d4a07e70Sfengbojiang {
45*d4a07e70Sfengbojiang     int unit_test = 1;
46*d4a07e70Sfengbojiang     int fire = 0;
47*d4a07e70Sfengbojiang     const char *tzone = "EST";
48*d4a07e70Sfengbojiang 
49*d4a07e70Sfengbojiang     argc = xo_parse_args(argc, argv);
50*d4a07e70Sfengbojiang     if (argc < 0)
51*d4a07e70Sfengbojiang 	return 1;
52*d4a07e70Sfengbojiang 
53*d4a07e70Sfengbojiang     for (argc = 1; argv[argc]; argc++) {
54*d4a07e70Sfengbojiang 	if (xo_streq(argv[argc], "full"))
55*d4a07e70Sfengbojiang 	    unit_test = 0;
56*d4a07e70Sfengbojiang 	else if (xo_streq(argv[argc], "fire"))
57*d4a07e70Sfengbojiang 	    fire = 1;
58*d4a07e70Sfengbojiang 	else if (xo_streq(argv[argc], "tz"))
59*d4a07e70Sfengbojiang 	    tzone = argv[++argc];
60*d4a07e70Sfengbojiang     }
61*d4a07e70Sfengbojiang 
62*d4a07e70Sfengbojiang     setenv("TZ", tzone, 1);
63*d4a07e70Sfengbojiang     tzset();
64*d4a07e70Sfengbojiang 
65*d4a07e70Sfengbojiang     if (!fire) {
66*d4a07e70Sfengbojiang 	xo_set_syslog_handler(test_syslog_open, test_syslog_send,
67*d4a07e70Sfengbojiang 			      test_syslog_close);
68*d4a07e70Sfengbojiang     }
69*d4a07e70Sfengbojiang 
70*d4a07e70Sfengbojiang     if (unit_test) {
71*d4a07e70Sfengbojiang 	xo_set_unit_test_mode(1);
72*d4a07e70Sfengbojiang 	xo_open_log("test-program", LOG_PERROR, 0);
73*d4a07e70Sfengbojiang     }
74*d4a07e70Sfengbojiang 
75*d4a07e70Sfengbojiang     xo_set_version("3.1.4");
76*d4a07e70Sfengbojiang     xo_set_syslog_enterprise_id(42); /* SunOs */
77*d4a07e70Sfengbojiang 
78*d4a07e70Sfengbojiang     xo_open_container_h(NULL, "top");
79*d4a07e70Sfengbojiang 
80*d4a07e70Sfengbojiang     xo_syslog(LOG_INFO | LOG_KERN, "animal-status",
81*d4a07e70Sfengbojiang 	      "The {:animal} is {:state}", "snake", "loose");
82*d4a07e70Sfengbojiang     xo_syslog(LOG_INFO | LOG_MAIL, "animal-consumed",
83*d4a07e70Sfengbojiang 	      "My {:animal} ate your {:pet}", "snake", "hamster");
84*d4a07e70Sfengbojiang     xo_syslog(LOG_NOTICE | LOG_DAEMON, "animal-talk",
85*d4a07e70Sfengbojiang 	      "{:count/%d} {:animal} said {:quote}", 1, "owl", "\"e=m\\c[2]\"");
86*d4a07e70Sfengbojiang 
87*d4a07e70Sfengbojiang     /*
88*d4a07e70Sfengbojiang       <165>1 2003-10-11T22:14:15.003Z mymachine.example.com
89*d4a07e70Sfengbojiang            evntslog - ID47 [exampleSDID@32473 iut="3" eventSource=
90*d4a07e70Sfengbojiang            "Application" eventID="1011"] BOMAn application
91*d4a07e70Sfengbojiang            event log entry...
92*d4a07e70Sfengbojiang 
93*d4a07e70Sfengbojiang    This example is modeled after Example 1.  However, this time it
94*d4a07e70Sfengbojiang    contains STRUCTURED-DATA, a single element with the value
95*d4a07e70Sfengbojiang    "[exampleSDID@32473 iut="3" eventSource="Application"
96*d4a07e70Sfengbojiang    eventID="1011"]".  The MSG itself is "An application event log
97*d4a07e70Sfengbojiang    entry..."  The BOM at the beginning of MSG indicates UTF-8 encoding.
98*d4a07e70Sfengbojiang     */
99*d4a07e70Sfengbojiang 
100*d4a07e70Sfengbojiang     xo_set_syslog_enterprise_id(32473);
101*d4a07e70Sfengbojiang     xo_syslog(LOG_LOCAL4 | LOG_NOTICE, "ID47",
102*d4a07e70Sfengbojiang 	      "{e:iut/%u}An {:event-source} {:event-id/%u} log entry",
103*d4a07e70Sfengbojiang 	      3, "application", 1011);
104*d4a07e70Sfengbojiang 
105*d4a07e70Sfengbojiang     xo_close_container_h(NULL, "top");
106*d4a07e70Sfengbojiang 
107*d4a07e70Sfengbojiang     xo_finish();
108*d4a07e70Sfengbojiang 
109*d4a07e70Sfengbojiang     return 0;
110*d4a07e70Sfengbojiang }
111