11import unittest
22from superlance .compat import StringIO
3+ import re
34
45class CrashMailTests (unittest .TestCase ):
56 def _getTargetClass (self ):
@@ -29,7 +30,7 @@ def _makeOnePopulated(self, programs, any, response=None):
2930 return prog
3031
3132 def test_runforever_not_process_state_exited (self ):
32- programs = { 'foo' : 0 , 'bar' : 0 , 'baz_01' : 0 }
33+ programs = []
3334 any = None
3435 prog = self ._makeOnePopulated (programs , any )
3536 prog .stdin .write ('eventname:PROCESS_STATE len:0\n ' )
@@ -38,7 +39,7 @@ def test_runforever_not_process_state_exited(self):
3839 self .assertEqual (prog .stderr .getvalue (), 'non-exited event\n ' )
3940
4041 def test_runforever_expected_exit (self ):
41- programs = ['foo' ]
42+ programs = [re . compile ( 'foo' ) ]
4243 any = None
4344 prog = self ._makeOnePopulated (programs , any )
4445 payload = ('expected:1 processname:foo groupname:bar '
@@ -51,7 +52,7 @@ def test_runforever_expected_exit(self):
5152 self .assertEqual (prog .stderr .getvalue (), 'expected exit\n ' )
5253
5354 def test_runforever_unexpected_exit (self ):
54- programs = [' foo' ]
55+ programs = [re . compile ( 'bar: foo') ]
5556 any = None
5657 prog = self ._makeOnePopulated (programs , any )
5758 payload = ('expected:0 processname:foo groupname:bar '
@@ -63,20 +64,53 @@ def test_runforever_unexpected_exit(self):
6364 prog .runforever (test = True )
6465 output = prog .stderr .getvalue ()
6566 lines = output .split ('\n ' )
66- self .assertEqual (lines [0 ], 'unexpected exit, mailing' )
67- self .assertEqual (lines [1 ], 'Mailed:' )
68- self .assertEqual (lines [2 ], '' )
69- self .
assertEqual (
lines [
3 ],
'To: [email protected] ' )
70- self .assertTrue ('Subject: [foo]: foo crashed at' in lines [4 ])
71- self .assertEqual (lines [5 ], '' )
67+
68+ self .assertEqual (lines [1 ], 'unexpected exit, mailing' )
69+ self .assertEqual (lines [2 ], 'Mailed:' )
70+ self .assertEqual (lines [3 ], '' )
71+ self .
assertEqual (
lines [
4 ],
'To: [email protected] ' )
72+ self .assertTrue ('Subject: [foo]: foo crashed at' in lines [5 ])
73+ self .assertEqual (lines [6 ], '' )
7274 self .assertTrue (
73- 'Process foo in group bar exited unexpectedly' in lines [6 ])
75+ 'Process foo in group bar exited unexpectedly' in lines [7 ])
7476 import os
7577 f = open (os .path .join (self .tempdir , 'email.log' ), 'r' )
7678 mail = f .read ()
7779 f .close ()
7880 self .assertTrue (
7981 'Process foo in group bar exited unexpectedly' in mail )
8082
83+ def test_runforever_unexpected_exit_group (self ):
84+ programs = [re .compile ('bar:*' )]
85+ any = None
86+ prog = self ._makeOnePopulated (programs , any )
87+ payload = ('expected:0 processname:foo groupname:bar '
88+ 'from_state:RUNNING pid:1' )
89+ prog .stdin .write (
90+ 'eventname:PROCESS_STATE_EXITED len:%s\n ' % len (payload ))
91+ prog .stdin .write (payload )
92+ prog .stdin .seek (0 )
93+ prog .runforever (test = True )
94+ output = prog .stderr .getvalue ()
95+ lines = output .split ('\n ' )
96+
97+ self .assertEqual (lines [1 ], 'unexpected exit, mailing' )
98+
99+ def test_runforever_unexpected_exit_ignored (self ):
100+ programs = [re .compile ('notfoo' )]
101+ any = None
102+ prog = self ._makeOnePopulated (programs , any )
103+ payload = ('expected:0 processname:foo groupname:bar '
104+ 'from_state:RUNNING pid:1' )
105+ prog .stdin .write (
106+ 'eventname:PROCESS_STATE_EXITED len:%s\n ' % len (payload ))
107+ prog .stdin .write (payload )
108+ prog .stdin .seek (0 )
109+ prog .runforever (test = True )
110+ output = prog .stderr .getvalue ()
111+ lines = output .split ('\n ' )
112+
113+ self .assertTrue ('ignoring [foo]: foo crashed ' in lines [1 ])
114+
81115if __name__ == '__main__' :
82116 unittest .main ()
0 commit comments