Alon Bar-Lev has uploaded a new change for review. Change subject: utils: tar: split tar unit test from VdsInstallerSSH tests. ......................................................................
utils: tar: split tar unit test from VdsInstallerSSH tests. VdsInstallerSSH.java is about to retire. Improve some. Change-Id: I0482fb6a7dbb93f6a7f85773aa8a4d813eb7af87 Signed-off-by: Alon Bar-Lev <alo...@redhat.com> --- A backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/archivers/tar/TarTest.java 1 file changed, 140 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/9292/1 diff --git a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/archivers/tar/TarTest.java b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/archivers/tar/TarTest.java new file mode 100644 index 0000000..f965204 --- /dev/null +++ b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/archivers/tar/TarTest.java @@ -0,0 +1,140 @@ +package org.ovirt.engine.core.utils.archivers.tar; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.util.Arrays; + +import org.junit.Test; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TarTest { + + private void _writeFile(File file, String content, boolean executable) throws IOException { + OutputStream os = null; + try { + file.getParentFile().mkdirs(); + os = new FileOutputStream(file); + os.write(content.getBytes("UTF-8")); + file.setExecutable(executable); + } + finally { + if (os != null) { + try { + os.close(); + } + catch (IOException e) { + // ignore + } + } + } + } + + private void digestDirectory(MessageDigest md, File base, File file) throws Exception { + File fullFile = new File(base, file.getPath()); + md.update(file.getPath().getBytes("UTF-8")); + if (fullFile.isDirectory()) { + String files[] = fullFile.list(); + Arrays.sort(files); + for (String f : files) { + digestDirectory(md, base, new File(file, f)); + } + } + else { + MessageDigest fmd = MessageDigest.getInstance(md.getAlgorithm()); + InputStream fis = null; + try { + fis = new FileInputStream(fullFile); + InputStream is = new DigestInputStream(fis, fmd); + StringBuffer content = new StringBuffer(1024); + byte buf[] = new byte[1024]; + int n; + while ((n = is.read(buf)) != -1); + md.update(fmd.digest()); + } + finally { + if (fis != null) { + try { + fis.close(); + } + catch (IOException e) { + // ignore + } + } + } + } + } + + @Test + public void testSimple() throws Exception { + + File tmpTar = null; + File tmpDir1 = null; + File tmpDir2 = null; + + try { + tmpTar = File.createTempFile("test1", "tar"); + tmpDir1 = File.createTempFile("test1", "tmp"); + tmpDir1.delete(); + tmpDir1.mkdir(); + tmpDir2 = File.createTempFile("test1", "tmp"); + tmpDir2.delete(); + tmpDir2.mkdir(); + + _writeFile(new File(tmpDir1, "script1"), "script1", true); + _writeFile(new File(tmpDir1, "script2"), "script2", true); + _writeFile(new File(tmpDir1, "file1"), "file1", false); + _writeFile(new File(tmpDir1, "file2"), "file2", false); + _writeFile(new File(tmpDir1, "dir1/file3"), "file2", false); + _writeFile(new File(tmpDir1, "dir1/dir2/file4"), "file4", false); + + OutputStream os = null; + try { + os = new FileOutputStream(tmpTar); + Tar.doTar(os, tmpDir1); + } + finally { + if (os != null) { + try { + os.close(); + } + catch(IOException e) { + // ignore + } + } + } + + new ProcessBuilder("tar", "-C", tmpDir2.getPath(), "-xf", tmpTar.getPath()).start().waitFor(); + + MessageDigest md1 = MessageDigest.getInstance("SHA"); + MessageDigest md2 = MessageDigest.getInstance("SHA"); + digestDirectory(md1, tmpDir1, new File(".")); + digestDirectory(md2, tmpDir2, new File(".")); + + assertArrayEquals(md1.digest(), md2.digest()); + assertTrue(new File(tmpDir2, "script1").canExecute()); + assertFalse(new File(tmpDir2, "file1").canExecute()); + } + finally { + for (File file : new File[] {tmpDir1, tmpDir2, tmpTar}) { + if (file != null) { + file.delete(); + } + } + } + } + + @Test(expected=FileNotFoundException.class) + public void testNoBase() throws IOException { + Tar.doTar(new ByteArrayOutputStream(), new File("/asdasdsadasdasdsa")); + } +} -- To view, visit http://gerrit.ovirt.org/9292 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0482fb6a7dbb93f6a7f85773aa8a4d813eb7af87 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches