summaryrefslogtreecommitdiffstats
path: root/net/tools
diff options
context:
space:
mode:
authorzea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-31 19:44:25 +0000
committerzea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-31 19:44:25 +0000
commit310512cc361ab20d11a236095664fafae2250fac (patch)
treece779afc56fb845f043ea7f54e905c7ff4d8d697 /net/tools
parent126f1d652abfd11204fb7b4aed48dcb9999903d9 (diff)
downloadchromium_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.py21
-rwxr-xr-xnet/tools/testserver/chromiumsync_test.py6
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()