Index: appengine/swarming/server/bot_code_test.py |
diff --git a/appengine/swarming/server/bot_code_test.py b/appengine/swarming/server/bot_code_test.py |
index 46218e519aea147fe0f27195af850d718d31d1c7..c2153de09d1c974985874cdc59afd6cd1915fd9e 100755 |
--- a/appengine/swarming/server/bot_code_test.py |
+++ b/appengine/swarming/server/bot_code_test.py |
@@ -10,12 +10,14 @@ import re |
import subprocess |
import sys |
import tempfile |
+import time |
import unittest |
import zipfile |
import test_env |
test_env.setup_test_env() |
+from google.appengine.ext import ndb |
from components import auth |
from test_support import test_case |
@@ -40,6 +42,7 @@ class BotManagementTest(test_case.TestCase): |
auth, 'get_current_identity', |
lambda: auth.Identity(auth.IDENTITY_USER, 'joe@localhost')) |
+ |
def test_get_bootstrap(self): |
def get_self_config_mock(path, revision=None, store_last_good=False): |
self.assertEqual('scripts/bootstrap.py', path) |
@@ -94,7 +97,37 @@ class BotManagementTest(test_case.TestCase): |
self.assertEqual(expected, additionals) |
def test_get_swarming_bot_zip(self): |
+ local_mc = {'store': {}, 'reads': 0, 'writes': 0} |
+ |
+ @ndb.tasklet |
+ def mock_memcache_get(version, desc, part=None): |
+ value = local_mc['store'].get(bot_code.bot_key(version, desc, part)) |
+ if value is not None: |
+ local_mc['reads'] += 1 |
+ raise ndb.Return(value) |
+ |
+ @ndb.tasklet |
+ def mock_memcache_set(value, version, desc, part=None): |
+ local_mc['writes'] += 1 |
+ key = bot_code.bot_key(version, desc, part) |
+ local_mc['store'][key] = value |
+ return ndb.Return(None) |
+ |
+ self.mock(bot_code, 'bot_memcache_set', mock_memcache_set) |
+ self.mock(bot_code, 'bot_memcache_get', mock_memcache_get) |
+ self.mock(bot_code, 'MAX_MEMCACHED_SIZE_BYTES', 100000) |
+ |
+ self.assertEqual(0, local_mc['writes']) |
zipped_code = bot_code.get_swarming_bot_zip('http://localhost') |
+ self.assertEqual(0, local_mc['reads']) |
+ self.assertNotEqual(0, local_mc['writes']) |
+ |
+ # Make sure that we read from memcached if we get it again |
+ zipped_code_copy = bot_code.get_swarming_bot_zip('http://localhost') |
+ self.assertEqual(local_mc['writes'], local_mc['reads']) |
+ # Why not assertEqual? Don't want to dump ~1MB of data if this fails. |
+ self.assertTrue(zipped_code == zipped_code_copy) |
+ |
# Ensure the zip is valid and all the expected files are present. |
with zipfile.ZipFile(StringIO.StringIO(zipped_code), 'r') as zip_file: |
for i in bot_archive.FILES: |
@@ -120,6 +153,7 @@ class BotManagementTest(test_case.TestCase): |
finally: |
file_path.rmtree(temp_dir) |
+ |
def test_bootstrap_token(self): |
tok = bot_code.generate_bootstrap_token() |
self.assertEqual( |