Exemple #1
0
    def testUpdate(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()
        sourceMtime = os.stat(self.file1).st_mtime
        # make source file older
        os.utime(self.file1, (sourceMtime - 20000000, sourceMtime - 20000000))
        
        targetPath = os.path.join(self.dir2, "file1")
        file(targetPath, "w")
        
        self.copier.parse_args(["--update-only", self.file1, self.dir2])
        self.copier.do_work()
        
        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent == "source", "Newer target file was overwritten!")
        
        copier = CopyTool()
        copier.parse_args([self.file1, self.dir2])
        copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent != "source", "Newer target file was not overwritten!")
Exemple #2
0
 def testExclude(self):
     self.copier.parse_args(["-x", "dir1", self.dir1, self.dir2])
     self.copier.do_work()
     self.failIf(os.path.exists(os.path.join(self.dir2, "dir1")), "Excluded directory was copied!")
     copier = CopyTool()
     copier.parse_args(["-x", "file1", self.dir1, self.dir2])
     copier.do_work()
     self.failIf(os.path.exists(os.path.join(self.dir2, "file1")), "Excluded file was copied!")
Exemple #3
0
 def setUp(self):
     self.copier = CopyTool()
     self.tempDir = tempfile.mkdtemp()
     self.file1 = os.path.join(self.tempDir, "file1")
     file(self.file1, "w")
     self.file2 = os.path.join(self.tempDir, "file2")
     file(self.file2, "w")
     self.dir1 = os.path.join(self.tempDir, "dir1")
     os.mkdir(self.dir1)
     self.dir2 = os.path.join(self.tempDir, "dir2")
     os.mkdir(self.dir2)
Exemple #4
0
 def setUp(self):
     self.copier = CopyTool()
     self.tempDir = tempfile.mkdtemp()
     self.file1 = os.path.join(self.tempDir, "file1")
     file(self.file1, "w")
     self.file2 = os.path.join(self.tempDir, "file2")
     file(self.file2, "w")
     self.dir1 = os.path.join(self.tempDir, "dir1")
     os.mkdir(self.dir1)
     self.dir2 = os.path.join(self.tempDir, "dir2")
     os.mkdir(self.dir2)
Exemple #5
0
    def testUpdate(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()
        sourceMtime = os.stat(self.file1).st_mtime
        # make source file older
        os.utime(self.file1, (sourceMtime - 20000000, sourceMtime - 20000000))

        targetPath = os.path.join(self.dir2, "file1")
        file(targetPath, "w")

        self.copier.parse_args(["--update-only", self.file1, self.dir2])
        self.copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent == "source",
                    "Newer target file was overwritten!")

        copier = CopyTool()
        copier.parse_args([self.file1, self.dir2])
        copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent != "source",
                    "Newer target file was not overwritten!")
Exemple #6
0
 def testExclude(self):
     self.copier.parse_args(["-x", "dir1", self.dir1, self.dir2])
     self.copier.do_work()
     self.failIf(os.path.exists(os.path.join(self.dir2, "dir1")),
                 "Excluded directory was copied!")
     copier = CopyTool()
     copier.parse_args(["-x", "file1", self.dir1, self.dir2])
     copier.do_work()
     self.failIf(os.path.exists(os.path.join(self.dir2, "file1")),
                 "Excluded file was copied!")
