1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mozbase/manifestdestiny/tests/test_convert_symlinks.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,115 @@ 1.4 +#!/usr/bin/env python 1.5 + 1.6 +# This Source Code Form is subject to the terms of the Mozilla Public 1.7 +# License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.8 +# You can obtain one at http://mozilla.org/MPL/2.0/. 1.9 + 1.10 +import os 1.11 +import shutil 1.12 +import tempfile 1.13 +import unittest 1.14 + 1.15 +from manifestparser import convert 1.16 + 1.17 +class TestSymlinkConversion(unittest.TestCase): 1.18 + """ 1.19 + test conversion of a directory tree with symlinks to a manifest structure 1.20 + """ 1.21 + 1.22 + # Currently broken: see 1.23 + # https://bugzilla.mozilla.org/show_bug.cgi?id=902610 1.24 + # https://bugzilla.mozilla.org/show_bug.cgi?id=920938 1.25 + 1.26 + def create_stub(self, directory=None): 1.27 + """stub out a directory with files in it""" 1.28 + 1.29 + files = ('foo', 'bar', 'fleem') 1.30 + if directory is None: 1.31 + directory = tempfile.mkdtemp() 1.32 + for i in files: 1.33 + file(os.path.join(directory, i), 'w').write(i) 1.34 + subdir = os.path.join(directory, 'subdir') 1.35 + os.mkdir(subdir) 1.36 + file(os.path.join(subdir, 'subfile'), 'w').write('baz') 1.37 + return directory 1.38 + 1.39 + def test_relpath(self): 1.40 + """test convert `relative_to` functionality""" 1.41 + 1.42 + oldcwd = os.getcwd() 1.43 + stub = self.create_stub() 1.44 + try: 1.45 + # subdir with in-memory manifest 1.46 + files = ['../bar', '../fleem', '../foo', 'subfile'] 1.47 + subdir = os.path.join(stub, 'subdir') 1.48 + os.chdir(subdir) 1.49 + parser = convert([stub], relative_to='.') 1.50 + self.assertEqual([i['name'] for i in parser.tests], 1.51 + files) 1.52 + except: 1.53 + raise 1.54 + finally: 1.55 + shutil.rmtree(stub) 1.56 + os.chdir(oldcwd) 1.57 + 1.58 + def test_relpath_symlink(self): 1.59 + """ 1.60 + Ensure `relative_to` works in a symlink. 1.61 + Not available on windows. 1.62 + """ 1.63 + 1.64 + symlink = getattr(os, 'symlink', None) 1.65 + if symlink is None: 1.66 + return # symlinks unavailable on this platform 1.67 + 1.68 + oldcwd = os.getcwd() 1.69 + workspace = tempfile.mkdtemp() 1.70 + try: 1.71 + tmpdir = os.path.join(workspace, 'directory') 1.72 + os.makedirs(tmpdir) 1.73 + linkdir = os.path.join(workspace, 'link') 1.74 + symlink(tmpdir, linkdir) 1.75 + self.create_stub(tmpdir) 1.76 + 1.77 + # subdir with in-memory manifest 1.78 + files = ['../bar', '../fleem', '../foo', 'subfile'] 1.79 + subdir = os.path.join(linkdir, 'subdir') 1.80 + os.chdir(os.path.realpath(subdir)) 1.81 + for directory in (tmpdir, linkdir): 1.82 + parser = convert([directory], relative_to='.') 1.83 + self.assertEqual([i['name'] for i in parser.tests], 1.84 + files) 1.85 + finally: 1.86 + shutil.rmtree(workspace) 1.87 + os.chdir(oldcwd) 1.88 + 1.89 + # a more complicated example 1.90 + oldcwd = os.getcwd() 1.91 + workspace = tempfile.mkdtemp() 1.92 + try: 1.93 + tmpdir = os.path.join(workspace, 'directory') 1.94 + os.makedirs(tmpdir) 1.95 + linkdir = os.path.join(workspace, 'link') 1.96 + symlink(tmpdir, linkdir) 1.97 + self.create_stub(tmpdir) 1.98 + files = ['../bar', '../fleem', '../foo', 'subfile'] 1.99 + subdir = os.path.join(linkdir, 'subdir') 1.100 + subsubdir = os.path.join(subdir, 'sub') 1.101 + os.makedirs(subsubdir) 1.102 + linksubdir = os.path.join(linkdir, 'linky') 1.103 + linksubsubdir = os.path.join(subsubdir, 'linky') 1.104 + symlink(subdir, linksubdir) 1.105 + symlink(subdir, linksubsubdir) 1.106 + for dest in (subdir,): 1.107 + os.chdir(dest) 1.108 + for directory in (tmpdir, linkdir): 1.109 + parser = convert([directory], relative_to='.') 1.110 + self.assertEqual([i['name'] for i in parser.tests], 1.111 + files) 1.112 + finally: 1.113 + shutil.rmtree(workspace) 1.114 + os.chdir(oldcwd) 1.115 + 1.116 + 1.117 +if __name__ == '__main__': 1.118 + unittest.main()