| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Generate fake repositories for testing.""" | 6 """Generate fake repositories for testing.""" |
| 7 | 7 |
| 8 import atexit | 8 import atexit |
| 9 import datetime | 9 import datetime |
| 10 import errno | 10 import errno |
| 11 import logging | 11 import logging |
| 12 import os | 12 import os |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 time.sleep(0.1) | 180 time.sleep(0.1) |
| 181 | 181 |
| 182 try: | 182 try: |
| 183 start = datetime.datetime.utcnow() | 183 start = datetime.datetime.utcnow() |
| 184 maxdelay = datetime.timedelta(seconds=30) | 184 maxdelay = datetime.timedelta(seconds=30) |
| 185 while (datetime.datetime.utcnow() - start) < maxdelay: | 185 while (datetime.datetime.utcnow() - start) < maxdelay: |
| 186 try: | 186 try: |
| 187 sock.connect((host, port)) | 187 sock.connect((host, port)) |
| 188 logging.debug('%d is now bound' % port) | 188 logging.debug('%d is now bound' % port) |
| 189 return | 189 return |
| 190 except EnvironmentError: | 190 except (socket.error, EnvironmentError): |
| 191 pass | 191 pass |
| 192 logging.debug('%d is still not bound' % port) | 192 logging.debug('%d is still not bound' % port) |
| 193 finally: | 193 finally: |
| 194 sock.close() | 194 sock.close() |
| 195 # The process failed to bind. Kill it and dump its ouput. | 195 # The process failed to bind. Kill it and dump its ouput. |
| 196 process.kill() | 196 process.kill() |
| 197 logging.error('%s' % process.communicate()[0]) | 197 logging.error('%s' % process.communicate()[0]) |
| 198 assert False, '%d is still not bound' % port | 198 assert False, '%d is still not bound' % port |
| 199 | 199 |
| 200 | 200 |
| 201 def wait_for_port_to_free(host, port): | 201 def wait_for_port_to_free(host, port): |
| 202 start = datetime.datetime.utcnow() | 202 start = datetime.datetime.utcnow() |
| 203 maxdelay = datetime.timedelta(seconds=30) | 203 maxdelay = datetime.timedelta(seconds=30) |
| 204 while (datetime.datetime.utcnow() - start) < maxdelay: | 204 while (datetime.datetime.utcnow() - start) < maxdelay: |
| 205 try: | 205 try: |
| 206 sock = socket.socket() | 206 sock = socket.socket() |
| 207 sock.connect((host, port)) | 207 sock.connect((host, port)) |
| 208 logging.debug('%d was bound, waiting to free' % port) | 208 logging.debug('%d was bound, waiting to free' % port) |
| 209 except EnvironmentError: | 209 except (socket.error, EnvironmentError): |
| 210 logging.debug('%d now free' % port) | 210 logging.debug('%d now free' % port) |
| 211 return | 211 return |
| 212 finally: | 212 finally: |
| 213 sock.close() | 213 sock.close() |
| 214 assert False, '%d is still bound' % port | 214 assert False, '%d is still bound' % port |
| 215 | 215 |
| 216 | 216 |
| 217 _FAKE_LOADED = False | 217 _FAKE_LOADED = False |
| 218 | 218 |
| 219 class FakeReposBase(object): | 219 class FakeReposBase(object): |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 else: | 357 else: |
| 358 write(join(root, k), v) | 358 write(join(root, k), v) |
| 359 | 359 |
| 360 def set_up_svn(self): | 360 def set_up_svn(self): |
| 361 """Creates subversion repositories and start the servers.""" | 361 """Creates subversion repositories and start the servers.""" |
| 362 self.set_up() | 362 self.set_up() |
| 363 if self.svnserve: | 363 if self.svnserve: |
| 364 return True | 364 return True |
| 365 try: | 365 try: |
| 366 check_call(['svnadmin', 'create', self.svn_repo]) | 366 check_call(['svnadmin', 'create', self.svn_repo]) |
| 367 except OSError: | 367 except OSError, e: |
| 368 logging.debug('Failed with : %s' % e) |
| 368 return False | 369 return False |
| 369 write(join(self.svn_repo, 'conf', 'svnserve.conf'), | 370 write(join(self.svn_repo, 'conf', 'svnserve.conf'), |
| 370 '[general]\n' | 371 '[general]\n' |
| 371 'anon-access = read\n' | 372 'anon-access = read\n' |
| 372 'auth-access = write\n' | 373 'auth-access = write\n' |
| 373 'password-db = passwd\n') | 374 'password-db = passwd\n') |
| 374 text = '[users]\n' | 375 text = '[users]\n' |
| 375 text += ''.join('%s = %s\n' % (usr, pwd) for usr, pwd in self.USERS) | 376 text += ''.join('%s = %s\n' % (usr, pwd) for usr, pwd in self.USERS) |
| 376 write(join(self.svn_repo, 'conf', 'passwd'), text) | 377 write(join(self.svn_repo, 'conf', 'passwd'), text) |
| 377 | 378 |
| 378 # Mac 10.6 ships with a buggy subversion build and we need this line | 379 # Mac 10.6 ships with a buggy subversion build and we need this line |
| 379 # to work around the bug. | 380 # to work around the bug. |
| 380 write(join(self.svn_repo, 'db', 'fsfs.conf'), | 381 write(join(self.svn_repo, 'db', 'fsfs.conf'), |
| 381 '[rep-sharing]\n' | 382 '[rep-sharing]\n' |
| 382 'enable-rep-sharing = false\n') | 383 'enable-rep-sharing = false\n') |
| 383 | 384 |
| 384 # Start the daemon. | 385 # Start the daemon. |
| 385 self.svn_port = find_free_port(self.host, 10000) | 386 self.svn_port = find_free_port(self.host, 10000) |
| 387 logging.debug('Using port %d' % self.svn_port) |
| 386 cmd = ['svnserve', '-d', '--foreground', '-r', self.root_dir, | 388 cmd = ['svnserve', '-d', '--foreground', '-r', self.root_dir, |
| 387 '--listen-port=%d' % self.svn_port] | 389 '--listen-port=%d' % self.svn_port] |
| 388 if self.host == '127.0.0.1': | 390 if self.host == '127.0.0.1': |
| 389 cmd.append('--listen-host=' + self.host) | 391 cmd.append('--listen-host=' + self.host) |
| 390 self.check_port_is_free(self.svn_port) | 392 self.check_port_is_free(self.svn_port) |
| 391 self.svnserve = Popen(cmd, cwd=self.svn_repo) | 393 self.svnserve = Popen(cmd, cwd=self.svn_repo) |
| 392 wait_for_port_to_bind(self.host, self.svn_port, self.svnserve) | 394 wait_for_port_to_bind(self.host, self.svn_port, self.svnserve) |
| 393 self.svn_base = 'svn://%s:%d/svn/' % (self.host, self.svn_port) | 395 self.svn_base = 'svn://%s:%d/svn/' % (self.host, self.svn_port) |
| 394 self.populateSvn() | 396 self.populateSvn() |
| 395 self.svn_dirty = False | 397 self.svn_dirty = False |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 else: | 447 else: |
| 446 new_tree = tree.copy() | 448 new_tree = tree.copy() |
| 447 self.git_hashes[repo].append((commit_hash, new_tree)) | 449 self.git_hashes[repo].append((commit_hash, new_tree)) |
| 448 | 450 |
| 449 def check_port_is_free(self, port): | 451 def check_port_is_free(self, port): |
| 450 sock = socket.socket() | 452 sock = socket.socket() |
| 451 try: | 453 try: |
| 452 sock.connect((self.host, port)) | 454 sock.connect((self.host, port)) |
| 453 # It worked, throw. | 455 # It worked, throw. |
| 454 assert False, '%d shouldn\'t be bound' % port | 456 assert False, '%d shouldn\'t be bound' % port |
| 455 except EnvironmentError: | 457 except (socket.error, EnvironmentError): |
| 456 pass | 458 pass |
| 457 finally: | 459 finally: |
| 458 sock.close() | 460 sock.close() |
| 459 | 461 |
| 460 def populateSvn(self): | 462 def populateSvn(self): |
| 461 raise NotImplementedError() | 463 raise NotImplementedError() |
| 462 | 464 |
| 463 def populateGit(self): | 465 def populateGit(self): |
| 464 raise NotImplementedError() | 466 raise NotImplementedError() |
| 465 | 467 |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 fake.set_up_git() | 777 fake.set_up_git() |
| 776 print('Fake setup, press enter to quit or Ctrl-C to keep the checkouts.') | 778 print('Fake setup, press enter to quit or Ctrl-C to keep the checkouts.') |
| 777 sys.stdin.readline() | 779 sys.stdin.readline() |
| 778 except KeyboardInterrupt: | 780 except KeyboardInterrupt: |
| 779 trial_dir.TrialDir.SHOULD_LEAK.leak = True | 781 trial_dir.TrialDir.SHOULD_LEAK.leak = True |
| 780 return 0 | 782 return 0 |
| 781 | 783 |
| 782 | 784 |
| 783 if __name__ == '__main__': | 785 if __name__ == '__main__': |
| 784 sys.exit(main(sys.argv)) | 786 sys.exit(main(sys.argv)) |
| OLD | NEW |