OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 import unittest |
| 7 |
| 8 from admin_servlets import ResetCommitServlet |
| 9 from commit_tracker import CommitTracker |
| 10 from object_store_creator import ObjectStoreCreator |
| 11 from servlet import Request |
| 12 |
| 13 |
| 14 _COMMIT_HISTORY_DATA = ( |
| 15 '1234556789abcdef1234556789abcdef12345567', |
| 16 'f00f00f00f00f00f00f00f00f00f00f00f00f00f', |
| 17 '1010101010101010101010101010101010101010', |
| 18 'abcdefabcdefabcdefabcdefabcdefabcdefabcd', |
| 19 '4242424242424242424242424242424242424242', |
| 20 ) |
| 21 |
| 22 |
| 23 class _ResetCommitDelegate(ResetCommitServlet.Delegate): |
| 24 def __init__(self, commit_tracker): |
| 25 self._commit_tracker = commit_tracker |
| 26 |
| 27 def CreateCommitTracker(self): |
| 28 return self._commit_tracker |
| 29 |
| 30 |
| 31 class AdminServletsTest(unittest.TestCase): |
| 32 def setUp(self): |
| 33 object_store_creator = ObjectStoreCreator(start_empty=True) |
| 34 self._commit_tracker = CommitTracker(object_store_creator) |
| 35 for id in _COMMIT_HISTORY_DATA: |
| 36 self._commit_tracker.Set('master', id).Get() |
| 37 |
| 38 def _ResetCommit(self, commit_name, commit_id): |
| 39 return ResetCommitServlet( |
| 40 Request.ForTest('%s/%s' % (commit_name, commit_id)), |
| 41 _ResetCommitDelegate(self._commit_tracker)).Get() |
| 42 |
| 43 def _AssertBadRequest(self, commit_name, commit_id): |
| 44 response = self._ResetCommit(commit_name, commit_id) |
| 45 self.assertEqual(response.status, 400, |
| 46 'Should have failed to reset to commit %s to %s.' % |
| 47 (commit_name, commit_id)) |
| 48 |
| 49 def _AssertOk(self, commit_name, commit_id): |
| 50 response = self._ResetCommit(commit_name, commit_id) |
| 51 self.assertEqual(response.status, 200, |
| 52 'Failed to reset commit %s to %s.' % (commit_name, commit_id)) |
| 53 |
| 54 def testResetCommitServlet(self): |
| 55 # Make sure all the valid commits can be used for reset. |
| 56 for id in _COMMIT_HISTORY_DATA: |
| 57 self._AssertOk('master', id) |
| 58 |
| 59 # Non-existent commit should fail to update |
| 60 self._AssertBadRequest('master', |
| 61 'b000000000000000000000000000000000000000') |
| 62 |
| 63 # Commit 'master' should still point to the last valid entry |
| 64 self.assertEqual(self._commit_tracker.Get('master').Get(), |
| 65 _COMMIT_HISTORY_DATA[-1]) |
| 66 |
| 67 # Reset to a valid commit but older |
| 68 self._AssertOk('master', _COMMIT_HISTORY_DATA[0]) |
| 69 |
| 70 # Commit 'master' should point to the first history entry |
| 71 self.assertEqual(self._commit_tracker.Get('master').Get(), |
| 72 _COMMIT_HISTORY_DATA[0]) |
| 73 |
| 74 # Add a new entry to the history and validate that it can be used for reset. |
| 75 _NEW_ENTRY = '9999999999999999999999999999999999999999' |
| 76 self._commit_tracker.Set('master', _NEW_ENTRY).Get() |
| 77 self._AssertOk('master', _NEW_ENTRY) |
| 78 |
| 79 # Add a bunch (> 50) of entries to ensure that _NEW_ENTRY has been flushed |
| 80 # out of the history. |
| 81 for i in xrange(0, 20): |
| 82 for id in _COMMIT_HISTORY_DATA: |
| 83 self._commit_tracker.Set('master', id).Get() |
| 84 |
| 85 # Verify that _NEW_ENTRY is no longer valid for reset. |
| 86 self._AssertBadRequest('master', _NEW_ENTRY) |
| 87 |
| 88 if __name__ == '__main__': |
| 89 unittest.main() |
OLD | NEW |