blob: f3cd630259f857888132545761a1299bcf0d197b [file] [log] [blame]
# 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)