PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/amps-maven-plugin/src/test/java/com/atlassian/maven/plugins/amps/TestMavenGoalsHomeZip.java

https://bitbucket.org/atlassian/amps
Java | 206 lines | 157 code | 47 blank | 2 comment | 4 complexity | 2cfb66132a143398a79f3901170c6d4f MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
  1. package com.atlassian.maven.plugins.amps;
  2. import com.atlassian.maven.plugins.amps.product.ProductHandler;
  3. import com.atlassian.maven.plugins.amps.product.RefappProductHandler;
  4. import com.atlassian.maven.plugins.amps.product.manager.WebAppManager;
  5. import org.apache.commons.io.FileUtils;
  6. import org.apache.maven.artifact.resolver.ArtifactResolver;
  7. import org.apache.maven.model.Build;
  8. import org.apache.maven.plugin.MojoExecutionException;
  9. import org.apache.maven.plugin.logging.SystemStreamLog;
  10. import org.apache.maven.project.MavenProject;
  11. import org.apache.maven.repository.RepositorySystem;
  12. import org.junit.Before;
  13. import org.junit.Rule;
  14. import org.junit.Test;
  15. import org.junit.rules.MethodRule;
  16. import org.junit.rules.TemporaryFolder;
  17. import org.mockito.Mock;
  18. import org.mockito.junit.MockitoJUnit;
  19. import java.io.File;
  20. import java.io.IOException;
  21. import java.nio.charset.StandardCharsets;
  22. import java.util.Collections;
  23. import java.util.Enumeration;
  24. import java.util.zip.ZipEntry;
  25. import java.util.zip.ZipFile;
  26. import static org.junit.Assert.assertEquals;
  27. import static org.junit.Assert.assertFalse;
  28. import static org.junit.Assert.assertTrue;
  29. import static org.mockito.Mockito.mock;
  30. import static org.mockito.Mockito.when;
  31. @SuppressWarnings("Duplicates")
  32. public class TestMavenGoalsHomeZip {
  33. private static final String PRODUCT_ID = "noplacelike";
  34. private static final String INSTANCE_ID = "noplacelike1";
  35. private static final String TMP_RESOURCES = "tmp-resources";
  36. private static final String GENERATED_HOME = "generated-home";
  37. private static final String PLUGINS = "plugins";
  38. private static final String BUNDLED_PLUGINS = "bundled-plugins";
  39. private static final String ZIP_PREFIX = "generated-resources/" + PRODUCT_ID + "-home";
  40. private static final String SERVER = "server";
  41. @Rule
  42. public final MethodRule mockitoRule = MockitoJUnit.rule();
  43. @Rule
  44. public final TemporaryFolder tempDir = new TemporaryFolder();
  45. @Mock
  46. private RepositorySystem repositorySystem;
  47. @Mock
  48. private ArtifactResolver artifactResolver;
  49. @Mock
  50. private MavenGoals mavenGoals;
  51. @Mock
  52. private WebAppManager webAppManager;
  53. private ProductHandler productHandler;
  54. private File generatedHomeDir;
  55. private File pluginsDir;
  56. private File bundledPluginsDir;
  57. private Product product;
  58. @Before
  59. public void setup() throws IOException {
  60. generatedHomeDir = tempDir.newFolder(INSTANCE_ID, TMP_RESOURCES, GENERATED_HOME);
  61. pluginsDir = new File(generatedHomeDir, PLUGINS);
  62. bundledPluginsDir = new File(generatedHomeDir, BUNDLED_PLUGINS);
  63. // setup maven mocks
  64. Build build = mock(Build.class);
  65. when(build.getDirectory()).thenReturn(tempDir.getRoot().getAbsolutePath());
  66. MavenProject project = mock(MavenProject.class);
  67. when(project.getBuild()).thenReturn(build);
  68. MavenContext ctx = mock(MavenContext.class);
  69. when(ctx.getProject()).thenReturn(project);
  70. when(ctx.getLog()).thenReturn(new SystemStreamLog());
  71. when(ctx.getReactor()).thenReturn(Collections.emptyList());
  72. when(ctx.getSession()).thenReturn(null);
  73. // Mock the product
  74. product = mock(Product.class);
  75. when(product.getId()).thenReturn(PRODUCT_ID);
  76. when(product.getInstanceId()).thenReturn(INSTANCE_ID);
  77. when(product.getServer()).thenReturn(SERVER);
  78. productHandler = new RefappProductHandler(ctx, mavenGoals, repositorySystem, artifactResolver, webAppManager);
  79. }
  80. @Test
  81. public void skipNonExistentHomeDir() throws Exception {
  82. File zip = new File(tempDir.getRoot(), "noExistHomeZip.zip");
  83. File fakeHomeDir = new File(tempDir.getRoot(), "this-folder-does-not-exist");
  84. productHandler.createHomeZip(fakeHomeDir, zip, product);
  85. assertFalse("zip for non-existent home should not exist", zip.exists());
  86. }
  87. @Test
  88. public void existingGeneratedDirGetsDeleted() throws IOException, MojoExecutionException {
  89. generatedHomeDir.mkdirs();
  90. File deletedFile = new File(generatedHomeDir, "should-be-deleted.txt");
  91. FileUtils.writeStringToFile(deletedFile, "This file should have been deleted!", StandardCharsets.UTF_8);
  92. File zip = tempDir.newFile("deleteGenHomeZip.zip");
  93. File homeDir = tempDir.newFolder("deleteGenHomeDir");
  94. productHandler.createHomeZip(homeDir, zip, product);
  95. assertFalse("generated text file should have been deleted", deletedFile.exists());
  96. }
  97. @Test
  98. public void pluginsNotIncluded() throws IOException, MojoExecutionException {
  99. pluginsDir.mkdirs();
  100. File pluginFile = new File(pluginsDir, "plugin.txt");
  101. FileUtils.writeStringToFile(pluginFile, "This file should have been deleted!", StandardCharsets.UTF_8);
  102. File zip = tempDir.newFile("deletePluginsHomeZip.zip");
  103. File homeDir = tempDir.newFolder("deletePluginsHomeDir");
  104. productHandler.createHomeZip(homeDir, zip, product);
  105. assertFalse("plugins file should have been deleted", pluginFile.exists());
  106. }
  107. @Test
  108. public void bundledPluginsNotIncluded() throws IOException, MojoExecutionException {
  109. bundledPluginsDir.mkdirs();
  110. File pluginFile = new File(bundledPluginsDir, "bundled-plugin.txt");
  111. FileUtils.writeStringToFile(pluginFile, "This file should have been deleted!", StandardCharsets.UTF_8);
  112. File zip = tempDir.newFile("deleteBundledPluginsHomeZip.zip");
  113. File homeDir = tempDir.newFolder("deleteBundledPluginsHomeDir");
  114. productHandler.createHomeZip(homeDir, zip, product);
  115. assertFalse("bundled-plugins file should have been deleted", pluginFile.exists());
  116. }
  117. @Test
  118. public void zipContainsProperPrefix() throws IOException, MojoExecutionException {
  119. File zipFile = tempDir.newFile("prefixedHomeZip.zip");
  120. File homeDir = tempDir.newFolder("prefixedHomeDir");
  121. tempDir.newFolder("prefixedHomeDir", "data");
  122. productHandler.createHomeZip(homeDir, zipFile, product);
  123. try (ZipFile zip = new ZipFile(zipFile)) {
  124. final Enumeration<? extends ZipEntry> entries = zip.entries();
  125. while (entries.hasMoreElements()) {
  126. final ZipEntry zipEntry = entries.nextElement();
  127. String zipPath = zipEntry.getName();
  128. String[] segments = zipPath.split("/");
  129. if (segments.length > 1) {
  130. String testPrefix = segments[0] + "/" + segments[1];
  131. assertEquals(ZIP_PREFIX, testPrefix);
  132. }
  133. }
  134. }
  135. }
  136. @Test
  137. public void zipContainsTestFile() throws IOException, MojoExecutionException {
  138. File zipFile = tempDir.newFile("fileHomeZip.zip");
  139. File homeDir = tempDir.newFolder("fileHomeDir");
  140. File dataDir = tempDir.newFolder("fileHomeDir", "data");
  141. File dataFile = new File(dataDir, "data.txt");
  142. FileUtils.writeStringToFile(dataFile, "This is some data.", StandardCharsets.UTF_8);
  143. productHandler.createHomeZip(homeDir, zipFile, product);
  144. boolean dataFileFound = false;
  145. try (ZipFile zip = new ZipFile(zipFile)) {
  146. final Enumeration<? extends ZipEntry> entries = zip.entries();
  147. while (entries.hasMoreElements()) {
  148. final ZipEntry zipEntry = entries.nextElement();
  149. String zipPath = zipEntry.getName();
  150. String fileName = zipPath.substring(zipPath.lastIndexOf("/") + 1);
  151. if (fileName.equals(dataFile.getName())) {
  152. dataFileFound = true;
  153. break;
  154. }
  155. }
  156. }
  157. assertTrue("data file not found in zip.", dataFileFound);
  158. }
  159. }