| # Copyright 2014 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 os |
| import shutil |
| import socket |
| import tempfile |
| import unittest |
| |
| from profile_creators import profile_generator |
| |
| |
| class ProfileGeneratorUnitTest(unittest.TestCase): |
| |
| def setUp(self): |
| self.test_directory = tempfile.mkdtemp() |
| super(ProfileGeneratorUnitTest, self).setUp() |
| |
| def _CreateFunkyFilesAndOnePlainFile(self, sandbox_directory): |
| """Create several special files and one plain file in |sandbox_directory|. |
| """ |
| if os.path.exists(sandbox_directory): |
| shutil.rmtree(sandbox_directory) |
| |
| os.mkdir(sandbox_directory) |
| |
| # Make a plain file. |
| plain_filename = os.path.join(sandbox_directory, 'plain_file') |
| open(plain_filename, 'a').close() |
| |
| # Make a directory. |
| directory_filename = os.path.join(sandbox_directory, 'directory') |
| os.mkdir(directory_filename) |
| |
| if getattr(os, 'symlink', None): # Symlinks not supported on Windows. |
| # Make a symlink. |
| symlink_filename = os.path.join(sandbox_directory, 'symlink') |
| os.symlink(plain_filename, symlink_filename) |
| |
| # Make a broken symlink. |
| nonexistant_filename = os.path.join(sandbox_directory, 'i_dont_exist') |
| broken_symlink_filename = os.path.join(sandbox_directory, |
| 'broken_symlink') |
| os.symlink(nonexistant_filename, broken_symlink_filename) |
| |
| # Make a named socket. |
| if getattr(socket, 'AF_UNIX', None): # Windows doesn't support these. |
| socket_filename = os.path.join(sandbox_directory, 'named_socket') |
| the_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) |
| the_socket.bind(socket_filename) |
| |
| def testIsPseudoFile(self): |
| sandbox_dir = os.path.join(self.test_directory, 'sandbox') |
| self._CreateFunkyFilesAndOnePlainFile(sandbox_dir) |
| |
| # If we can copy the directory, we're golden! |
| sandbox_dir_copy = os.path.join(self.test_directory, 'sandbox_copy') |
| # pylint: disable=protected-access |
| shutil.copytree(sandbox_dir, sandbox_dir_copy, |
| ignore=profile_generator._IsPseudoFile) |
| |
| # Check that only the directory and plain file got copied. |
| dir_contents = os.listdir(sandbox_dir_copy) |
| dir_contents.sort() |
| self.assertEqual(['directory', 'plain_file'], dir_contents) |
| |
| def tearDown(self): |
| shutil.rmtree(self.test_directory) |