diff options
author | Ittay Stern <ittay.stern@att.com> | 2019-03-06 14:25:02 +0200 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2019-03-06 17:54:56 +0200 |
commit | 54aad7deb7a02ecca4bc7ed4d7913ccd59eb3bf9 (patch) | |
tree | 84250549f1d7e91234a41960866098d5d147ebbf /vid-app-common/src | |
parent | 7c64fbbaff5985acb3a6aea977c5c15b4f2f59e1 (diff) |
Fix cyclic CategoryParameterOption::hashCode
Issue-ID: VID-430
Change-Id: Ib49b71726fe508f1ec9bfe8c60836af1c5ca786b
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-app-common/src')
4 files changed, 108 insertions, 352 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameterOption.java b/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameterOption.java index 237747933..70f7b5aa2 100644 --- a/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameterOption.java +++ b/vid-app-common/src/main/java/org/onap/vid/model/CategoryParameterOption.java @@ -20,12 +20,19 @@ package org.onap.vid.model; -import org.onap.portalsdk.core.domain.support.DomainVo; - -import javax.persistence.*; import java.io.Serializable; import java.util.Date; import java.util.Set; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.Transient; +import org.onap.portalsdk.core.domain.support.DomainVo; @Entity @Table(name = "vid_category_parameter_option") @@ -124,24 +131,39 @@ public class CategoryParameterOption extends DomainVo { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } CategoryParameterOption that = (CategoryParameterOption) o; - if (getAppId() != null ? !getAppId().equals(that.getAppId()) : that.getAppId() != null) return false; - if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) return false; - return getCategoryParameter() != null ? getCategoryParameter().equals(that.getCategoryParameter()) : that.getCategoryParameter() == null; + if (getAppId() != null ? !getAppId().equals(that.getAppId()) : that.getAppId() != null) { + return false; + } + if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) { + return false; + } + return getCategoryParameter() != null ? getCategoryParameter().equals(that.getCategoryParameter()) + : that.getCategoryParameter() == null; } @Override public int hashCode() { int result = getAppId() != null ? getAppId().hashCode() : 0; result = 31 * result + (getName() != null ? getName().hashCode() : 0); - result = 31 * result + (getCategoryParameter() != null ? getCategoryParameter().hashCode() : 0); + result = 31 * result + hashCodeOfParentCategoryParameter(); return result; } + private int hashCodeOfParentCategoryParameter() { + // Don't use getCategoryParameter's hashCode, as it might loop back to self's hasCode + return (getCategoryParameter() == null || getCategoryParameter().getId() == null) + ? 0 : getCategoryParameter().getId().hashCode(); + } + @Override public String toString() { return "CategoryParameterOption{" + diff --git a/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterOptionTest.java b/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterOptionTest.java index 5fe392751..a3a14a2dd 100644 --- a/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterOptionTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterOptionTest.java @@ -20,190 +20,34 @@ package org.onap.vid.model; -import java.io.Serializable; -import java.util.Date; -import java.util.Set; +import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEqualsExcluding; +import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCodeExcluding; +import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters; +import static org.hamcrest.MatcherAssert.assertThat; -import org.junit.Assert; +import org.apache.commons.lang3.ArrayUtils; import org.junit.Test; +import org.onap.portalsdk.core.domain.support.DomainVo; +import org.onap.vid.testUtils.TestUtils; public class CategoryParameterOptionTest { - private CategoryParameterOption createTestSubject() { - return new CategoryParameterOption(); - } - - @Test - public void testGetId() throws Exception { - CategoryParameterOption testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getId(); - } - - @Test - public void testSetId() throws Exception { - CategoryParameterOption testSubject; - Long id = null; - - // default test - testSubject = createTestSubject(); - testSubject.setId(id); - } - - @Test - public void testGetAppId() throws Exception { - CategoryParameterOption testSubject; - String result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getAppId(); - } - - @Test - public void testSetAppId() throws Exception { - CategoryParameterOption testSubject; - String appId = ""; - - // default test - testSubject = createTestSubject(); - testSubject.setAppId(appId); - } - - @Test - public void testGetName() throws Exception { - CategoryParameterOption testSubject; - String result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getName(); - } - - @Test - public void testSetName() throws Exception { - CategoryParameterOption testSubject; - String name = ""; - - // default test - testSubject = createTestSubject(); - testSubject.setName(name); - } - - @Test - public void testGetCategoryParameter() throws Exception { - CategoryParameterOption testSubject; - CategoryParameter result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getCategoryParameter(); - } - - @Test - public void testSetCategoryParameter() throws Exception { - CategoryParameterOption testSubject; - CategoryParameter categoryParameter = null; - - // default test - testSubject = createTestSubject(); - testSubject.setCategoryParameter(categoryParameter); - } - - @Test - public void testGetCreated() throws Exception { - CategoryParameterOption testSubject; - Date result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getCreated(); - } - - @Test - public void testGetModified() throws Exception { - CategoryParameterOption testSubject; - Date result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getModified(); - } - - @Test - public void testGetCreatedId() throws Exception { - CategoryParameterOption testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getCreatedId(); - } + final private String[] excludedProperties = TestUtils.allPropertiesOf(DomainVo.class); @Test - public void testGetModifiedId() throws Exception { - CategoryParameterOption testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getModifiedId(); - } - - @Test - public void testGetAuditUserId() throws Exception { - CategoryParameterOption testSubject; - Serializable result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getAuditUserId(); + public void shouldHaveValidGettersAndSetters() { + assertThat(CategoryParameterOption.class, hasValidGettersAndSetters()); } @Test - public void testGetRowNum() throws Exception { - CategoryParameterOption testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getRowNum(); + public void shouldHaveValidBeanHashCode() { + assertThat(CategoryParameterOption.class, + hasValidBeanHashCodeExcluding(ArrayUtils.addAll(new String[]{"categoryParameter"}, excludedProperties))); } @Test - public void testGetAuditTrail() throws Exception { - CategoryParameterOption testSubject; - Set result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getAuditTrail(); - } - - @Test - public void testEquals() throws Exception { - CategoryParameterOption testSubject; - Object o = null; - boolean result; - - // test 1 - testSubject = createTestSubject(); - o = null; - result = testSubject.equals(o); - Assert.assertEquals(false, result); - } - - @Test - public void testHashCode() throws Exception { - CategoryParameterOption testSubject; - int result; - - // default test - testSubject = createTestSubject(); - result = testSubject.hashCode(); + public void shouldHaveValidBeanEquals() { + assertThat(CategoryParameterOption.class, hasValidBeanEqualsExcluding(excludedProperties)); } } diff --git a/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterTest.java b/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterTest.java index dc18c3065..c515a34d4 100644 --- a/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/model/CategoryParameterTest.java @@ -20,186 +20,64 @@ package org.onap.vid.model; -import java.io.Serializable; -import java.util.Date; +import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEqualsExcluding; +import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCodeExcluding; +import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSettersExcluding; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.onap.vid.testUtils.TestUtils.allPropertiesOf; + +import com.google.common.collect.ImmutableSet; import java.util.Set; - +import org.apache.commons.lang3.ArrayUtils; import org.junit.Test; +import org.onap.portalsdk.core.domain.support.DomainVo; public class CategoryParameterTest { - private CategoryParameter createTestSubject() { - return new CategoryParameter(); - } - - @Test - public void testGetFamily() throws Exception { - CategoryParameter testSubject; - String result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getFamily(); - } - - @Test - public void testSetFamily() throws Exception { - CategoryParameter testSubject; - String family = ""; - - // default test - testSubject = createTestSubject(); - testSubject.setFamily(family); - } - - @Test - public void testGetId() throws Exception { - CategoryParameter testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getId(); - } - - @Test - public void testGetCreated() throws Exception { - CategoryParameter testSubject; - Date result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getCreated(); - } - - @Test - public void testGetModified() throws Exception { - CategoryParameter testSubject; - Date result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getModified(); - } - - @Test - public void testGetCreatedId() throws Exception { - CategoryParameter testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getCreatedId(); - } - - @Test - public void testGetModifiedId() throws Exception { - CategoryParameter testSubject; - Long result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getModifiedId(); - } - - @Test - public void testGetName() throws Exception { - CategoryParameter testSubject; - String result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getName(); - } - @Test - public void testSetName() throws Exception { - CategoryParameter testSubject; - String name = ""; + final private String[] excludedProperties = allPropertiesOf(DomainVo.class); - // default test - testSubject = createTestSubject(); - testSubject.setName(name); + private ImmutableSet<CategoryParameterOption> optionsWithRefTo(CategoryParameter categoryParameter) { + return ImmutableSet.of( + new CategoryParameterOption("appId1", "name1", categoryParameter), + new CategoryParameterOption("appId2", "name2", categoryParameter) + ); } @Test - public void testGetAuditUserId() throws Exception { - CategoryParameter testSubject; - Serializable result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getAuditUserId(); + public void shouldHaveValidGettersAndSetters() { + assertThat(CategoryParameter.class, hasValidGettersAndSettersExcluding("options")); } @Test - public void testGetRowNum() throws Exception { - CategoryParameter testSubject; - Long result; + public void testSetAndGetOptions() { + CategoryParameter testSubject = new CategoryParameter(); - // default test - testSubject = createTestSubject(); - result = testSubject.getRowNum(); - } - - @Test - public void testGetAuditTrail() throws Exception { - CategoryParameter testSubject; - Set result; + Set<CategoryParameterOption> options = optionsWithRefTo(testSubject); - // default test - testSubject = createTestSubject(); - result = testSubject.getAuditTrail(); + testSubject.setOptions(options); + assertThat(testSubject.getOptions(), containsInAnyOrder(optionsWithRefTo(testSubject).toArray())); } @Test - public void testGetOptions() throws Exception { - CategoryParameter testSubject; - Set<CategoryParameterOption> result; - - // default test - testSubject = createTestSubject(); - result = testSubject.getOptions(); + public void shouldHaveValidBeanHashCodeWithCycleReference() { + assertThat(CategoryParameter.class, + hasValidBeanHashCodeExcluding(ArrayUtils.addAll(new String[]{"options"}, excludedProperties))); } @Test - public void testSetOptions() throws Exception { - CategoryParameter testSubject; - Set<CategoryParameterOption> options = null; - - // default test - testSubject = createTestSubject(); + public void hashCodeShouldNotExplodeWhenCycleReference() { + CategoryParameter testSubject = new CategoryParameter(); + Set<CategoryParameterOption> options = optionsWithRefTo(testSubject); testSubject.setOptions(options); - } - @Test - public void testAddOption() throws Exception { - CategoryParameter testSubject; - CategoryParameterOption option = null; - boolean result; - - // default test - testSubject = createTestSubject(); - result = testSubject.addOption(option); + testSubject.hashCode(); // don't stackOverflow } @Test - public void testIsIdSupported() throws Exception { - CategoryParameter testSubject; - boolean result; - - // default test - testSubject = createTestSubject(); - result = testSubject.isIdSupported(); + public void shouldHaveValidBeanEquals() { + assertThat(CategoryParameter.class, hasValidBeanEqualsExcluding(excludedProperties)); } - @Test - public void testSetIdSupported() throws Exception { - CategoryParameter testSubject; - boolean idSupported = false; - - // default test - testSubject = createTestSubject(); - testSubject.setIdSupported(idSupported); - } } diff --git a/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java b/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java index e2effd5ca..3a7d4690d 100644 --- a/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java +++ b/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java @@ -20,9 +20,32 @@ package org.onap.vid.testUtils; +import static org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.RETURNS_DEFAULTS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; +import static org.testng.Assert.fail; + import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; +import java.beans.PropertyDescriptor; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; +import java.net.URI; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.json.JSONArray; @@ -32,28 +55,11 @@ import org.mockito.MockSettings; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import org.onap.portalsdk.core.domain.support.DomainVo; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.asdc.beans.Service; import org.springframework.mock.env.MockEnvironment; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.Invocation; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.GenericType; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.net.URI; -import java.util.Iterator; -import java.util.List; - -import static fj.parser.Parser.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; - /** * Created by Oren on 6/7/17. */ @@ -125,6 +131,12 @@ public class TestUtils { valueType); } + public static String[] allPropertiesOf(Class<DomainVo> aClass) { + return Arrays.stream(getPropertyDescriptors(aClass)) + .map(PropertyDescriptor::getDisplayName) + .toArray(String[]::new); + } + public static class JavaxRsClientMocks { private final javax.ws.rs.client.Client fakeClient; |