@Test public void canListSequences() { JuAssumeUtils.dbIsNot(this.emUtil, DbType.MYSQL); // Sequences are not supported by MqSQL new DbSchemaUtil(this.emUtil).runLiquibaseChangeLog("ch/inftec/ju/dbutil/test/JuEmUtilTest_canListSequences.xml"); List<String> sequenceNames = this.emUtil.getSequenceNames(); Assert.assertTrue(sequenceNames.contains("TESTSEQUENCE")); }
@Test public void canEncryptText_usingStrongEncryptor() { JuAssumeUtils.javaCryptographyExtensionInstalled(); JuTextEncryptor encryptor = JuSecurityUtils.buildEncryptor() .strong() .password("secret") .createTextEncryptor(); String encryptedString = encryptor.encrypt("String"); // The encrypted String will not be constant... Assert.assertNotNull(encryptor.encrypt("String")); Assert.assertEquals("String", encryptor.decrypt(encryptedString)); } }
@Test public void canResetIdentityGeneration_forSequences() { JuAssumeUtils.dbIsNot(this.emUtil, DbType.MYSQL); DbSchemaUtil su = new DbSchemaUtil(this.emUtil); su.prepareDefaultSchemaAndTestData(); su.runLiquibaseChangeLog("ch/inftec/ju/dbutil/test/JuEmUtilTest_canListSequences.xml"); this.emUtil.resetIdentityGenerationOrSequences(1); // Is done by prepareDefaultSchemaAndTestData, but the testSequence might just have been created //CREATE SEQUENCE PUBLIC.testSequence Assert.assertEquals(new Long(1L), this.emUtil.getNextValueFromSequence("testSequence")); this.emUtil.resetIdentityGenerationOrSequences(10); Assert.assertEquals(new Long(10L), this.emUtil.getNextValueFromSequence("testSequence")); }
@Test @DataSet("AbstractDbTestTransactionTest_testingEntity.xml") @DataVerify @DataSetExport(tablesDataSet="AbstractDbTestTransactionTest_testingEntity.xml", doPhysicalExport=false) public void multipleTransactions_areSupported() { // H2 has a locking strategy that will cause a timeout in this scenario JuAssumeUtils.dbIsNot(this.emUtil, DbType.H2); TestingEntity te1 = new TestingEntity("TE1"); this.em.persist(te1); try (EmfWork ew2 = this.startNewWork()) { TestingEntity te2 = new TestingEntity("TE2"); ew2.getEm().persist(te2); try (EmfWork ew3 = this.startNewWork()) { TestingEntity te3 = new TestingEntity("TE3"); ew3.getEm().persist(te3); } ew2.setRollbackOnly(); } } public static class MultipleTransactions_areSupported extends DataVerifier {
@Test public void xmlExport_copesWithUpperCaseTable_andUsesUpperCaseColumnNames() { // MySQL is case sensitive JuAssumeUtils.dbIsNot(this.emUtil, DbType.MYSQL); DbSchemaUtil ds = new DbSchemaUtil(this.em); ds.prepareDefaultTestData(true, true, true); TestingEntity te = new TestingEntity(); te.setName("Export Test"); this.em.persist(te); // Export table with camel case DbDataUtil du = new DbDataUtil(this.em); Document doc = du.buildExport().addTable("TESTINGENTITY").writeToXmlDocument(); XPathGetter xg = new XPathGetter(doc); logger.debug("Exported XML\n" + XmlUtils.toString(doc, false, true)); Assert.assertEquals(1, xg.getArray("//TESTINGENTITY").length); Assert.assertEquals("Export Test", xg.getSingle("//TESTINGENTITY/@name")); }
@Test public void xmlExport_copesWithLowerCaseTable_andUsesUpperCaseColumnNames() { // MySQL is case sensitive JuAssumeUtils.dbIsNot(this.emUtil, DbType.MYSQL); DbSchemaUtil ds = new DbSchemaUtil(this.em); ds.prepareDefaultTestData(true, true, true); TestingEntity te = new TestingEntity(); te.setName("Export Test"); this.em.persist(te); // Export table with camel case DbDataUtil du = new DbDataUtil(this.em); Document doc = du.buildExport().addTable("testingentity").writeToXmlDocument(); XPathGetter xg = new XPathGetter(doc); logger.debug("Exported XML\n" + XmlUtils.toString(doc, false, true)); Assert.assertEquals(1, xg.getArray("//testingentity").length); Assert.assertEquals("Export Test", xg.getSingle("//testingentity/@name")); }