| # 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", |
| ) |