blob: 05f2b05c6903e12ccf8b16fc5d3fe91fdb0b3676 [file] [log] [blame]
# Copyright 2012 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Test the urilib module."""
import os
from chromite.lib import cros_test_lib
from chromite.lib import gs
from chromite.lib import osutils
from chromite.lib.paygen import filelib
from chromite.lib.paygen import urilib
# We access private members to test them.
# pylint: disable=protected-access
class TestUrilib(cros_test_lib.MockTempDirTestCase):
"""Test urilib module."""
def testExtractProtocol(self) -> None:
tests = {
"gs": ["gs://", "gs://foo", "gs://foo/bar"],
"abc": ["abc://", "abc://foo", "abc://foo/bar"],
None: ["foo/bar", "/foo/bar", "://garbage/path"],
}
# TODO(b/236161656): Fix.
# pylint: disable-next=consider-using-dict-items
for protocol in tests:
for uri in tests[protocol]:
self.assertEqual(protocol, urilib.ExtractProtocol(uri))
def testGetUriType(self) -> None:
tests = {
"gs": ["gs://", "gs://foo", "gs://foo/bar"],
"abc": ["abc://", "abc://foo", "abc://foo/bar"],
"file": ["foo/bar", "/foo/bar", "://garbage/path", "/cnsfoo/bar"],
}
# TODO(b/236161656): Fix.
# pylint: disable-next=consider-using-dict-items
for uri_type in tests:
for uri in tests[uri_type]:
self.assertEqual(uri_type, urilib.GetUriType(uri))
@cros_test_lib.pytestmark_network_test
def testURLRetrieve(self) -> None:
good_url = (
"https://codereview.chromium.org/download/issue11731004_1_2.diff"
)
bad_domain_url = "http://notarealdomainireallyhope.com/some/path"
bad_path_url = "https://dl.google.com/dl/edgedl/x/y/z/a/b/c/foobar"
local_path = os.path.join(self.tempdir, "downloaded_file")
bad_local_path = "/tmp/a/b/c/d/x/y/z/foobar"
git_index1 = "e6c0d72a5122171deb4c458991d1c7547f31a2f0"
git_index2 = "3d0f7d3edfd8146031e66dc3f45926920d3ded78"
expected_contents = """Index: LICENSE
diff --git a/LICENSE b/LICENSE
index %s..%s 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-// Copyright 2012 The Chromium Authors
+// Copyright 2013 The Chromium Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
""" % (
git_index1,
git_index2,
)
self.assertRaises(
urilib.MissingURLError, urilib.URLRetrieve, bad_path_url, local_path
)
self.assertRaises(
urilib.MissingURLError,
urilib.URLRetrieve,
bad_domain_url,
local_path,
)
urilib.URLRetrieve(good_url, local_path)
actual_contents = osutils.ReadFile(local_path)
self.assertEqual(expected_contents, actual_contents)
self.assertRaises(IOError, urilib.URLRetrieve, good_url, bad_local_path)
def testCopy(self) -> None:
gs_path = "gs://bucket/some/path"
local_path = "/some/local/path"
http_path = "http://host.domain/some/path"
gs_mock = self.PatchObject(gs.GSContext, "Copy")
file_mock = self.PatchObject(filelib, "Copy")
urlretrieve_mock = self.PatchObject(urilib, "URLRetrieve")
# Set up the test replay script.
# Run 1, two local files.
urilib.Copy(local_path, local_path + ".1")
file_mock.assert_called_once_with(local_path, local_path + ".1")
file_mock.reset_mock()
# Run 2, local and GS.
urilib.Copy(local_path, gs_path)
gs_mock.assert_called_once_with(local_path, gs_path)
gs_mock.reset_mock()
# Run 4, GS and GS
urilib.Copy(gs_path, gs_path + ".1")
gs_mock.assert_called_once_with(gs_path, gs_path + ".1")
gs_mock.reset_mock()
# Run 7, HTTP and local
urilib.Copy(http_path, local_path)
urlretrieve_mock.assert_called_once_with(http_path, local_path)
urlretrieve_mock.reset_mock()
# Run 8, local and HTTP
self.assertRaises(
urilib.NotSupportedBetweenTypes, urilib.Copy, local_path, http_path
)
def testGetPathExcludingProtocol(self) -> None:
"""Tests GetPathExcludingProtocol."""
self.assertEqual(
urilib.GetPathExcludingProtocol("foo-file"), "foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("foo/directory/foo-file"),
"foo/directory/foo-file",
)
self.assertEqual(
urilib.GetPathExcludingProtocol("/foo-file"), "/foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("/foo/directory/foo-file"),
"/foo/directory/foo-file",
)
self.assertEqual(
urilib.GetPathExcludingProtocol("file:///foo-file"), "/foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("gs://foo-file"), "foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("http://foo-file"), "foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("https://foo-file"), "foo-file"
)
self.assertEqual(
urilib.GetPathExcludingProtocol("https://foo-directory/foo-file"),
"foo-directory/foo-file",
)