Skip to content

Commit

Permalink
HV-1903 Add simple test case to check the configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
marko-bekhta authored and gsmet committed Jun 15, 2022
1 parent b16293c commit 11c6910
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.engine.constraintvalidation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertThat;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.violationOf;
import static org.hibernate.validator.testutils.ValidatorUtil.getConfiguration;
import static org.testng.Assert.assertTrue;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.Set;

import org.hibernate.validator.testutil.TestForIssue;

import jakarta.validation.Constraint;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Payload;
import jakarta.validation.ReportAsSingleViolation;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.test.appender.ListAppender;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

@TestForIssue(jiraKey = "HV-1903")
public class LogValidatedValueConfigurationTest {

ListAppender simpleAppender;
ListAppender composingAppender;

@BeforeTest
public void setUp() {
LoggerContext context = LoggerContext.getContext( false );
simpleAppender = (ListAppender) context.getLogger(
"org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree" )
.getAppenders().get( "List" );
simpleAppender.clear();

composingAppender = (ListAppender) context.getLogger(
"org.hibernate.validator.internal.engine.constraintvalidation.ComposingConstraintTree" )
.getAppenders().get( "List" );
composingAppender.clear();


}

@AfterTest
public void tearDown() {
simpleAppender.clear();
composingAppender.clear();
}

@Test
public void testValueLoggingIsEnabled() {
Foo foo = new Foo();
Set<ConstraintViolation<Foo>> constraintViolations = getConfiguration()
.showValidatedValuesInTraceLogs( true )
.buildValidatorFactory()
.getValidator()
.validate( foo );

assertThat( constraintViolations ).containsOnlyViolations(
violationOf( Size.class ).withProperty( "value" ),
violationOf( ComposingConstraint.class ).withProperty( "value" )
);

assertTrue(
simpleAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating value 123 against constraint defined by" ) )
);
assertTrue(
composingAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating value 123 against constraint defined by" ) )
);
}

@Test
public void testValueLoggingIsDisabledByDefault() {
Foo foo = new Foo();
Set<ConstraintViolation<Foo>> constraintViolations = getConfiguration()
.buildValidatorFactory()
.getValidator()
.validate( foo );

assertThat( constraintViolations ).containsOnlyViolations(
violationOf( Size.class ).withProperty( "value" ),
violationOf( ComposingConstraint.class ).withProperty( "value" )
);

assertTrue(
simpleAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating against constraint defined by" ) )
);
assertTrue(
composingAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating against constraint defined by" ) )
);
}

@Test
public void testValueLoggingIsEnabledUsingProperty() {
Foo foo = new Foo();
Set<ConstraintViolation<Foo>> constraintViolations = getConfiguration()
.addProperty( "hibernate.validator.show_validated_value_in_trace_logs", "true" )
.showValidatedValuesInTraceLogs( true )
.buildValidatorFactory()
.getValidator()
.validate( foo );

assertThat( constraintViolations ).containsOnlyViolations(
violationOf( Size.class ).withProperty( "value" ),
violationOf( ComposingConstraint.class ).withProperty( "value" )
);

assertTrue(
simpleAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating value 123 against constraint defined by" ) )
);
assertTrue(
composingAppender.getEvents().stream()
.map( event -> event.getMessage().getFormattedMessage() )
.anyMatch( m -> m.startsWith( "Validating value 123 against constraint defined by" ) )
);
}

public static class Foo {
@Size(max = 2)
@ComposingConstraint
private String value = "123";
}

@NotNull
@Size(max = 2)
@ReportAsSingleViolation
@Target({ FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface ComposingConstraint {
String message() default "";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}
}
10 changes: 9 additions & 1 deletion engine/src/test/resources/log4j2.properties
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,12 @@ logger.parametermessageinterpolator.appenderRef.list.ref = List

logger.constraintvalidatorcontextimpl.name = org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl
logger.constraintvalidatorcontextimpl.level = info
logger.constraintvalidatorcontextimpl.appenderRef.list.ref = List
logger.constraintvalidatorcontextimpl.appenderRef.list.ref = List

logger.simpleconstrainttree.name = org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree
logger.simpleconstrainttree.level = trace
logger.simpleconstrainttree.appenderRef.list.ref = List

logger.composingconstrainttree.name = org.hibernate.validator.internal.engine.constraintvalidation.ComposingConstraintTree
logger.composingconstrainttree.level = trace
logger.composingconstrainttree.appenderRef.list.ref = List

0 comments on commit 11c6910

Please sign in to comment.