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 |