9 class OssecTester(object):
14 self._ossec_conf = "/var/ossec/etc/ossec.conf"
15 self._base_dir = "/var/ossec/"
16 self._ossec_path = "/var/ossec/bin/"
17 self._test_path = "./tests"
19 def buildCmd(self, rule, alert, decoder):
20 cmd = ['%s/ossec-logtest' % (self._ossec_path), ]
23 cmd += ["-c", self._ossec_conf]
25 cmd += ["-D", self._base_dir]
26 cmd += ['-U', "%s:%s:%s" % (rule, alert, decoder)]
29 def runTest(self, log, rule, alert, decoder, section, name, negate=False):
30 #print self.buildCmd(rule, alert, decoder)
32 self.buildCmd(rule, alert, decoder),
33 stdout=subprocess.PIPE,
34 stderr=subprocess.STDOUT,
35 stdin=subprocess.PIPE,
37 std_out = p.communicate(log)[0]
38 if (p.returncode != 0 and not negate) or (p.returncode == 0 and negate):
42 print "Failed: Exit code = %s" % (p.returncode)
43 print " Alert = %s" % (alert)
44 print " Rule = %s" % (rule)
45 print " Decoder = %s" % (decoder)
46 print " Section = %s" % (section)
47 print " line name = %s" % (name)
51 print "Exit code= %s" % (p.returncode)
56 def run(self, selective_test=False):
57 for aFile in os.listdir(self._test_path):
58 aFile = os.path.join(self._test_path, aFile)
59 if aFile.endswith(".ini"):
60 if selective_test and not aFile.endswith(selective_test):
62 print "- [ File = %s ] ---------" % (aFile)
63 tGroup = ConfigParser.ConfigParser()
65 tSections = tGroup.sections()
67 rule = tGroup.get(t, "rule")
68 alert = tGroup.get(t, "alert")
69 decoder = tGroup.get(t, "decoder")
70 for (name, value) in tGroup.items(t):
71 if name.startswith("log "):
74 if name.endswith("pass"):
76 elif name.endswith("fail"):
80 self.runTest(value, rule, alert, decoder,
86 if __name__ == "__main__":
87 if len(sys.argv) == 2:
88 selective_test = sys.argv[1]
89 if not selective_test.endswith('.ini'):
90 selective_test += '.ini'
92 selective_test = False
94 OT.run(selective_test)