def testAddingDirectoriesForFileManually(self): with tar_writer.TarFileWriter(self.tempfile) as f: f.add_file("d", tarfile.DIRTYPE) f.add_file("d/f") f.add_file("a", tarfile.DIRTYPE) f.add_file("a/b", tarfile.DIRTYPE) f.add_file("a/b", tarfile.DIRTYPE) f.add_file("a/b/", tarfile.DIRTYPE) f.add_file("a/b/c/f") f.add_file("x/y/f") f.add_file("x", tarfile.DIRTYPE) content = [ {"name": "d", "mode": 0o755}, {"name": "d/f"}, {"name": "a", "mode": 0o755}, {"name": "a/b", "mode": 0o755}, {"name": "a/b/c", "mode": 0o755}, {"name": "a/b/c/f"}, {"name": "x", "mode": 0o755}, {"name": "x/y", "mode": 0o755}, {"name": "x/y/f"}, ] self.assertTarFileContent(self.tempfile, content)
def __enter__(self): self.tarfile = tar_writer.TarFileWriter( self.output, self.compression, self.compressor, default_mtime=self.default_mtime) return self
def testPreserveTarMtimesFalse(self): with tar_writer.TarFileWriter(self.tempfile, preserve_tar_mtimes=False) as f: input_tar_path = self.data_files.Rlocation( "rules_pkg/tests/testdata/tar_test.tar") f.add_tar(input_tar_path) for output_file in f.tar: self.assertEqual(output_file.mtime, 0)
def testAddingDirectoriesForFile(self): with tar_writer.TarFileWriter(self.tempfile) as f: f.add_file("d/f") content = [ {"name": "d", "mode": 0o755}, {"name": "d/f"}, ] self.assertTarFileContent(self.tempfile, content)
def assertSimpleFileContent(self, names): with tar_writer.TarFileWriter(self.tempfile) as f: for n in names: f.add_file(n, content=n) # pylint: disable=g-complex-comprehension content = ([{"name": n, "size": len(n.encode("utf-8")), "data": n.encode("utf-8")} for n in names]) self.assertTarFileContent(self.tempfile, content)
def testPreserveTarMtimesTrueByDefault(self): with tar_writer.TarFileWriter(self.tempfile) as f: input_tar_path = self.data_files.Rlocation( "rules_pkg/tests/testdata/tar_test.tar") f.add_tar(input_tar_path) input_tar = tarfile.open(input_tar_path, "r") for file_name in f.members: input_file = input_tar.getmember(file_name) output_file = f.tar.getmember(file_name) self.assertEqual(input_file.mtime, output_file.mtime)
def testMergeTarRelocated(self): content = [ {"name": "foo", "mode": 0o755}, {"name": "foo/a", "data": b"a"}, {"name": "foo/ab", "data": b"ab"}, ] with tar_writer.TarFileWriter(self.tempfile) as f: datafile = self.data_files.Rlocation( "rules_pkg/tests/testdata/tar_test.tar") f.add_tar(datafile, name_filter=lambda n: n != "./b", prefix="foo") self.assertTarFileContent(self.tempfile, content)
def testMergeTar(self): content = [ {"name": "./a", "data": b"a"}, {"name": "./ab", "data": b"ab"}, ] for ext in [("." + comp if comp else "") for comp in tar_writer.COMPRESSIONS]: with tar_writer.TarFileWriter(self.tempfile) as f: datafile = self.data_files.Rlocation( "rules_pkg/tests/testdata/tar_test.tar" + ext) f.add_tar(datafile, name_filter=lambda n: n != "./b") self.assertTarFileContent(self.tempfile, content)
def testDottedFiles(self): with tar_writer.TarFileWriter(self.tempfile) as f: f.add_file("a") f.add_file("/b") f.add_file("./c") f.add_file("./.d") f.add_file("..e") f.add_file(".f") content = [ {"name": "a"}, {"name": "/b"}, {"name": "./c"}, {"name": "./.d"}, {"name": "..e"}, {"name": ".f"} ] self.assertTarFileContent(self.tempfile, content)
def testEmptyTarFile(self): with tar_writer.TarFileWriter(self.tempfile): pass self.assertTarFileContent(self.tempfile, [])
def testPortableMtime(self): with tar_writer.TarFileWriter(self.tempfile, default_mtime="portable") as f: self.assertEqual(f.default_mtime, 946684800)
def testDefaultMtimeProvided(self): with tar_writer.TarFileWriter(self.tempfile, default_mtime=1234) as f: self.assertEqual(f.default_mtime, 1234)
def testDefaultMtimeNotProvided(self): with tar_writer.TarFileWriter(self.tempfile) as f: self.assertEqual(f.default_mtime, 0)