Index: chrome/common/extensions/docs/server2/admin_servlets_test.py |
diff --git a/chrome/common/extensions/docs/server2/admin_servlets_test.py b/chrome/common/extensions/docs/server2/admin_servlets_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..3fe9535bbf4842bb538a76465e81a6aff16ed5d5 |
--- /dev/null |
+++ b/chrome/common/extensions/docs/server2/admin_servlets_test.py |
@@ -0,0 +1,89 @@ |
+#!/usr/bin/env python |
+# Copyright 2015 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import unittest |
+ |
+from admin_servlets import ResetCommitServlet |
+from commit_tracker import CommitTracker |
+from object_store_creator import ObjectStoreCreator |
+from servlet import Request |
+ |
+ |
+_COMMIT_HISTORY_DATA = ( |
+ '1234556789abcdef1234556789abcdef12345567', |
+ 'f00f00f00f00f00f00f00f00f00f00f00f00f00f', |
+ '1010101010101010101010101010101010101010', |
+ 'abcdefabcdefabcdefabcdefabcdefabcdefabcd', |
+ '4242424242424242424242424242424242424242', |
+) |
+ |
+ |
+class _ResetCommitDelegate(ResetCommitServlet.Delegate): |
+ def __init__(self, commit_tracker): |
+ self._commit_tracker = commit_tracker |
+ |
+ def CreateCommitTracker(self): |
+ return self._commit_tracker |
+ |
+ |
+class AdminServletsTest(unittest.TestCase): |
+ def setUp(self): |
+ object_store_creator = ObjectStoreCreator(start_empty=True) |
+ self._commit_tracker = CommitTracker(object_store_creator) |
+ for id in _COMMIT_HISTORY_DATA: |
+ self._commit_tracker.Set('master', id).Get() |
+ |
+ def _ResetCommit(self, commit_name, commit_id): |
+ return ResetCommitServlet( |
+ Request.ForTest('%s/%s' % (commit_name, commit_id)), |
+ _ResetCommitDelegate(self._commit_tracker)).Get() |
+ |
+ def _AssertBadRequest(self, commit_name, commit_id): |
+ response = self._ResetCommit(commit_name, commit_id) |
+ self.assertEqual(response.status, 400, |
+ 'Should have failed to reset to commit %s to %s.' % |
+ (commit_name, commit_id)) |
+ |
+ def _AssertOk(self, commit_name, commit_id): |
+ response = self._ResetCommit(commit_name, commit_id) |
+ self.assertEqual(response.status, 200, |
+ 'Failed to reset commit %s to %s.' % (commit_name, commit_id)) |
+ |
+ def testResetCommitServlet(self): |
+ # Make sure all the valid commits can be used for reset. |
+ for id in _COMMIT_HISTORY_DATA: |
+ self._AssertOk('master', id) |
+ |
+ # Non-existent commit should fail to update |
+ self._AssertBadRequest('master', |
+ 'b000000000000000000000000000000000000000') |
+ |
+ # Commit 'master' should still point to the last valid entry |
+ self.assertEqual(self._commit_tracker.Get('master').Get(), |
+ _COMMIT_HISTORY_DATA[-1]) |
+ |
+ # Reset to a valid commit but older |
+ self._AssertOk('master', _COMMIT_HISTORY_DATA[0]) |
+ |
+ # Commit 'master' should point to the first history entry |
+ self.assertEqual(self._commit_tracker.Get('master').Get(), |
+ _COMMIT_HISTORY_DATA[0]) |
+ |
+ # Add a new entry to the history and validate that it can be used for reset. |
+ _NEW_ENTRY = '9999999999999999999999999999999999999999' |
+ self._commit_tracker.Set('master', _NEW_ENTRY).Get() |
+ self._AssertOk('master', _NEW_ENTRY) |
+ |
+ # Add a bunch (> 50) of entries to ensure that _NEW_ENTRY has been flushed |
+ # out of the history. |
+ for i in xrange(0, 20): |
+ for id in _COMMIT_HISTORY_DATA: |
+ self._commit_tracker.Set('master', id).Get() |
+ |
+ # Verify that _NEW_ENTRY is no longer valid for reset. |
+ self._AssertBadRequest('master', _NEW_ENTRY) |
+ |
+if __name__ == '__main__': |
+ unittest.main() |