Package org.jboss.forge.addon.shell.command

Source Code of org.jboss.forge.addon.shell.command.CopyCommandTest

/**
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.shell.command;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.shell.test.ShellTest;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.forge.furnace.util.OperatingSystemUtils;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
*
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
*/
@RunWith(Arquillian.class)
public class CopyCommandTest
{
   @Deployment
   @Dependencies({
            @AddonDependency(name = "org.jboss.forge.addon:ui"),
            @AddonDependency(name = "org.jboss.forge.addon:shell-test-harness"),
            @AddonDependency(name = "org.jboss.forge.addon:resources"),
            @AddonDependency(name = "org.jboss.forge.furnace.container:cdi")
   })
   public static ForgeArchive getDeployment()
   {
      ForgeArchive archive = ShrinkWrap
               .create(ForgeArchive.class)
               .addBeansXML()
               .addAsAddonDependencies(
                        AddonDependencyEntry.create("org.jboss.forge.addon:ui"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:shell-test-harness"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:resources"),
                        AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi")
               );

      return archive;
   }

   @Inject
   ShellTest shell;

   @Test
   public void testCopyFileToFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      String testFolder = "testFolder";
      String file = "copyFile";
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("touch " + file, 5, TimeUnit.SECONDS);

      File testFolderFile = new File(tmpDir, testFolder);
      File fileSource = new File(tmpDir, file);
      File fileTarget = new File(testFolderFile, file);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());
      shell.execute("cp " + file + " " + testFolder, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(fileSource.exists());
   }

   @Test
   public void testCopyFileToNewFile() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();

      String file = "copyFile";
      String nonExisting = "newNoneExisting";

      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);
      shell.execute("touch " + file, 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, file);
      File fileTarget = new File(tmpDir, nonExisting);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());

      shell.execute("cp " + file + " " + nonExisting, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
   }

   @Test
   public void testCopyFileWithRelativePathToNewFile() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String file = "copyFile";
      String nonExisting = "newNoneExisting";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      String relativePath = testFolder + File.separator + file;
      shell.execute("touch " + relativePath, 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, relativePath);
      File fileTarget = new File(tmpDir, nonExisting);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());
      shell.execute("cp " + relativePath + " " + nonExisting, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
   }

   @Test
   public void testCopyFileWithRelativePathToExistingFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String targetFolder = "targetFolder";
      String file = "copyFile";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + targetFolder, 5, TimeUnit.SECONDS);
      String relativePath = testFolder.concat(File.separator).concat(file);
      shell.execute("touch " + relativePath, 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, relativePath);
      File fileTarget = new File(new File(tmpDir, targetFolder), file);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());
      shell.execute("cp " + relativePath + " " + targetFolder, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
   }

   @Test
   public void testCopyFileWithRewrite() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String file = "copyFile";

      shell.execute("touch " + file, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("cd " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("touch " + file, 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, file);
      Files.write(fileSource.toPath(), "TEST".getBytes());
      File fileTarget = new File(new File(tmpDir, testFolder), file);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      shell.execute("cp " + file + " " + testFolder, 5, TimeUnit.MINUTES);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(compareFiles(fileSource, fileTarget));
   }

   @Test
   public void testCopyEmptyFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String newFolder = "newFolder";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, testFolder);
      File fileTarget = new File(tmpDir, newFolder);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());
      shell.execute("cp " + testFolder + " " + newFolder, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(fileTarget.isDirectory());
   }

   @Test
   public void testCopyEmptyFolderToExisting() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String newFolder = "newFolder";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + newFolder, 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, testFolder);
      File fileTarget = new File(tmpDir, newFolder);

      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(fileTarget.isDirectory());
      shell.execute("cp " + testFolder + " " + newFolder, 5, TimeUnit.SECONDS);
      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(fileTarget.isDirectory());
   }

   @Test
   public void testCopyNonEmptyFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String newFolder = "newFolder";
      String subFolderA = "subFolder1";
      String subFolderB = "subFolder2";
      String fileA = "file1";
      String fileB = "file2";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("cd " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderB, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileA, 5, TimeUnit.SECONDS);
      shell.execute("cd " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileB, 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);

      File fileSource = new File(tmpDir, testFolder);
      File fileTarget = new File(tmpDir, newFolder);

      File copySubFolder1 = new File(fileTarget, subFolderA);
      File copySubFolder2 = new File(fileTarget, subFolderB);
      File copyFile1 = new File(fileTarget, fileA);
      File copyFile2 = new File(copySubFolder1, fileB);

      Assert.assertTrue(fileSource.exists());
      Assert.assertFalse(fileTarget.exists());
      Assert.assertFalse(copyFile1.exists());
      Assert.assertFalse(copySubFolder1.exists());
      Assert.assertFalse(copyFile2.exists());
      Assert.assertFalse(copySubFolder2.exists());

      shell.execute("cp " + testFolder + " " + newFolder, 5, TimeUnit.SECONDS);

      Assert.assertTrue(fileSource.exists());
      Assert.assertTrue(fileTarget.exists());
      Assert.assertTrue(fileTarget.isDirectory());

      Assert.assertTrue(copyFile1.exists());
      Assert.assertTrue(copySubFolder1.exists());
      Assert.assertTrue(copyFile2.exists());
      Assert.assertTrue(copySubFolder2.exists());
   }

   @Test
   public void testCopyFolderToExistingFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String newFolder = "newFolder";
      String subFolderA = "subFolder1";
      String subFolderB = "subFolder2";
      String fileA = "file1";
      String fileB = "file2";

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("cd " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderB, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileA, 5, TimeUnit.SECONDS);
      shell.execute("cd " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileB, 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + newFolder, 5, TimeUnit.SECONDS);

      File dirToCopy = new File(tmpDir, testFolder);
      Assert.assertTrue(dirToCopy.exists());
      File file1 = new File(dirToCopy, fileA);
      Assert.assertTrue(file1.exists());
      File subFolder1 = new File(dirToCopy, subFolderA);
      File file2 = new File(subFolder1, fileB);
      Assert.assertTrue(file2.exists());

      Assert.assertTrue(subFolder1.isDirectory());
      Assert.assertTrue(subFolder1.exists());

      File subFolder2 = new File(dirToCopy, subFolderB);
      Assert.assertTrue(subFolder2.isDirectory());
      Assert.assertTrue(subFolder2.exists());

      shell.execute("cp " + testFolder + " " + newFolder, 5, TimeUnit.SECONDS);

      File targetParent = new File(tmpDir, newFolder);
      Assert.assertTrue(targetParent.exists());
      Assert.assertTrue(targetParent.isDirectory());

      File copy = new File(targetParent, testFolder);
      Assert.assertTrue(copy.exists());
      Assert.assertTrue(copy.isDirectory());

      File copyFile1 = new File(copy, fileA);
      Assert.assertTrue(copyFile1.exists());
      Assert.assertTrue(compareFiles(copyFile1, file1));

      File copySubFolder1 = new File(copy, subFolderA);
      Assert.assertTrue(copySubFolder1.exists());
      File copyfile2 = new File(copySubFolder1, fileB);
      Assert.assertTrue(copyfile2.exists());
      Assert.assertTrue(compareFiles(copyfile2, file2));

      File copySubFolder2 = new File(copy, subFolderB);
      Assert.assertTrue(copySubFolder2.exists());
   }

   @Test
   public void testCopyFolderToNonExistingFolder() throws Exception
   {
      File tmpDir = OperatingSystemUtils.createTempDir();
      shell.execute("cd " + tmpDir.getAbsolutePath(), 5, TimeUnit.SECONDS);

      String testFolder = "testFolder";
      String newFolder = "newFolder";
      String nonExisting = "nonExisting";
      String subFolderA = "subFolder1";
      String subFolderB = "subFolder2";
      String fileA = "file1";
      String fileB = "file2";
      String relativePath = newFolder.concat(File.separator).concat(nonExisting);

      shell.execute("mkdir " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + newFolder, 5, TimeUnit.SECONDS);
      shell.execute("cd " + testFolder, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("mkdir " + subFolderB, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileA, 5, TimeUnit.SECONDS);
      shell.execute("cd " + subFolderA, 5, TimeUnit.SECONDS);
      shell.execute("touch " + fileB, 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);
      shell.execute("cd ..", 5, TimeUnit.SECONDS);

      File dirToCopy = new File(tmpDir, testFolder);
      Assert.assertTrue(dirToCopy.exists());
      File file1 = new File(dirToCopy, fileA);
      Assert.assertTrue(file1.exists());

      File subFolder1 = new File(dirToCopy, subFolderA);
      File file2 = new File(subFolder1, fileB);
      Assert.assertTrue(file2.exists());

      Assert.assertTrue(subFolder1.isDirectory());
      Assert.assertTrue(subFolder1.exists());

      File subFolder2 = new File(dirToCopy, subFolderB);
      Assert.assertTrue(subFolder2.isDirectory());
      Assert.assertTrue(subFolder2.exists());

      shell.execute("cp " + testFolder + " " + relativePath, 5, TimeUnit.SECONDS);

      File targetParent = new File(tmpDir, newFolder);
      Assert.assertTrue(targetParent.exists());
      Assert.assertTrue(targetParent.isDirectory());

      File copy = new File(targetParent, nonExisting);
      Assert.assertTrue(copy.exists());
      Assert.assertTrue(copy.isDirectory());

      File copyfile1 = new File(copy, fileA);
      Assert.assertTrue(copyfile1.exists());
      Assert.assertTrue(compareFiles(copyfile1, file1));

      File copySubFolder1 = new File(copy, subFolderA);
      Assert.assertTrue(copySubFolder1.exists());
      File copyfile2 = new File(copySubFolder1, fileB);
      Assert.assertTrue(copyfile2.exists());
      Assert.assertTrue(compareFiles(copyfile2, file2));

      File copySubFolder2 = new File(copy, subFolderB);
      Assert.assertTrue(copySubFolder2.exists());
   }

   private boolean compareFiles(File f1, File f2)
   {
      boolean ret = false;
      try
      {
         byte[] contentsOne = Files.readAllBytes(f1.toPath());
         byte[] contentsTwo = Files.readAllBytes(f2.toPath());
         ret = Arrays.equals(contentsOne, contentsTwo);
      }
      catch (IOException e)
      {
         ret = false;
      }
      return ret;
   }
}
TOP

Related Classes of org.jboss.forge.addon.shell.command.CopyCommandTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.