| OLD | NEW |
| 1 # Copyright (C) 2012 Google Inc. All rights reserved. | 1 # Copyright (C) 2012 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 28 | 28 |
| 29 | 29 |
| 30 class MockServerProcess(object): | 30 class MockServerProcess(object): |
| 31 def __init__(self, port_obj=None, name=None, cmd=None, env=None, universal_n
ewlines=False, treat_no_data_as_crash=False, logging=False, lines=None, crashed=
False): | 31 |
| 32 def __init__(self, port_obj=None, name=None, cmd=None, env=None, universal_n
ewlines=False, |
| 33 treat_no_data_as_crash=False, logging=False, lines=None, crashe
d=False): |
| 32 self.timed_out = False | 34 self.timed_out = False |
| 33 self.lines = lines or ['#READY'] | 35 self.lines = lines or ['#READY'] |
| 34 self.crashed = crashed | 36 self.crashed = crashed |
| 35 self.writes = [] | 37 self.writes = [] |
| 36 self.cmd = cmd | 38 self.cmd = cmd |
| 37 self.env = env | 39 self.env = env |
| 38 self.treat_no_data_as_crash = treat_no_data_as_crash | 40 self.treat_no_data_as_crash = treat_no_data_as_crash |
| 39 self.logging = logging | 41 self.logging = logging |
| 40 self.started = False | 42 self.started = False |
| 41 self.stopped = False | 43 self.stopped = False |
| 42 | 44 |
| 43 def write(self, bytes): | 45 def write(self, bytes): |
| 44 self.writes.append(bytes) | 46 self.writes.append(bytes) |
| 45 | 47 |
| 46 def has_crashed(self): | 48 def has_crashed(self): |
| 47 return self.crashed | 49 return self.crashed |
| 48 | 50 |
| 49 def read_stdout_line(self, deadline): | 51 def read_stdout_line(self, deadline): |
| 50 return self.lines.pop(0) + "\n" | 52 return self.lines.pop(0) + '\n' |
| 51 | 53 |
| 52 def read_stdout(self, deadline, size): | 54 def read_stdout(self, deadline, size): |
| 53 first_line = self.lines[0] | 55 first_line = self.lines[0] |
| 54 if size > len(first_line): | 56 if size > len(first_line): |
| 55 self.lines.pop(0) | 57 self.lines.pop(0) |
| 56 remaining_size = size - len(first_line) - 1 | 58 remaining_size = size - len(first_line) - 1 |
| 57 if not remaining_size: | 59 if not remaining_size: |
| 58 return first_line + "\n" | 60 return first_line + '\n' |
| 59 return first_line + "\n" + self.read_stdout(deadline, remaining_size
) | 61 return first_line + '\n' + self.read_stdout(deadline, remaining_size
) |
| 60 result = self.lines[0][:size] | 62 result = self.lines[0][:size] |
| 61 self.lines[0] = self.lines[0][size:] | 63 self.lines[0] = self.lines[0][size:] |
| 62 return result | 64 return result |
| 63 | 65 |
| 64 def pop_all_buffered_stderr(self): | 66 def pop_all_buffered_stderr(self): |
| 65 return '' | 67 return '' |
| 66 | 68 |
| 67 def read_either_stdout_or_stderr_line(self, deadline): | 69 def read_either_stdout_or_stderr_line(self, deadline): |
| 68 # FIXME: We should have tests which intermix stderr and stdout lines. | 70 # FIXME: We should have tests which intermix stderr and stdout lines. |
| 69 return self.read_stdout_line(deadline), None | 71 return self.read_stdout_line(deadline), None |
| 70 | 72 |
| 71 def start(self): | 73 def start(self): |
| 72 self.started = True | 74 self.started = True |
| 73 | 75 |
| 74 def stop(self, timeout_sec=0.0): | 76 def stop(self, timeout_sec=0.0): |
| 75 self.stopped = True | 77 self.stopped = True |
| 76 return | 78 return |
| 77 | 79 |
| 78 def kill(self): | 80 def kill(self): |
| 79 return | 81 return |
| OLD | NEW |