Skip to content

Commit

Permalink
[SHIBUI-522]
Browse files Browse the repository at this point in the history
Fixes related to Attribute hashCode not being equal.
  • Loading branch information
Bill Smith committed Jun 4, 2018
1 parent 4b03b1b commit 0ffb855
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

import lombok.EqualsAndHashCode;
import org.opensaml.core.xml.AttributeExtensibleXMLObject;
import org.opensaml.core.xml.util.AttributeMap;

Expand All @@ -8,6 +9,7 @@
import javax.persistence.Transient;

@MappedSuperclass
@EqualsAndHashCode(callSuper = true, exclude={"unknownAttributes"})
public abstract class AbstractAttributeExtensibleXMLObject extends AbstractXMLObject implements AttributeExtensibleXMLObject {

private transient final AttributeMap unknownAttributes;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

import lombok.EqualsAndHashCode;
import net.shibboleth.utilities.java.support.collection.LockableClassToInstanceMultiMap;
import net.shibboleth.utilities.java.support.xml.QNameSupport;
import org.opensaml.core.xml.Namespace;
Expand All @@ -25,6 +26,7 @@
*/
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@EqualsAndHashCode(callSuper = true)
public abstract class AbstractXMLObject extends AbstractAuditable implements XMLObject {

private String namespaceURI;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import javax.persistence.Transient;

@Entity
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode(callSuper = true, exclude = {"unknownAttributes"})
public class XSAny extends AbstractElementExtensibleXMLObject implements org.opensaml.core.xml.schema.XSAny {

private String textContext;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
import org.springframework.data.repository.CrudRepository;

public interface FilterRepository extends CrudRepository<MetadataFilter, Long> {
MetadataFilter findByResourceId(String resourceId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package edu.internet2.tier.shibboleth.admin.ui.repository

import com.fasterxml.jackson.databind.ObjectMapper
import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.domain.EntityScan
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
import org.springframework.test.annotation.DirtiesContext
import org.springframework.test.context.ContextConfiguration
import spock.lang.Specification

import javax.persistence.EntityManager

@DataJpaTest
@ContextConfiguration(classes=[CoreShibUiConfiguration, SearchConfiguration, MetadataResolverConfiguration])
@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"])
@EntityScan("edu.internet2.tier.shibboleth.admin.ui")
@DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
class FilterRepositoryTests extends Specification {

@Autowired
FilterRepository repositoryUnderTest

@Autowired
EntityManager entityManager

def "EntityAttributesFilter hashcode works as desired"() {
given:
def entityAttributesFilterJson = '''{
"name": "EntityAttributes",
"resourceId": "29a5d409-562a-41cd-acee-e9b3d7098d05",
"filterEnabled": false,
"entityAttributesFilterTarget": {
"entityAttributesFilterTargetType": "CONDITION_SCRIPT",
"value": [
"TwUuSOz5O6"
]
},
"attributeRelease": [
"WbkhLQNI3m"
],
"relyingPartyOverrides": {
"signAssertion": true,
"dontSignResponse": true,
"turnOffEncryption": true,
"useSha": true,
"ignoreAuthenticationMethod": false,
"omitNotBefore": true,
"responderId": null,
"nameIdFormats": [
"xLenUFmCLn"
],
"authenticationMethods": []
},
"@type": "EntityAttributes"
}'''

when:
def filter = new ObjectMapper().readValue(entityAttributesFilterJson.bytes, EntityAttributesFilter)
def persistedFilter = repositoryUnderTest.save(filter)
entityManager.flush()

then:
def item1 = repositoryUnderTest.findByResourceId(persistedFilter.resourceId)
entityManager.clear()
def item2 = repositoryUnderTest.findByResourceId(persistedFilter.resourceId)

item1.hashCode() == item2.hashCode()
}
}

0 comments on commit 0ffb855

Please sign in to comment.