PageRenderTime 27ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/atlassian/amps
Java | 156 lines | 117 code | 26 blank | 13 comment | 0 complexity | ec77fe216bae034b0d1e7b8033f279f5 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
  1. package com.atlassian.maven.plugins.amps.database;
  2. import com.atlassian.maven.plugins.amps.DataSource;
  3. import com.atlassian.maven.plugins.amps.product.ImportMethod;
  4. import org.apache.maven.plugin.logging.Log;
  5. import org.codehaus.plexus.util.xml.Xpp3Dom;
  6. import org.junit.Rule;
  7. import org.junit.Test;
  8. import org.mockito.InjectMocks;
  9. import org.mockito.Mock;
  10. import org.mockito.junit.MockitoJUnit;
  11. import org.mockito.junit.MockitoRule;
  12. import java.io.File;
  13. import java.nio.file.Path;
  14. import java.nio.file.Paths;
  15. import static java.nio.file.Files.createTempFile;
  16. import static org.hamcrest.MatcherAssert.assertThat;
  17. import static org.hamcrest.Matchers.is;
  18. import static org.junit.Assert.assertNotNull;
  19. import static org.junit.Assert.assertNull;
  20. import static org.junit.Assert.assertTrue;
  21. import static org.mockito.Mockito.when;
  22. public class Oracle10GTest extends DatabaseTestCase<Oracle10g> {
  23. private static final String PASSWORD = "thePassword";
  24. private static final String USERNAME = "theUsername";
  25. @Rule
  26. public final MockitoRule mockitoRule = MockitoJUnit.rule();
  27. @Mock
  28. private DataSource dataSource;
  29. @Mock
  30. private Log log;
  31. @InjectMocks
  32. private Oracle10g database;
  33. private void setUpImportMethod(final String importMethod) {
  34. when(dataSource.getImportMethod()).thenReturn(importMethod);
  35. }
  36. @Test
  37. public void testDatabaseName() {
  38. // Arrange
  39. final String schemaName = "theSchema";
  40. when(dataSource.getSchema()).thenReturn(schemaName);
  41. // Act
  42. final String name = database.getDatabaseName(dataSource);
  43. // Assert
  44. assertThat(name, is(schemaName));
  45. }
  46. @Test
  47. public void testCreateDatabaseSql() {
  48. // expected result
  49. final String dataPumpDir = File.separatorChar + "usr" + File.separatorChar + "home";
  50. final String expectedSqlFormat = "DECLARE\n"
  51. + " v_count INTEGER := 0;\n"
  52. + "BEGIN\n"
  53. + " SELECT COUNT (1) INTO v_count FROM dba_users WHERE username = UPPER ('product_user'); \n"
  54. + " IF v_count != 0\n"
  55. + " THEN\n"
  56. + " EXECUTE IMMEDIATE('DROP USER product_user CASCADE');\n"
  57. + " END IF;\n"
  58. + " v_count := 0; \n"
  59. + " SELECT COUNT (1) INTO v_count FROM dba_tablespaces WHERE tablespace_name = UPPER('product'); \n"
  60. + " IF v_count != 0\n"
  61. + " THEN\n"
  62. + " EXECUTE IMMEDIATE('DROP TABLESPACE product INCLUDING CONTENTS AND DATAFILES');\n"
  63. + " END IF;\n"
  64. + " EXECUTE IMMEDIATE(q'{CREATE TABLESPACE product DATAFILE '/tmp/product.dbf' SIZE 32m AUTOEXTEND ON NEXT 32m MAXSIZE 4096m EXTENT MANAGEMENT LOCAL}');\n"
  65. + " EXECUTE IMMEDIATE('CREATE USER product_user IDENTIFIED BY product_pwd DEFAULT TABLESPACE product QUOTA UNLIMITED ON product');\n"
  66. + " EXECUTE IMMEDIATE('GRANT CONNECT, RESOURCE, IMP_FULL_DATABASE TO product_user');\n"
  67. + " EXECUTE IMMEDIATE(q'{CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '%s'}');\n"
  68. + " EXECUTE IMMEDIATE('GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO product_user');\n"
  69. + "END;\n"
  70. + "/";
  71. final String expectedSql = String.format(expectedSqlFormat, dataPumpDir);
  72. // setup
  73. when(dataSource.getDriver()).thenReturn("oracle.jdbc.OracleDriver");
  74. when(dataSource.getDumpFilePath()).thenReturn("/usr/home/oracle.bak");
  75. when(dataSource.getPassword()).thenReturn("product_pwd");
  76. when(dataSource.getSystemUrl()).thenReturn("theSystemUrl");
  77. when(dataSource.getSystemUsername()).thenReturn("theSystemUser");
  78. when(dataSource.getUsername()).thenReturn("product_user");
  79. // execute
  80. final Xpp3Dom sqlMavenCreateConfiguration = database.getSqlMavenCreateConfiguration(dataSource);
  81. // assert
  82. final String initDatabaseSQL = sqlMavenCreateConfiguration.getChild("sqlCommand").getValue();
  83. assertThat(initDatabaseSQL, is(expectedSql));
  84. }
  85. @Test
  86. public void testImportConfiguration() throws Exception {
  87. // Arrange
  88. setUpImportMethod(ImportMethod.IMPDP.name());
  89. setUpDataSourceCredentials();
  90. final Path dumpsDirectory = Paths.get(System.getProperty("java.io.tmpdir"), getClass().getSimpleName());
  91. dumpsDirectory.toFile().deleteOnExit();
  92. dumpsDirectory.toFile().mkdirs();
  93. final Path dumpFilePath = createTempFile(dumpsDirectory, "my_dump", ".bin");
  94. when(dataSource.getDumpFilePath()).thenReturn(dumpFilePath.toString());
  95. // Act
  96. final Xpp3Dom importConfiguration = database.getExecMavenToolImportConfiguration(dataSource);
  97. // Assert
  98. assertNotNull(importConfiguration);
  99. assertThat(importConfiguration.getChild("executable").getValue(), is("impdp"));
  100. final Xpp3Dom arguments = importConfiguration.getChild("arguments");
  101. assertThat(arguments.getChildCount(), is(3));
  102. assertThat(arguments.getChild(0).getValue(), is("theUsername/thePassword"));
  103. assertThat(arguments.getChild(1).getValue(), is("DUMPFILE=" + dumpFilePath.getFileName().toString()));
  104. assertThat(arguments.getChild(2).getValue(), is("DIRECTORY=DATA_PUMP_DIR"));
  105. assertCanReadWriteAndExecute(dumpFilePath.toFile());
  106. assertCanReadWriteAndExecute(dumpFilePath.getParent().toFile());
  107. }
  108. private void assertCanReadWriteAndExecute(final File file) {
  109. assertTrue(file.canExecute());
  110. assertTrue(file.canRead());
  111. assertTrue(file.canWrite());
  112. }
  113. private void setUpDataSourceCredentials() {
  114. when(dataSource.getUsername()).thenReturn(USERNAME);
  115. when(dataSource.getPassword()).thenReturn(PASSWORD);
  116. }
  117. @Test
  118. public void execMavenImportConfigurationWhenNotUsingImpDpToolShouldBeNull() throws Exception {
  119. // Arrange
  120. setUpImportMethod("NOT_impdp");
  121. // Act
  122. final Xpp3Dom importConfiguration = database.getExecMavenToolImportConfiguration(dataSource);
  123. // Assert
  124. assertNull(importConfiguration);
  125. }
  126. @Override
  127. protected Oracle10g getDatabase() {
  128. return database;
  129. }
  130. }