Imported Upstream version 2.5.1
[ossec-hids.git] / contrib / ossec-testing / runtests.py
1 import ConfigParser
2 import subprocess 
3 import os 
4 import sys
5 import os.path 
6
7 class OssecTester(object):
8     def __init__(self):
9         self._debug = False 
10         self._quiet = False 
11         self._ossec_conf = "/var/ossec/etc/ossec.conf"
12         self._base_dir = "/var/ossec/"
13         self._ossec_path = "/var/ossec/bin/"
14         self._test_path = "./tests" 
15
16     def buildCmd(self, rule, alert, decoder):
17         cmd = ['%s/ossec-logtest'%(self._ossec_path),] 
18         if self._ossec_conf: cmd += ["-c",self._ossec_conf]
19         if self._base_dir: cmd += ["-D", self._base_dir]
20         cmd += ['-U', "%s:%s:%s"%(rule,alert,decoder)]
21         return cmd
22
23     def runTest(self, log, rule, alert, decoder, section, name, negate=False):
24         print self.buildCmd(rule, alert, decoder)
25         p = subprocess.Popen(self.buildCmd(rule, alert, decoder),
26                 stdout=subprocess.PIPE,
27                 stderr=subprocess.STDOUT,
28                 stdin=subprocess.PIPE,
29                 shell=False)
30         std_out = p.communicate(log)[0]
31         if (p.returncode != 0 and not negate) or (p.returncode == 0 and negate):
32             print "" 
33             print "-" * 60
34             print "Failed: Exit code = %s"%(p.returncode) 
35             print "        Alert     = %s"%(alert) 
36             print "        Rule      = %s"%(rule)
37             print "        Decoder   = %s"%(decoder)
38             print "        Section   = %s"%(section)
39             print "        line name = %s"%(name)
40             print " " 
41             print std_out 
42         elif self._debug:
43             print "Exit code= %s"%(p.returncode) 
44             print std_out
45         else:
46             sys.stdout.write(".")
47
48     def run(self):
49         for aFile in os.listdir(self._test_path):
50             aFile = os.path.join(self._test_path, aFile)
51             print "- [ File = %s ] ---------"%(aFile)
52             if aFile.endswith(".ini"):
53                 tGroup = ConfigParser.ConfigParser()
54                 tGroup.read([aFile])
55                 tSections = tGroup.sections()
56                 for t in tSections:
57                     rule = tGroup.get(t, "rule")
58                     alert = tGroup.get(t, "alert")
59                     decoder = tGroup.get(t, "decoder")
60                     for (name, value) in tGroup.items(t):
61                         if name.startswith("log "):
62                             if self._debug: 
63                                 print "-"* 60
64                             if name.endswith("pass"):
65                                 neg = False 
66                             elif name.endswith("fail"):
67                                 neg = True
68                             else:
69                                 neg = False 
70                             self.runTest(value, rule, alert, decoder, t, name, negate=neg)
71                 print ""
72
73 if __name__ == "__main__":
74     OT = OssecTester()
75     OT.run() 
76
77
78
79
80
81