blob: 1b6163a1534055f194f1cb5f1094aeabbb601f7c [file] [log] [blame]
# Copyright 2015 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for cipd."""
import hashlib
import json
from unittest import mock
from chromite.third_party import httplib2
from chromite.lib import cipd
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.lib import path_util
class CIPDTest(cros_test_lib.MockTestCase):
"""Tests for chromite.lib.cipd"""
def testDownloadCIPD(self):
MockHttp = self.PatchObject(httplib2, "Http")
first_body = b")]}'\n" + json.dumps(
{
"clientBinary": {
"signedUrl": "http://example.com",
},
"clientRefAliases": [
{
"hashAlgo": "SKIP",
"hexDigest": "aaaa",
},
{
"hashAlgo": "SHA256",
"hexDigest": "bogus-sha256",
},
],
}
).encode("utf-8")
response = mock.Mock()
response.status = 200
MockHttp.return_value.request.side_effect = [
(response, first_body),
(response, b"bogus binary file"),
]
sha1 = self.PatchObject(hashlib, "sha256")
sha1.return_value.hexdigest.return_value = "bogus-sha256"
# pylint: disable=protected-access
self.assertEqual(
b"bogus binary file", cipd._DownloadCIPD("bogus-instance-sha256")
)
class CipdCacheTest(cros_test_lib.MockTempDirTestCase):
"""Tests for CipdCache helper."""
def setUp(self):
self.download_mock = self.PatchObject(
cipd, "_DownloadCIPD", return_value=b"data"
)
def testFetch(self):
"""Check CipdCache._Fetch behavior."""
cache = cipd.CipdCache(self.tempdir)
ref = cache.Lookup(("1234",))
ref.SetDefault("cipd://1234")
self.assertEqual("data", osutils.ReadFile(ref.path))
def testGetCIPDFromCache(self):
"""Check GetCIPDFromCache behavior."""
self.PatchObject(path_util, "GetCacheDir", return_value=self.tempdir)
path = cipd.GetCIPDFromCache()
# This is more about making sure the func doesn't crash than inspecting
# the internal caching logic (which is handled by lib.cache_unittest
# already).
self.assertTrue(path.startswith(str(self.tempdir)))