Exemple #7
0
class TestCopyTool(unittest.TestCase):

    def setUp(self):
        self.copier = CopyTool()
        self.tempDir = tempfile.mkdtemp()
        self.file1 = os.path.join(self.tempDir, "file1")
        file(self.file1, "w")
        self.file2 = os.path.join(self.tempDir, "file2")
        file(self.file2, "w")
        self.dir1 = os.path.join(self.tempDir, "dir1")
        os.mkdir(self.dir1)
        self.dir2 = os.path.join(self.tempDir, "dir2")
        os.mkdir(self.dir2)

    def tearDown(self):
        shutil.rmtree(self.tempDir)
    
    def testNoSource(self):
        target = os.getcwd()
        self.copier.parse_args(["nothing.txt", target])
        self.failUnlessRaises(IOError, self.copier.do_work)
    
    def testNoTarget(self):
        self.copier.parse_args(["--no-new-dirs", self.file1, "nothing"])
        self.failUnlessRaises(IOError, self.copier.do_work)
    
    def testInvalidTarget(self):
        self.copier.parse_args([self.file1, self.file2])
        self.failUnlessRaises(Exception, self.copier.do_work)
    
    def testFile(self):
        self.copier.parse_args([self.file1, self.dir1])
        self.copier.do_work()
        self.failUnless(os.path.isfile(os.path.join(self.dir1, self.file1)), "Source file was not copied to target directory!")
    
    def testCreateDir(self):
        self.copier.parse_args([self.file1, "newDir"])
        self.copier.do_work()
        self.failUnless(os.path.isdir("newDir"), "Directory was not created!")
        shutil.rmtree("newDir")
    
    def testOverwriteProtectedFile(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()
        
        targetPath = os.path.join(self.dir2, "file1")
        target = file(targetPath, "w")
        # set target read-only
        os.chmod(targetPath, stat.S_IRUSR)
        
        self.copier.parse_args([self.file1, self.dir2])
        self.copier.do_work()
        
        copied = file(targetPath, "r")
        copiedContent = copied.read()
        shutil.rmtree(targetPath, True)

        self.failUnless(copiedContent == "source", "Failed to overwrite readonly file!")
    
    def testContinueAfterFailedFileCopy(self):
        os.makedirs(os.path.join(self.dir1, "aaa"))
        file(os.path.join(self.dir1, "aaa", "file"), "w")
        os.makedirs(os.path.join(self.dir1, "zzz"))
        file(os.path.join(self.dir1, "zzz", "file"), "w")
        
        os.makedirs(os.path.join(self.dir2, "dir1"))
        os.makedirs(os.path.join(self.dir2, "dir1", "aaa"), 0444)
        os.makedirs(os.path.join(self.dir2, "dir1", "zzz"))
        
        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(os.path.exists(os.path.join(self.dir2, "dir1", "zzz", "file")), "Stopped working after failed copy!")
    
    def testUpdate(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()
        sourceMtime = os.stat(self.file1).st_mtime
        # make source file older
        os.utime(self.file1, (sourceMtime - 20000000, sourceMtime - 20000000))
        
        targetPath = os.path.join(self.dir2, "file1")
        file(targetPath, "w")
        
        self.copier.parse_args(["--update-only", self.file1, self.dir2])
        self.copier.do_work()
        
        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent == "source", "Newer target file was overwritten!")
        
        copier = CopyTool()
        copier.parse_args([self.file1, self.dir2])
        copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent != "source", "Newer target file was not overwritten!")
    
    def testDirectorySimple(self):
        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(os.path.isdir(os.path.join(self.dir2, "dir1")), "Source file was not copied to target!")
    
    def testDirectoryDeep(self):
        file(os.path.join(self.dir1, "file1"), "w")
        file(os.path.join(self.dir1, "file2"), "w")
        os.makedirs(os.path.join(self.dir1, "dir1_1", "dir1_1_1"))
        file(os.path.join(self.dir1, "dir1_1", "file1"), "w")
        file(os.path.join(self.dir1, "dir1_1", "file2"), "w")
        file(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file1"), "w")
        file(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file2"), "w")
        
        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        comp = filecmp.cmp(os.path.join(self.dir1, "file1"), os.path.join(self.dir2, "dir1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "file2"), os.path.join(self.dir2, "dir1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "file1"), os.path.join(self.dir2, "dir1", "dir1_1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "file2"), os.path.join(self.dir2, "dir1", "dir1_1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file1"), os.path.join(self.dir2, "dir1", "dir1_1", "dir1_1_1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file2"), os.path.join(self.dir2, "dir1", "dir1_1", "dir1_1_1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")    
    
    def testDirectoryUpdate(self):
        sourceDir = os.path.join(self.dir1, "dir1_1")
        os.mkdir(sourceDir)
        sourceOlderPath = os.path.join(sourceDir, "file1")
        sourceOlder = file(sourceOlderPath, "w")
        sourceOlder.write("sourceOlder")
        sourceOlder.close()
        sourceMtime = os.stat(sourceOlderPath).st_mtime
        #make source file older
        os.utime(sourceOlderPath, (sourceMtime - 20000000, sourceMtime - 20000000))
        sourceNewer = file(os.path.join(sourceDir, "file2"), "w")
        sourceNewer.write("sourceNewer")
        sourceNewer.close()
        
        targetDir = os.path.join(self.dir2, "dir1", "dir1_1")
        os.makedirs(targetDir)
        targetNewerPath = os.path.join(targetDir, "file1")
        targetNewer = file(targetNewerPath, "w")
        targetNewer.write("targetNewer")
        targetNewer.close()
        targetOlderPath = os.path.join(targetDir, "file2")
        targetOlder = file(targetOlderPath, "w")
        targetOlder.write("targetOlder")
        targetOlder.close()
        targetMtime = os.stat(targetOlderPath).st_mtime
        #make source file older
        os.utime(targetOlderPath, (sourceMtime - 20000000, sourceMtime - 20000000))
        
        self.copier.parse_args(["--update-only", self.dir1, self.dir2])
        self.copier.do_work()
        targetOlder = file(targetOlderPath, "r")
        targetOlderContent = targetOlder.read()
        self.failIf(targetOlderContent == "targetOlder", "Older target file was not updated!")
        
        targetNewer = file(targetNewerPath, "r")
        targetNewerContent = targetNewer.read()
        self.failIf(targetNewerContent == "sourceOlder", "Newer target file was overwritten!")
    
    def testExclude(self):
        self.copier.parse_args(["-x", "dir1", self.dir1, self.dir2])
        self.copier.do_work()
        self.failIf(os.path.exists(os.path.join(self.dir2, "dir1")), "Excluded directory was copied!")
        copier = CopyTool()
        copier.parse_args(["-x", "file1", self.dir1, self.dir2])
        copier.do_work()
        self.failIf(os.path.exists(os.path.join(self.dir2, "file1")), "Excluded file was copied!")
        
    def testSynchronizeDirectories(self):
        syncSourcePath = os.path.join(self.dir1, "sourceFile")
        syncSource = file(syncSourcePath, "w")
        syncTargetPath = os.path.join(self.dir2, "sourceFile")
        
        self.copier.parse_args(["--synchronize", self.dir1, self.dir2])
        self.copier.do_work()
        self.failIf(os.path.isdir(os.path.join(self.dir2, "dir1")), "Directory was copied but should have been synchronized!")
        self.failUnless(os.path.isfile(syncTargetPath), "Directory contents not synchronized!")
        
    def testSynchronizeDirectoriesCreate(self):
        syncSourceDir = os.path.join(self.dir1, "subDir")
        os.makedirs(syncSourceDir)
        syncSourcePath = os.path.join(syncSourceDir, "sourceFile")
        syncSource = file(syncSourcePath, "w")
        
        syncTargetPath = os.path.join(self.dir2, "subDir", "sourceFile")
        
        self.copier.parse_args(["--synchronize", self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(os.path.isfile(syncTargetPath), "Directory contents not synchronized!")
Exemple #8
0
class TestCopyTool(unittest.TestCase):
    def setUp(self):
        self.copier = CopyTool()
        self.tempDir = tempfile.mkdtemp()
        self.file1 = os.path.join(self.tempDir, "file1")
        file(self.file1, "w")
        self.file2 = os.path.join(self.tempDir, "file2")
        file(self.file2, "w")
        self.dir1 = os.path.join(self.tempDir, "dir1")
        os.mkdir(self.dir1)
        self.dir2 = os.path.join(self.tempDir, "dir2")
        os.mkdir(self.dir2)

    def tearDown(self):
        shutil.rmtree(self.tempDir)

    def testNoSource(self):
        target = os.getcwd()
        self.copier.parse_args(["nothing.txt", target])
        self.failUnlessRaises(IOError, self.copier.do_work)

    def testNoTarget(self):
        self.copier.parse_args(["--no-new-dirs", self.file1, "nothing"])
        self.failUnlessRaises(IOError, self.copier.do_work)

    def testInvalidTarget(self):
        self.copier.parse_args([self.file1, self.file2])
        self.failUnlessRaises(Exception, self.copier.do_work)

    def testFile(self):
        self.copier.parse_args([self.file1, self.dir1])
        self.copier.do_work()
        self.failUnless(os.path.isfile(os.path.join(self.dir1, self.file1)),
                        "Source file was not copied to target directory!")

    def testCreateDir(self):
        self.copier.parse_args([self.file1, "newDir"])
        self.copier.do_work()
        self.failUnless(os.path.isdir("newDir"), "Directory was not created!")
        shutil.rmtree("newDir")

    def testOverwriteProtectedFile(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()

        targetPath = os.path.join(self.dir2, "file1")
        target = file(targetPath, "w")
        # set target read-only
        os.chmod(targetPath, stat.S_IRUSR)

        self.copier.parse_args([self.file1, self.dir2])
        self.copier.do_work()

        copied = file(targetPath, "r")
        copiedContent = copied.read()
        shutil.rmtree(targetPath, True)

        self.failUnless(copiedContent == "source",
                        "Failed to overwrite readonly file!")

    def testContinueAfterFailedFileCopy(self):
        os.makedirs(os.path.join(self.dir1, "aaa"))
        file(os.path.join(self.dir1, "aaa", "file"), "w")
        os.makedirs(os.path.join(self.dir1, "zzz"))
        file(os.path.join(self.dir1, "zzz", "file"), "w")

        os.makedirs(os.path.join(self.dir2, "dir1"))
        os.makedirs(os.path.join(self.dir2, "dir1", "aaa"), 0444)
        os.makedirs(os.path.join(self.dir2, "dir1", "zzz"))

        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(
            os.path.exists(os.path.join(self.dir2, "dir1", "zzz", "file")),
            "Stopped working after failed copy!")

    def testUpdate(self):
        source = file(self.file1, "w")
        source.write("source")
        source.close()
        sourceMtime = os.stat(self.file1).st_mtime
        # make source file older
        os.utime(self.file1, (sourceMtime - 20000000, sourceMtime - 20000000))

        targetPath = os.path.join(self.dir2, "file1")
        file(targetPath, "w")

        self.copier.parse_args(["--update-only", self.file1, self.dir2])
        self.copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent == "source",
                    "Newer target file was overwritten!")

        copier = CopyTool()
        copier.parse_args([self.file1, self.dir2])
        copier.do_work()

        target = file(targetPath, "r")
        targetContent = target.read()
        shutil.rmtree(targetPath, True)

        self.failIf(targetContent != "source",
                    "Newer target file was not overwritten!")

    def testDirectorySimple(self):
        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(os.path.isdir(os.path.join(self.dir2, "dir1")),
                        "Source file was not copied to target!")

    def testDirectoryDeep(self):
        file(os.path.join(self.dir1, "file1"), "w")
        file(os.path.join(self.dir1, "file2"), "w")
        os.makedirs(os.path.join(self.dir1, "dir1_1", "dir1_1_1"))
        file(os.path.join(self.dir1, "dir1_1", "file1"), "w")
        file(os.path.join(self.dir1, "dir1_1", "file2"), "w")
        file(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file1"), "w")
        file(os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file2"), "w")

        self.copier.parse_args([self.dir1, self.dir2])
        self.copier.do_work()
        comp = filecmp.cmp(os.path.join(self.dir1, "file1"),
                           os.path.join(self.dir2, "dir1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "file2"),
                           os.path.join(self.dir2, "dir1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "file1"),
                           os.path.join(self.dir2, "dir1", "dir1_1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(os.path.join(self.dir1, "dir1_1", "file2"),
                           os.path.join(self.dir2, "dir1", "dir1_1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(
            os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file1"),
            os.path.join(self.dir2, "dir1", "dir1_1", "dir1_1_1", "file1"))
        self.failUnless(comp, "Source file was not copied to target!")
        comp = filecmp.cmp(
            os.path.join(self.dir1, "dir1_1", "dir1_1_1", "file2"),
            os.path.join(self.dir2, "dir1", "dir1_1", "dir1_1_1", "file2"))
        self.failUnless(comp, "Source file was not copied to target!")

    def testDirectoryUpdate(self):
        sourceDir = os.path.join(self.dir1, "dir1_1")
        os.mkdir(sourceDir)
        sourceOlderPath = os.path.join(sourceDir, "file1")
        sourceOlder = file(sourceOlderPath, "w")
        sourceOlder.write("sourceOlder")
        sourceOlder.close()
        sourceMtime = os.stat(sourceOlderPath).st_mtime
        #make source file older
        os.utime(sourceOlderPath,
                 (sourceMtime - 20000000, sourceMtime - 20000000))
        sourceNewer = file(os.path.join(sourceDir, "file2"), "w")
        sourceNewer.write("sourceNewer")
        sourceNewer.close()

        targetDir = os.path.join(self.dir2, "dir1", "dir1_1")
        os.makedirs(targetDir)
        targetNewerPath = os.path.join(targetDir, "file1")
        targetNewer = file(targetNewerPath, "w")
        targetNewer.write("targetNewer")
        targetNewer.close()
        targetOlderPath = os.path.join(targetDir, "file2")
        targetOlder = file(targetOlderPath, "w")
        targetOlder.write("targetOlder")
        targetOlder.close()
        targetMtime = os.stat(targetOlderPath).st_mtime
        #make source file older
        os.utime(targetOlderPath,
                 (sourceMtime - 20000000, sourceMtime - 20000000))

        self.copier.parse_args(["--update-only", self.dir1, self.dir2])
        self.copier.do_work()
        targetOlder = file(targetOlderPath, "r")
        targetOlderContent = targetOlder.read()
        self.failIf(targetOlderContent == "targetOlder",
                    "Older target file was not updated!")

        targetNewer = file(targetNewerPath, "r")
        targetNewerContent = targetNewer.read()
        self.failIf(targetNewerContent == "sourceOlder",
                    "Newer target file was overwritten!")

    def testExclude(self):
        self.copier.parse_args(["-x", "dir1", self.dir1, self.dir2])
        self.copier.do_work()
        self.failIf(os.path.exists(os.path.join(self.dir2, "dir1")),
                    "Excluded directory was copied!")
        copier = CopyTool()
        copier.parse_args(["-x", "file1", self.dir1, self.dir2])
        copier.do_work()
        self.failIf(os.path.exists(os.path.join(self.dir2, "file1")),
                    "Excluded file was copied!")

    def testSynchronizeDirectories(self):
        syncSourcePath = os.path.join(self.dir1, "sourceFile")
        syncSource = file(syncSourcePath, "w")
        syncTargetPath = os.path.join(self.dir2, "sourceFile")

        self.copier.parse_args(["--synchronize", self.dir1, self.dir2])
        self.copier.do_work()
        self.failIf(os.path.isdir(os.path.join(self.dir2, "dir1")),
                    "Directory was copied but should have been synchronized!")
        self.failUnless(os.path.isfile(syncTargetPath),
                        "Directory contents not synchronized!")

    def testSynchronizeDirectoriesCreate(self):
        syncSourceDir = os.path.join(self.dir1, "subDir")
        os.makedirs(syncSourceDir)
        syncSourcePath = os.path.join(syncSourceDir, "sourceFile")
        syncSource = file(syncSourcePath, "w")

        syncTargetPath = os.path.join(self.dir2, "subDir", "sourceFile")

        self.copier.parse_args(["--synchronize", self.dir1, self.dir2])
        self.copier.do_work()
        self.failUnless(os.path.isfile(syncTargetPath),
                        "Directory contents not synchronized!")