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 |