diff options
author | zea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-31 19:44:25 +0000 |
---|---|---|
committer | zea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-31 19:44:25 +0000 |
commit | 310512cc361ab20d11a236095664fafae2250fac (patch) | |
tree | ce779afc56fb845f043ea7f54e905c7ff4d8d697 /net/tools | |
parent | 126f1d652abfd11204fb7b4aed48dcb9999903d9 (diff) | |
download | chromium_src-310512cc361ab20d11a236095664fafae2250fac.zip chromium_src-310512cc361ab20d11a236095664fafae2250fac.tar.gz chromium_src-310512cc361ab20d11a236095664fafae2250fac.tar.bz2 |
[Sync] Add support for performing a GetKey on startup.
The functionality is behind the --sync-keystore-encryption flag, and the key
is not currently consumed by anything, but this lays the groundwork for testing
the server and client interaction.
We request a key anytime we perform a GetUpdates while the cryptographer
does not have a keystore key. But, it is considered an error to request a key
and not receive one, putting us into a state of backoff.
BUG=129665
TEST=sync_unit_tests, running against python server
Review URL: https://chromiumcodereview.appspot.com/10455012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149248 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools')
-rw-r--r-- | net/tools/testserver/chromiumsync.py | 21 | ||||
-rwxr-xr-x | net/tools/testserver/chromiumsync_test.py | 6 |
2 files changed, 24 insertions, 3 deletions
diff --git a/net/tools/testserver/chromiumsync.py b/net/tools/testserver/chromiumsync.py index d789bcb..24325f5 100644 --- a/net/tools/testserver/chromiumsync.py +++ b/net/tools/testserver/chromiumsync.py @@ -13,6 +13,7 @@ import copy import operator import pickle import random +import string import sys import threading import time @@ -97,6 +98,9 @@ ROOT_ID = '0' # Jan 1 1970, 00:00:00, non-dst. UNIX_TIME_EPOCH = (1970, 1, 1, 0, 0, 0, 3, 1, 0) +# The number of characters in the server-generated encryption key. +KEYSTORE_KEY_LENGTH = 16 + class Error(Exception): """Error class for this module.""" @@ -468,6 +472,9 @@ class SyncDataModel(object): self.induced_error_frequency = 0 self.sync_count_before_errors = 0 + self._key = ''.join(random.choice(string.ascii_uppercase + string.digits) + for x in xrange(KEYSTORE_KEY_LENGTH)) + def _SaveEntry(self, entry): """Insert or update an entry in the change log, and give it a new version. @@ -664,6 +671,11 @@ class SyncDataModel(object): # batch, even if that item was filtered out. return (batch[-1].version, filtered, len(new_changes) - len(batch)) + def GetKey(self): + """Returns the encryption key for this account.""" + print "Returning encryption key: %s" % self._key + return self._key + def _CopyOverImmutableFields(self, entry): """Preserve immutable fields by copying pre-commit state. @@ -1043,7 +1055,7 @@ class TestServer(object): def HandleSetInducedError(self, path): query = urlparse.urlparse(path)[4] self.account_lock.acquire() - code = 200; + code = 200 response = 'Success' error = sync_pb2.ClientToServerResponse.Error() try: @@ -1132,8 +1144,8 @@ class TestServer(object): response.error_code = sync_enums_pb2.SyncEnums.SUCCESS self.CheckStoreBirthday(request) response.store_birthday = self.account.store_birthday - self.CheckTransientError(); - self.CheckSendError(); + self.CheckTransientError() + self.CheckSendError() print_context('->') @@ -1262,3 +1274,6 @@ class TestServer(object): reply = update_response.entries.add() reply.CopyFrom(entry) update_sieve.SaveProgress(new_timestamp, update_response) + + if update_request.need_encryption_key: + update_response.encryption_key = self.account.GetKey() diff --git a/net/tools/testserver/chromiumsync_test.py b/net/tools/testserver/chromiumsync_test.py index 2485b0f..e680d41 100755 --- a/net/tools/testserver/chromiumsync_test.py +++ b/net/tools/testserver/chromiumsync_test.py @@ -600,6 +600,12 @@ class SyncDataModelTest(unittest.TestCase): len(changes)) self.assertEqual(version2, version) + def testGetKey(self): + key1 = self.model.GetKey() + key2 = self.model.GetKey() + self.assertTrue(len(key1) > 0) + self.assertEqual(key1, key2) + if __name__ == '__main__': unittest.main() |