/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.integration.validation;
import java.util.Set;
import javax.persistence.Query;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.persistence.test.AbstractPersistenceTestCase;
/**
* Tests the new Bean Validation constraint support in the JPA 2.0 spec by
* focusing on the following Validation scenarios:
*
* Check special update/delete/ignore cases once:
* 1) Update @Null constraint exception on variables in mode=AUTO
* Tests that a constraint violation will occur on invalid update.
* 2) No invalid Delete @Null constraint exception when mode=AUTO
* Tests that a violation will not occur when deleting invalid entity.
* 3) No invalid Persist constraint exception when mode=NONE
* Tests that no Validation Providers are used when disabled.
*
* Basic constraint tests for violation exceptions:
* 4) Persist @Null constraint exception on variables in mode=AUTO
* 5) Persist @NotNull constraint exception on getter in mode=AUTO
* 7) Test @AssertTrue constraint exception on variables in mode=AUTO
* 8) Test @AssertFalse constraint exception on getter in mode=AUTO
* 10) Test @DecimalMin constraint exception on variables in mode=AUTO
* 11) Test @DecimalMax constraint exception on getter in mode=AUTO
* 13) Test @Min constraint exception on variables in mode=AUTO
* 14) Test @Max constraint exception on getter in mode=AUTO
* 16) Test @Digits constraint exception on variables in mode=AUTO
* 17) Test @Digits constraint exception on getter in mode=AUTO
* 19) Test @Size constraint exception on variables in mode=AUTO
* 20) Test @Size constraint exception on getter in mode=AUTO
* 22) Test @Future constraint exception on variables in mode=AUTO
* 23) Test @Past constraint exception on getter in mode=AUTO
* 25) Test @Pattern constraint exception on variables in mode=AUTO
* 26) Test @Pattern constraint exception on getter in mode=AUTO
* 28) Test @Valid constraint exceptions in mode=AUTO
*
* Basic constraint test for no violations:
* 6) Persist @NotNull and @Null constraints pass in mode=AUTO
* 9) Test @AssertFalse and @AssertTrue constraints pass in mode=AUTO
* 12) Test @DecimalMin and @DecimalMax constraints pass in mode=AUTO
* 15) Test @Min and @Max constraints pass in mode=AUTO
* 18) Test @Digits constraints pass in mode=AUTO
* 21) Test @Size constraints pass in mode=AUTO
* 24) Test @Past and @Future constraints pass in mode=AUTO
* 27) Test @Pattern constraints pass in mode=AUTO
* 29) Test @Valid constraints pass in mode=AUTO
*
* @version $Rev$ $Date$
*/
public class TestConstraints extends AbstractPersistenceTestCase {
private static OpenJPAEntityManagerFactorySPI emf = null;
@Override
public void setUp() throws Exception {
super.setUp();
emf = (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
"ConstraintPU",
"org/apache/openjpa/integration/validation/persistence.xml");
}
@Override
public void tearDown() throws Exception {
closeEMF(emf);
emf = null;
super.tearDown();
}
/**
* Scenario being tested:
* 1) Update @Null constraint exception on variables in mode=AUTO
* Tests that a constraint violation will occur on invalid update.
*/
public void testNullUpdateConstraint() {
getLog().trace("testNullUpdateConstraint() started");
long id = 0;
// Part 1 - Create and persist a valid entity
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createValid();
em.persist(c);
em.getTransaction().commit();
id = c.getId();
getLog().trace("testNullUpdateConstraint() Part 1 of 2 passed");
} catch (Exception e) {
// unexpected
getLog().trace("testNullUpdateConstraint() Part 1 of 2 failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
// Part 2 - Verify that invalid properties are caught on an update
// create EM from default EMF
em = emf.createEntityManager();
assertNotNull(em);
try {
// update entity to be invalid
ConstraintNull c = em.find(ConstraintNull.class, id);
em.getTransaction().begin();
c.setNullRequired(new String("not null"));
em.flush();
em.getTransaction().commit();
getLog().trace("testNullUpdateConstraint() Part 2 of 2 failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testNullUpdateConstraint() Part 2 of 2 passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 2) No invalid Delete @Null constraint exception when mode=AUTO
* Tests that a violation will not occur when deleting invalid entity.
*/
public void testNullDeleteIgnored() {
getLog().trace("testNullDeleteIgnored() started");
// Part 1 - Create an invalid entity
// create our EMF w/ props
OpenJPAEntityManagerFactorySPI emf = (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
"null-none-mode",
"org/apache/openjpa/integration/validation/persistence.xml");
assertNotNull(emf);
// create EM
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("NONE"));
// create invalid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createInvalidNull();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testNullDeleteIgnored() Part 1 of 2 passed");
} catch (Exception e) {
// unexpected
getLog().trace("testNullDeleteIgnored() Part 1 of 2 failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
closeEMF(emf);
}
// Part 2 - Verify delete using default group does not cause Validation
// create our EMF w/ validation mode=CALLBACK
emf = (OpenJPAEntityManagerFactorySPI)OpenJPAPersistence
.createEntityManagerFactory(
"null-callback-mode",
"org/apache/openjpa/integration/validation/persistence.xml");
assertNotNull(emf);
// create EM
em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("CALLBACK"));
// get the invalid entity to delete
Query q = em.createQuery("DELETE FROM VNULL c WHERE c.id = 1");
em.getTransaction().begin();
int count = q.executeUpdate();
em.getTransaction().commit();
getLog().trace("testNullDeleteIgnored() Part 2 of 2 passed");
} catch (Exception e) {
// unexpected
getLog().trace("testNullDeleteIgnored() Part 2 of 2 failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
closeEMF(emf);
}
}
/**
* Scenario being tested:
* 3) No invalid Persist constraint exception when mode=NONE
* Tests that no Validation Providers are used when disabled.
*/
public void testNullConstraintIgnored() {
getLog().trace("testNullConstraintIgnored() started");
// create our EMF w/ props
OpenJPAEntityManagerFactorySPI emf = (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
"null-none-mode",
"org/apache/openjpa/integration/validation/persistence.xml");
assertNotNull(emf);
// create EM
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("NONE"));
// create invalid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createInvalidNull();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testNullConstraintIgnored() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testNullConstraintIgnored() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
closeEMF(emf);
}
}
/**
* Scenario being tested:
* 4) Test @Null constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testNullConstraint() {
getLog().trace("testNullConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createInvalidNull();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testNullConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testNullConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 5) Test @NotNull constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testNotNullConstraint() {
getLog().trace("testNotNullConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createInvalidNotNull();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testNotNullConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testNotNullConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 6) Test @NotNull and @Null constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testNullNotNullConstraint() {
getLog().trace("testNullNotNullConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintNull instance
em.getTransaction().begin();
ConstraintNull c = ConstraintNull.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testNullNotNullConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testNullNotNullConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 7) Test @AssertTrue constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testAssertTrueConstraint() {
getLog().trace("testAssertTrueConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintBoolean c = ConstraintBoolean.createInvalidTrue();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testAssertTrueConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testAssertTrueConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 8) Test @AssertFalse constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testAssertFalseConstraint() {
getLog().trace("testAssertFalseConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintBoolean c = ConstraintBoolean.createInvalidFalse();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testAssertFalseConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testAssertFalseConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 9) Test @AssertFalse and @AssertTrue constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testAssertTrueFalseConstraint() {
getLog().trace("testAssertTrueFalseConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintBoolean c = ConstraintBoolean.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testAssertTrueFalseConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testAssertTrueFalseConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 10) Test @DecimalMin constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDecimalMinConstraint() {
getLog().trace("testDecimalMinConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDecimal c = ConstraintDecimal.createInvalidMin();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDecimalMinConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDecimalMinConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 11) Test @DecimalMax constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDecimalMaxConstraint() {
getLog().trace("testDecimalMaxConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDecimal c = ConstraintDecimal.createInvalidMax();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDecimalMaxConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDecimalMaxConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 12) Test @DecimalMin and @DecimalMax constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testDecimalMinMaxConstraint() {
getLog().trace("testDecimalMinMaxConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDecimal c = ConstraintDecimal.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDecimalMinMaxConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testDecimalMinMaxConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 13) Test @Min constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testMinConstraint() {
getLog().trace("testMinConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintNumber c = ConstraintNumber.createInvalidMin();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testMinConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testMinConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 14) Test @Max constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testMaxConstraint() {
getLog().trace("testMaxConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintNumber c = ConstraintNumber.createInvalidMax();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testMaxConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testMaxConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 15) Test @Min and @Max constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testMinMaxConstraint() {
getLog().trace("testMinMaxConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintNumber c = ConstraintNumber.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testMinMaxConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testMinMaxConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 16) Test @Digits constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDigitsTwoConstraint() {
getLog().trace("testDigitsTwoConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDigits c = ConstraintDigits.createInvalidTwoDigits();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDigitsTwoConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDigitsTwoConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 17) Test @Digits constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDigitsFiveConstraint() {
getLog().trace("testDigitsFiveConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDigits c = ConstraintDigits.createInvalidFiveDigits();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDigitsFiveConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDigitsFiveConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 18) Test @Digits constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testDigitsConstraint() {
getLog().trace("testDigitsConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDigits c = ConstraintDigits.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDigitsConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testDigitsConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 19) Test @Size constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testSizeStringConstraint() {
getLog().trace("testSizeStringConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintSize c = ConstraintSize.createInvalidString();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testSizeStringConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testSizeStringConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 20) Test @Size constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testSizeMapConstraint() {
getLog().trace("testSizeMapConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintSize c = ConstraintSize.createInvalidMap();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testSizeMapConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testSizeMapConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 21) Test @Size constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testSizeConstraint() {
getLog().trace("testSizeConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintSize c = ConstraintSize.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testSizeConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testSizeConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 22) Test @Future constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDatesFutureConstraint() {
getLog().trace("testDatesFutureConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDates c = ConstraintDates.createInvalidFuture();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDatesFutureConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDatesFutureConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 23) Test @Past constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testDatesPastConstraint() {
getLog().trace("testDatesPastConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDates c = ConstraintDates.createInvalidPast();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDatesPastConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testDatesPastConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 24) Test @Past and @Future constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testDatesConstraint() {
getLog().trace("testDatesConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintDates c = ConstraintDates.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testDatesConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testDatesConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 25) Test @Pattern constraint exception on variables in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testPatternAlphaConstraint() {
getLog().trace("testPatternAlphaConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintPattern c = ConstraintPattern.createInvalidString();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testPatternAlphaConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testPatternAlphaConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 26) Test @Pattern constraint exception on getter in mode=AUTO
* Basic constraint test for a violation exception.
*/
public void testPatternNumericConstraint() {
getLog().trace("testPatternNumericConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintPattern c = ConstraintPattern.createInvalidZipcode();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testPatternNumericConstraint() failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
getLog().trace("testPatternNumericConstraint() passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 27) Test @Pattern constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testPatternConstraint() {
getLog().trace("testPatternConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create valid ConstraintBoolean instance
em.getTransaction().begin();
ConstraintPattern c = ConstraintPattern.createValid();
em.persist(c);
em.getTransaction().commit();
getLog().trace("testPatternConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testPatternConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 28) Test @Valid constraint exceptions in mode=AUTO
* Basic constraint test for violation exceptions.
*/
public void testValidFailuresConstraint() {
Address a = new Address();
getLog().trace("testValidFailuresConstraint() started");
// Part 1 - Create an invalid Address entity
try {
OpenJPAEntityManagerFactorySPI emf = (OpenJPAEntityManagerFactorySPI)
OpenJPAPersistence.createEntityManagerFactory(
"address-none-mode",
"org/apache/openjpa/integration/validation/persistence.xml");
assertNotNull(emf);
// create EM
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try{
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("NONE"));
// provide an invalid Address (every value is invalid)
em.getTransaction().begin();
a.setStreetAddress(null);
a.setCity("a1!b2@c3#");
a.setState("00");
a.setPostalCode("a1b2c3");
// persist, which should NOT cause a CVE
em.persist(a);
em.getTransaction().commit();
getLog().trace("testValidFailuresConstraint() Part 1 of 2 passed");
} catch (Exception e) {
// unexpected
getLog().trace("testValidFailuresConstraint() Part 1 of 2 failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
closeEMF(emf);
}
} catch (Exception e) {
// unexpected
getLog().trace("testValidFailuresConstraint() Part 1 of 2 failed");
fail("Caught unexpected exception = " + e);
}
// Part 2 - Create a Person entity that uses the invalid address above
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// verify Validation Mode
OpenJPAConfiguration conf = em.getConfiguration();
assertNotNull(conf);
assertTrue("ValidationMode",
conf.getValidationMode().equalsIgnoreCase("AUTO"));
// create invalid Person instance
em.getTransaction().begin();
// create a valid Person, minus the address
Person p = new Person();
p.setFirstName("Java");
p.setLastName("Joe");
// use invalid Address, which should cause CVEs due to @Valid
//a = em.getReference(Address.class, a.getId());
assertNotNull(a);
p.setHomeAddress(a);
// persist, which should cause a CVE
em.persist(p);
em.getTransaction().commit();
getLog().trace("testValidFailuresConstraint() Part 2 of 2 failed");
fail("Expected a ConstraintViolationException");
} catch (ConstraintViolationException e) {
// expected
getLog().trace("Caught expected ConstraintViolationException = " + e);
Set<ConstraintViolation<?>> cves = e.getConstraintViolations();
assertNotNull(cves);
for (ConstraintViolation<?> cv: cves) {
getLog().trace("CVE Contains ConstraintViolation = " + cv.getMessage());
}
assertEquals("Wrong number of embedded ConstraintViolation failures",
5, cves.size());
getLog().trace("testValidFailuresConstraint() Part 2 of 2 passed");
} finally {
closeEM(em);
}
}
/**
* Scenario being tested:
* 29) Test @Pattern constraints pass in mode=AUTO
* Basic constraint test for no violations.
*/
public void testValidPassConstraint() {
getLog().trace("testValidPassConstraint() started");
// create EM from default EMF
OpenJPAEntityManager em = emf.createEntityManager();
assertNotNull(em);
try {
// provide a valid Address
em.getTransaction().begin();
Address a = new Address();
a.setStreetAddress("4205 South Miami Blvd.");
a.setCity("R.T.P.");
a.setState("NC");
a.setPostalCode("27709");
// persist, which should NOT cause a CVE
em.persist(a);
em.getTransaction().commit();
// create a valid Person
em.getTransaction().begin();
Person p = new Person();
p.setFirstName("Java");
p.setLastName("Joe");
p.setHomeAddress(a);
// persist, which should NOT cause a CVE
em.persist(p);
em.getTransaction().commit();
getLog().trace("testValidPassConstraint() passed");
} catch (Exception e) {
// unexpected
getLog().trace("testValidPassConstraint() failed");
fail("Caught unexpected exception = " + e);
} finally {
closeEM(em);
}
}
/**
* Internal convenience method for getting the OpenJPA logger
*
*/
private Log getLog() {
return emf.getConfiguration().getLog("Tests");
}
}