Skip to content

Commit

Permalink
SHIBUI-1262 [1307 WIP]
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed May 28, 2019
1 parent b3c4b1f commit c69d412
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocati
*
* @author Dmitriy Kopylenko
*/
@ControllerAdvice
//@ControllerAdvice
class RelyingPartyOverridesJsonSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter {

@Autowired
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import lombok.EqualsAndHashCode;
import net.shibboleth.utilities.java.support.collection.LockableClassToInstanceMultiMap;
import net.shibboleth.utilities.java.support.xml.QNameSupport;
import org.hibernate.envers.AuditOverride;
import org.hibernate.envers.Audited;
import org.opensaml.core.config.ConfigurationService;
import org.opensaml.core.xml.Namespace;
Expand Down Expand Up @@ -32,6 +33,7 @@
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@EqualsAndHashCode(callSuper = true)
@Audited
@AuditOverride(forClass = AbstractAuditable.class)
public abstract class AbstractXMLObject extends AbstractAuditable implements XMLObject {

private String namespaceURI;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

import lombok.EqualsAndHashCode;
import org.hibernate.envers.Audited;
import org.hibernate.envers.NotAudited;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.saml.saml2.metadata.ContactPersonTypeEnumeration;

Expand All @@ -12,20 +14,24 @@

@Entity
@EqualsAndHashCode(callSuper = true)
@Audited
public class ContactPerson extends AbstractAttributeExtensibleXMLObject implements org.opensaml.saml.saml2.metadata.ContactPerson {

private String contactPersonType;

@OneToOne(cascade = CascadeType.ALL)
@NotAudited
private Extensions extensions;

@OneToOne(cascade = CascadeType.ALL)
@NotAudited
private Company company;

@OneToOne(cascade = CascadeType.ALL)
private GivenName givenName;

@OneToOne(cascade = CascadeType.ALL)
@NotAudited
private SurName surName;

@OneToMany(cascade = CascadeType.ALL)
Expand All @@ -36,6 +42,7 @@ public class ContactPerson extends AbstractAttributeExtensibleXMLObject implemen
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "contactpersn_telenmbr_id")
@OrderColumn
@NotAudited
private List<TelephoneNumber> telephoneNumbers = new ArrayList<>();

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

import lombok.EqualsAndHashCode;
import org.hibernate.envers.AuditOverride;
import org.hibernate.envers.Audited;

import javax.persistence.Entity;

@Entity
@EqualsAndHashCode(callSuper = true)
@Audited
public class EmailAddress extends AbstractXMLObject implements org.opensaml.saml.saml2.metadata.EmailAddress {

private String address;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
@Entity
@EqualsAndHashCode(callSuper = true)
@Audited
@AuditOverride(forClass = AbstractAuditable.class)
public class EntityDescriptor extends AbstractDescriptor implements org.opensaml.saml.saml2.metadata.EntityDescriptor {
private String localId;

Expand All @@ -55,7 +54,6 @@ public class EntityDescriptor extends AbstractDescriptor implements org.opensaml

@OneToMany(cascade = CascadeType.ALL)
@OrderColumn
@NotAudited
private List<ContactPerson> contactPersons = new ArrayList<>();

@OneToMany(cascade = CascadeType.ALL)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package edu.internet2.tier.shibboleth.admin.ui.domain;

import lombok.EqualsAndHashCode;
import org.hibernate.envers.AuditOverride;
import org.hibernate.envers.Audited;

import javax.persistence.Entity;

@Entity
@EqualsAndHashCode(callSuper = true)
@Audited
public class GivenName extends AbstractXMLObject implements org.opensaml.saml.saml2.metadata.GivenName {

private String name;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package edu.internet2.tier.shibboleth.admin.ui.repository.envers

import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration
import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration
import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository
import org.hibernate.envers.AuditReaderFactory
import org.hibernate.envers.query.AuditQuery
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.context.ContextConfiguration
import org.springframework.transaction.PlatformTransactionManager
import spock.lang.Specification

import javax.persistence.EntityManager

import static edu.internet2.tier.shibboleth.admin.ui.domain.util.entitydescriptors.EntityDescriptors.prebakedEntityDescriptor
import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.doInExplicitTransaction

/**
* Testing entity descriptor envers versioning
*/
@DataJpaTest
@ContextConfiguration(classes = [CoreShibUiConfiguration, InternationalizationConfiguration, TestConfiguration, SearchConfiguration])
@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"])
@EntityScan("edu.internet2.tier.shibboleth.admin.ui")
class EntityDescriptorEnversVersioningTests extends Specification {

@Autowired
EntityDescriptorRepository entityDescriptorRepository

@Autowired
EntityManager entityManager

@Autowired
PlatformTransactionManager txMgr

@Autowired
OpenSamlObjects openSamlObjects

def "test versioning with contact persons"() {
when:
EntityDescriptor ed = doInExplicitTransaction(txMgr) {
entityDescriptorRepository.save(prebakedEntityDescriptor(openSamlObjects))
}
def entityDescriptorHistory = resolverHistory()

then:
entityDescriptorHistory.size() == 1
}

private resolverHistory() {
def auditReader = AuditReaderFactory.get(entityManager)
AuditQuery auditQuery = auditReader
.createQuery()
.forRevisionsOfEntity(EntityDescriptor, false, false)
auditQuery.resultList

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package edu.internet2.tier.shibboleth.admin.ui.repository.envers

import org.springframework.transaction.PlatformTransactionManager
import org.springframework.transaction.support.DefaultTransactionDefinition

import static org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRES_NEW

class EnversTestsSupport {

//This explicit low level transaction dance is required in order to verify history/version data that envers
//writes out only after the explicit transaction is committed, therefore making it impossible to verify within the main tx
//boundary of the test method which commits tx only after an execution of the test method. This let's us explicitly
//start/commit transaction making envers data written out and verifiable
static doInExplicitTransaction(PlatformTransactionManager txMgr, Closure uow) {
def txStatus = txMgr.getTransaction(new DefaultTransactionDefinition(PROPAGATION_REQUIRES_NEW))
def entity = uow()
txMgr.commit(txStatus)
entity
}
}

0 comments on commit c69d412

Please sign in to comment.