blob: 74cb58be2f726617032b65a2dd7e5ac6e0d8bb46 [file]
# Copyright 2018 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 base64
import json
import mock
import zlib
from infra_api_clients import http_client_util
from infra_api_clients.isolate import isolate_util
from services import isolate
from waterfall.test import wf_testcase
def _SimulateContent(d, encoded=False):
content = zlib.compress(json.dumps(d))
if encoded:
content = base64.b64encode(content)
return content
class IsolateTest(wf_testcase.WaterfallTestCase):
def setUp(self):
super(IsolateTest, self).setUp()
self.content1 = json.dumps({
'content':
_SimulateContent(
{
'files': {
'output.json': {
'h': 'h'
}
}
}, encoded=True),
'kind':
'isolateservice#resourcesItem',
'etag':
'\'H_l3X6I4W5tDAoEMN5F54pK9RCg/teAVzABomW_XpYoLaFFl293qArc\''
})
self.content2 = json.dumps({
'url': 'url',
'kind': 'isolateservice#resourcesItem',
'etag': '\'H_l3X6I4W5tDAoEMN5F54pK9RCg/teAVzABomW_XpYoLaFFl293qArc\''
})
@mock.patch.object(http_client_util, 'SendRequestToServer')
def testDownloadFileFromIsolatedServer(self, mock_request):
isolated_data = {
'digest': 'shard1_isolated',
'namespace': 'default-gzip',
'isolatedserver': 'isolated_server'
}
expected_result = {'items': [{'name': 'task'}]}
content3 = _SimulateContent(expected_result)
mock_request.side_effect = [(self.content1, None), (self.content2, None),
(content3, None)]
result, error = isolate.DownloadFileFromIsolatedServer(
isolated_data, None, 'output.json')
self.assertEqual(expected_result, json.loads(result))
self.assertIsNone(error)
@mock.patch.object(
http_client_util, 'SendRequestToServer', return_value=(None, {
'code': 1
}))
def testDownloadFileFromIsolatedServerFailedToGetMapping(self, _):
isolated_data = {
'digest': 'not found',
'namespace': 'default-gzip',
'isolatedserver': 'isolated_server'
}
result, error = isolate.DownloadFileFromIsolatedServer(
isolated_data, None, None)
self.assertIsNone(result)
self.assertIsNotNone(error)
@mock.patch.object(http_client_util, 'SendRequestToServer')
def testDownloadFileFromIsolatedServerFailedGettingFile(self, mock_request):
isolated_data = {
'digest': 'shard1_isolated',
'namespace': 'default-gzip',
'isolatedserver': 'isolated_server'
}
mock_request.side_effect = [(self.content1, None), (None, {'code': 2000})]
result, error = isolate.DownloadFileFromIsolatedServer(
isolated_data, None, 'output.json')
self.assertIsNone(result)
self.assertEqual({'code': 2000}, error)
@mock.patch.object(
isolate_util,
'FetchFileFromIsolatedServer',
return_value=(json.dumps({
'files': {}
}), None))
def testGetIsolatedOuptputFileToHashMapNoFiles(self, mock_fn):
mapping, error = isolate.GetIsolatedOuptputFileToHashMap(
'digest', 'gzip', 'isolated_server', None)
self.assertIsNone(mapping)
self.assertEqual({
'code': 310,
'message': 'No files in isolated response'
}, error.ToSerializable())
mock_fn.assert_called_once_with('digest', 'gzip', 'isolated_server', None)