| 114 | |
| 115 | |
| 116 | class ExecReporter(TestReporter): |
| 117 | def __init__(self, testdir, test, prog): |
| 118 | super(ExecReporter, self).__init__() |
| 119 | self._test = test |
| 120 | self._prog = prog |
| 121 | self.logpath = self.test_logfile(test.name, prog.kind, testdir) |
| 122 | self.out = None |
| 123 | |
| 124 | def begin(self): |
| 125 | self._start() |
| 126 | self._open() |
| 127 | if self.out and not self.out.closed: |
| 128 | self._print_header() |
| 129 | else: |
| 130 | self._log.debug('Output stream is not available.') |
| 131 | |
| 132 | def end(self, returncode): |
| 133 | self._lock.acquire() |
| 134 | try: |
| 135 | if self.out and not self.out.closed: |
| 136 | self._print_footer(returncode) |
| 137 | self._close() |
| 138 | self.out = None |
| 139 | else: |
| 140 | self._log.debug('Output stream is not available.') |
| 141 | finally: |
| 142 | self._lock.release() |
| 143 | |
| 144 | def killed(self): |
| 145 | print(file=self.out) |
| 146 | print('Server process is successfully killed.', file=self.out) |
| 147 | self.end(None) |
| 148 | |
| 149 | def died(self): |
| 150 | print(file=self.out) |
| 151 | print('*** Server process has died unexpectedly ***', file=self.out) |
| 152 | self.end(None) |
| 153 | |
| 154 | _init_failure_exprs = { |
| 155 | 'server': list(map(re.compile, [ |
| 156 | '[Aa]ddress already in use', |
| 157 | 'Could not bind', |
| 158 | 'EADDRINUSE', |
| 159 | ])), |
| 160 | 'client': list(map(re.compile, [ |
| 161 | '[Cc]onnection refused', |
| 162 | 'Could not connect to', |
| 163 | 'Could not open UNIX ', # domain socket (rb) |
| 164 | 'ECONNREFUSED', |
| 165 | 'econnrefused', # erl |
| 166 | 'CONNECTION-REFUSED-ERROR', # cl |
| 167 | 'connect ENOENT', # nodejs domain socket |
| 168 | 'No such file or directory', # domain socket |
| 169 | 'Sockets.TcpClient.Connect', # csharp |
| 170 | ])), |
| 171 | } |
| 172 | |
| 173 | def maybe_false_positive(self): |