package org.ovirt.engine.core.common.validation; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import javax.validation.ConstraintValidatorContext; import javax.validation.ConstraintValidatorContext.ConstraintViolationBuilder; import javax.validation.ConstraintValidatorContext.ConstraintViolationBuilder.NodeBuilderDefinedContext; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.common.errors.EngineMessage; @RunWith(MockitoJUnitRunner.class) public class MaskConstraintTest { private static final String TEST_MASK = "TEST_MASK"; @Spy private MaskConstraint underTest; @Mock private MaskValidator mockMaskValidator; @Mock private ConstraintValidatorContext contextMock; @Mock private ConstraintViolationBuilder mockConstraintViolationBuilder; @Mock private NodeBuilderDefinedContext mockNodeBuilderDefinedContext; @Before public void setup() { doReturn(mockMaskValidator).when(underTest).getMaskValidator(); } @Test public void checkMaskFormatValidation() { runSetup(TEST_MASK, false, false, EngineMessage.UPDATE_NETWORK_ADDR_IN_SUBNET_BAD_FORMAT.name()); runVerify(TEST_MASK, EngineMessage.UPDATE_NETWORK_ADDR_IN_SUBNET_BAD_FORMAT.name()); } @Test public void checkMaskNetworkAddressValidation() { runSetup(TEST_MASK, true, false, EngineMessage.UPDATE_NETWORK_ADDR_IN_SUBNET_BAD_VALUE.name()); runVerify(TEST_MASK, EngineMessage.UPDATE_NETWORK_ADDR_IN_SUBNET_BAD_VALUE.name()); } @Test public void checkValidMask() { runSetup(TEST_MASK, true, true, ""); assertTrue(underTest.isValid(TEST_MASK, contextMock)); verifyZeroInteractions(contextMock); } private void runSetup(String testMask, boolean isValidFormat, boolean isMaskValidValue, String errorMessage) { when(mockMaskValidator.isValidNetmaskFormat(testMask)).thenReturn(isValidFormat); when(mockMaskValidator.isPrefixValid(testMask)).thenReturn(isMaskValidValue); when(contextMock.buildConstraintViolationWithTemplate(errorMessage)).thenReturn(mockConstraintViolationBuilder); when(mockConstraintViolationBuilder.addNode(anyString())).thenReturn(mockNodeBuilderDefinedContext); } private void runVerify(String testMask, String errorMessage) { assertFalse(underTest.isValid(testMask, contextMock)); verify(contextMock).disableDefaultConstraintViolation(); verify(contextMock).buildConstraintViolationWithTemplate(errorMessage); verify(mockConstraintViolationBuilder).addNode("mask"); verify(mockNodeBuilderDefinedContext).addConstraintViolation(); } }