Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit f5ae4750 authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

update oracle patch sql script from 4.0.0 to 4.1.0

add new unit and integration tests
parent fc354c4e
No related branches found
No related tags found
No related merge requests found
......@@ -43,10 +43,6 @@ public abstract class BaseDao<E extends BaseEntity> {
em.detach(entity);
}
public void merge(E entity) {
em.merge(entity);
}
public void remove(E entity) {
em.remove(entity);
}
......
......@@ -87,13 +87,8 @@ public class ServiceGroupService {
public boolean saveServiceGroup(ServiceGroup serviceGroup, String domain, String serviceGroupOwner, String authenticatedUser) {
ServiceGroup normalizedServiceGroup = normalizeIdentifierCaseSensitivity(serviceGroup);
ParticipantIdentifierType normalizedParticipantId = normalizedServiceGroup.getParticipantIdentifier();
String newOwnerName;
try {
newOwnerName = isNotBlank(serviceGroupOwner) ? decode(serviceGroupOwner, UTF_8) : authenticatedUser;
} catch (UnsupportedEncodingException | IllegalArgumentException ex) {
throw new InvalidOwnerException(serviceGroupOwner, "Unsupported or invalid encoding: " + ex.getMessage());
}
String newOwnerName = defineGroupOwner(serviceGroupOwner, authenticatedUser);
DBUser newOwner = userDao.find(newOwnerName);
if (newOwner == null) {
......@@ -108,15 +103,8 @@ public class ServiceGroupService {
if (dbServiceGroup != null) {
// test service owner
Set<DBOwnership> owSet = dbServiceGroup.getOwnerships();
Optional<DBOwnership> owner = owSet.stream().filter(dbOwnership -> dbOwnership.getUser().getUsername().equals(newOwnerName)).findFirst();
// test serviceGroupOwner but use newOwnerName - because it is decoded
if (serviceGroupOwner!=null && !owner.isPresent()){
String msg = "User: " +newOwnerName+ " is not owner of service group: " +dbServiceGroup.getId().getBusinessIdentifierScheme() + "::" + dbServiceGroup.getId().getBusinessIdentifier();
LOG.error(msg);
throw new InvalidOwnerException(serviceGroupOwner, msg);
}
validateOwnership(newOwnerName, dbServiceGroup);
//update extensions
dbServiceGroup.setExtension(extensions);
serviceGroupDao.persistFlushDetach(dbServiceGroup);
return false;
......@@ -139,6 +127,27 @@ public class ServiceGroupService {
}
}
protected String defineGroupOwner(String serviceGroupOwner, String authenticatedUser){
try {
return isNotBlank(serviceGroupOwner) ? decode(serviceGroupOwner, UTF_8) : authenticatedUser;
} catch (UnsupportedEncodingException | IllegalArgumentException ex) {
LOG.error("Error occurred while decoding serviceGroupOwner '" + serviceGroupOwner+"'", ex);
throw new InvalidOwnerException(serviceGroupOwner, "Unsupported or invalid encoding: " + ex.getMessage());
}
}
protected void validateOwnership(String newOwnerName, DBServiceGroup dbServiceGroup){
Set<DBOwnership> owSet = dbServiceGroup.getOwnerships();
Optional<DBOwnership> owner = owSet.stream().filter(dbOwnership -> dbOwnership.getUser().getUsername().equals(newOwnerName)).findFirst();
// test serviceGroupOwner but use newOwnerName - because it is decoded
if (newOwnerName!=null && !owner.isPresent()){
String msg = "User: " +newOwnerName+ " is not owner of service group: " +dbServiceGroup.getId().getBusinessIdentifierScheme() + "::" + dbServiceGroup.getId().getBusinessIdentifier();
LOG.error(msg);
throw new InvalidOwnerException(newOwnerName, msg);
}
}
private DBDomain findDomain(String domain) {
if (isNotBlank(domain)) {
DBDomain dbDomain = domainDao.find(domain);
......
......@@ -13,9 +13,8 @@
package eu.europa.ec.edelivery.smp.services;
import eu.europa.ec.edelivery.smp.data.model.DBOwnership;
import eu.europa.ec.edelivery.smp.data.model.DBOwnershipId;
import eu.europa.ec.edelivery.smp.data.model.DBServiceGroup;
import eu.europa.ec.edelivery.smp.data.model.*;
import eu.europa.ec.edelivery.smp.exceptions.InvalidOwnerException;
import eu.europa.ec.edelivery.smp.exceptions.NotFoundException;
import eu.europa.ec.edelivery.smp.exceptions.UnknownUserException;
......@@ -31,6 +30,7 @@ import org.springframework.test.context.jdbc.Sql;
import javax.xml.bind.JAXBException;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Matcher;
......@@ -40,6 +40,7 @@ import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocumentAsStr
import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.marshall;
import static eu.europa.ec.smp.api.Identifiers.asParticipantId;
import static java.util.Arrays.asList;
import static org.junit.Assert.*;
import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
......@@ -120,6 +121,72 @@ public class ServiceGroupServiceSingleDomainIntegrationTest extends AbstractServ
assertEquals(marshall(newServiceGroup), marshall(resultServiceGroup));
}
@Test
public void defineGroupOwnerWhenOwnerIsNull(){
String testUser = "user";
String result = serviceGroupService.defineGroupOwner(null, testUser);
assertEquals(testUser, result);
result = serviceGroupService.defineGroupOwner("", testUser);
assertEquals(testUser, result);
}
@Test
public void defineGroupOwnerWhenOwnerIsNotNull(){
String testUser = "user";
String testOwner = "owner";
String result = serviceGroupService.defineGroupOwner(testOwner, testUser);
assertEquals(testOwner, result);
}
@Test
public void validateOwnershipHasRightOwner(){
String testOwner = "owner";
DBServiceGroup dbServiceGroup = new DBServiceGroup(new DBServiceGroupId("",""));
DBUser duser = new DBUser();
duser.setUsername(testOwner);
DBOwnershipId dbOwnershipID = new DBOwnershipId(testOwner, "", "");
DBOwnership dbOwnership = new DBOwnership();
dbOwnership.setId(dbOwnershipID);
dbOwnership.setUser(duser);
DBUser user0 = new DBUser();
user0.setUsername("otherOwner");
DBOwnershipId dbOwnershipID0 = new DBOwnershipId("otherOwner", "", "");
DBOwnership dbOwnership0 = new DBOwnership();
dbOwnership0.setId(dbOwnershipID0);
dbOwnership0.setUser(user0);
dbServiceGroup.setOwnerships(new HashSet(asList(dbOwnership0, dbOwnership)));
serviceGroupService.validateOwnership(testOwner, dbServiceGroup);
}
@Test
public void validateOwnershipHasInvalidOwner(){
String testOwner = "owner";
DBServiceGroup dbServiceGroup = new DBServiceGroup(new DBServiceGroupId("",""));
expectedExeption.expect(InvalidOwnerException.class);
expectedExeption.expectMessage("User: " +testOwner+ " is not owner of service group: ");
DBUser duser = new DBUser();
duser.setUsername("otherOwner");
DBOwnershipId dbOwnershipID0 = new DBOwnershipId("otherOwner", "", "");
DBOwnership dbOwnership0 = new DBOwnership();
dbOwnership0.setId(dbOwnershipID0);
dbOwnership0.setUser(duser);
dbServiceGroup.setOwnerships(new HashSet(asList(dbOwnership0)));
serviceGroupService.validateOwnership(testOwner, dbServiceGroup);
}
@Test
public void updateUnknownUserException() throws IOException, JAXBException {
......
......@@ -18,7 +18,7 @@ CREATE TABLE smp_domain_AUD (
signatureCertAlias VARCHAR(50),
REV INTEGER NOT NULL,
REVTYPE NUMBER(3),
CONSTRAINT PK_SMP_DOMAIN_AUD PRIMARY KEY(domainId)
CONSTRAINT PK_SMP_DOMAIN_AUD PRIMARY KEY(domainId, REV)
);
CREATE TABLE smp_service_group_AUD (
......@@ -28,7 +28,7 @@ CREATE TABLE smp_service_group_AUD (
domainId VARCHAR(50),
REV INTEGER NOT NULL,
REVTYPE NUMBER(3),
CONSTRAINT PK_SMP_GRP_AUD PRIMARY KEY (businessIdentifier, businessIdentifierScheme)
CONSTRAINT PK_SMP_GRP_AUD PRIMARY KEY (businessIdentifier, businessIdentifierScheme, REV)
);
CREATE TABLE smp_service_metadata_AUD (
......@@ -43,16 +43,16 @@ CREATE TABLE smp_service_metadata_AUD (
documentIdentifierScheme,
businessIdentifier,
businessIdentifierScheme,
documentIdentifier)
documentIdentifier, REV)
);
CREATE TABLE smp_user_AUD (
username VARCHAR(256),
password VARCHAR(256),
isadmin NUMBER(1) DEFAULT 0,
REV INTEGER NOT NULL,
REVTYPE NUMBER(3),
CONSTRAINT PK_SMP_USER_AUD PRIMARY KEY (username)
CONSTRAINT PK_SMP_USER_AUD PRIMARY KEY (username, REV)
);
CREATE TABLE smp_ownership_AUD (
......@@ -61,7 +61,7 @@ CREATE TABLE smp_ownership_AUD (
businessIdentifierScheme VARCHAR(100),
REV INTEGER NOT NULL,
REVTYPE NUMBER(3),
CONSTRAINT PK_OWNERSHIP_AUD PRIMARY KEY (username, businessIdentifier, businessIdentifierScheme)
CONSTRAINT PK_OWNERSHIP_AUD PRIMARY KEY (username, businessIdentifier, businessIdentifierScheme, REV)
);
......
......@@ -131,7 +131,7 @@ CREATE TABLE smp_ownership_AUD (
CREATE TABLE SMP_REV_INFO (
ID NUMBER(38, 0) NOT NULL,
ID NUMBER(38, 0) NOT NULL,
TIMESTAMP NUMBER(38, 0),
REVISION_DATE TIMESTAMP,
username VARCHAR2(255),
......
package eu.europa.ec.edelivery.smp.error;
import ec.services.smp._1.ErrorResponse;
import eu.europa.ec.edelivery.smp.error.exceptions.BadRequestException;
import eu.europa.ec.edelivery.smp.exceptions.NotFoundException;
import eu.europa.ec.edelivery.smp.exceptions.UnknownUserException;
import eu.europa.ec.edelivery.smp.exceptions.WrongInputFieldException;
import eu.europa.ec.edelivery.smp.exceptions.XmlParsingException;
import eu.europa.ec.smp.api.exceptions.MalformedIdentifierException;
import eu.europa.ec.smp.api.exceptions.XmlInvalidAgainstSchemaException;
import org.junit.Test;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.core.AuthenticationException;
import static org.junit.Assert.*;
import static org.springframework.http.HttpStatus.*;
public class ErrorMappingControllerAdviceTest {
ErrorMappingControllerAdvice testIntance = new ErrorMappingControllerAdvice();
@Test
public void handleRuntimeException() {
ResponseEntity re = testIntance.handleRuntimeException(new RuntimeException("RuntimeExceptionMessage"));
assertEquals(INTERNAL_SERVER_ERROR, re.getStatusCode());
assertEquals(ErrorBusinessCode.TECHNICAL, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleBadRequestException() {
ResponseEntity re = testIntance.handleBadRequestException(new BadRequestException(ErrorBusinessCode.WRONG_FIELD, "BadRequestExceptionMessage"));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.WRONG_FIELD, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleMalformedIdentifierException() {
ResponseEntity re = testIntance.handleMalformedIdentifierException(new MalformedIdentifierException("MalformedIdentifierExceptionMessage", null));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.FORMAT_ERROR, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleWrongInputFieldException() {
ResponseEntity re = testIntance.handleWrongInputFieldException(new WrongInputFieldException("WrongInputFieldExceptionMessage"));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.WRONG_FIELD, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleNotFoundException() {
ResponseEntity re = testIntance.handleNotFoundException(new NotFoundException("NotFoundExceptionMessage"));
assertEquals(NOT_FOUND, re.getStatusCode());
assertEquals(ErrorBusinessCode.NOT_FOUND, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleAuthenticationException() {
ResponseEntity re = testIntance.handleAuthenticationException(new AuthenticationException("AuthenticationException") {
@Override
public String getMessage() {
return super.getMessage();
}
});
assertEquals(UNAUTHORIZED, re.getStatusCode());
assertEquals(ErrorBusinessCode.UNAUTHORIZED, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleAccessDeniedException() {
ResponseEntity re = testIntance.handleAccessDeniedException(new AccessDeniedException("AccessDeniedExceptionMessage"));
assertEquals(UNAUTHORIZED, re.getStatusCode());
assertEquals(ErrorBusinessCode.UNAUTHORIZED, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleUnknownUserException() {
ResponseEntity re = testIntance.handleUnknownUserException(new UnknownUserException("UnknownUserExceptionMessage"));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.USER_NOT_FOUND, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleInvalidOwnerException() {
ResponseEntity re = testIntance.handleUnknownUserException(new UnknownUserException("UnknownUserExceptionMessage"));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.UNAUTHORIZED, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleXmlParsingException() {
ResponseEntity re = testIntance.handleXmlParsingException(new XmlParsingException(null));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.XSD_INVALID, ((ErrorResponse)re.getBody()).getBusinessCode());
}
@Test
public void handleXmlInvalidAgainstSchemaException() {
ResponseEntity re = testIntance.handleXmlInvalidAgainstSchemaException(
new XmlInvalidAgainstSchemaException("XmlInvalidAgainstSchemaExceptionMessage", null));
assertEquals(BAD_REQUEST, re.getStatusCode());
assertEquals(ErrorBusinessCode.XSD_INVALID, ((ErrorResponse)re.getBody()).getBusinessCode());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment