Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 456023ef authored by Pawel GUTOWSKI's avatar Pawel GUTOWSKI
Browse files

EDELIVERY-1893 Added JUnit tests for multiple certificates and domains support

parent ad427724
No related branches found
No related tags found
No related merge requests found
Showing
with 166 additions and 46 deletions
......@@ -15,12 +15,9 @@ package eu.europa.ec.edelivery.smp.data.dao;
import eu.europa.ec.edelivery.smp.data.model.BaseEntity;
import org.springframework.core.GenericTypeResolver;
import org.springframework.transaction.interceptor.TransactionInterceptor;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.io.Serializable;
/**
* Created by gutowpa on 24/11/2017.
......
......@@ -72,7 +72,7 @@ public class DBUser implements BaseEntity {
@Override
@Transient
public String getId() {
return username;
return getUsername();
}
public void setId(String username){
......
......@@ -13,24 +13,27 @@
package eu.europa.ec.edelivery.smp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import java.util.HashMap;
import static eu.europa.ec.edelivery.smp.testutil.LocalPropertiesTestUtil.buildLocalProperties;
/**
* Created by gutowpa on 24/01/2018.
*/
@Configuration
@PropertySource("classpath:config.properties")
public class MultipleDomainPropertiesTestConfig extends AbstractPropertiesTestConfig {
public class PropertiesMultipleDomainTestConfig {
public MultipleDomainPropertiesTestConfig() {
@Bean
public PropertySourcesPlaceholderConfigurer setLocalProperties() {
String signingKeystorePath = Thread.currentThread().getContextClassLoader().getResource("service_integration_signatures_multiple_domains.jks").getFile();
overridenProperties = new HashMap<>();
overridenProperties.put("xmldsig.keystore.classpath", signingKeystorePath);
overridenProperties.put("xmldsig.keystore.password", "test123");
return buildLocalProperties(new String[][]{
{"xmldsig.keystore.classpath", signingKeystorePath},
{"xmldsig.keystore.password", "test123"}
});
}
}
......@@ -13,23 +13,26 @@
package eu.europa.ec.edelivery.smp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import java.util.HashMap;
import static eu.europa.ec.edelivery.smp.testutil.LocalPropertiesTestUtil.buildLocalProperties;
/**
* Created by gutowpa on 11/01/2018.
*/
@Configuration
@PropertySource("classpath:config.properties")
public class SingleDomainPropertiesTestConfig extends AbstractPropertiesTestConfig {
public class PropertiesSingleDomainTestConfig {
public SingleDomainPropertiesTestConfig() {
@Bean
public PropertySourcesPlaceholderConfigurer setLocalProperties() {
String signingKeystorePath = Thread.currentThread().getContextClassLoader().getResource("service_integration_signatures_single_domain.jks").getFile();
overridenProperties = new HashMap<>();
overridenProperties.put("xmldsig.keystore.classpath", signingKeystorePath);
overridenProperties.put("xmldsig.keystore.password", "test123");
return buildLocalProperties(new String[][]{
{"xmldsig.keystore.classpath", signingKeystorePath},
{"xmldsig.keystore.password", "test123"}
});
}
}
......@@ -13,7 +13,7 @@
package eu.europa.ec.edelivery.smp.services;
import eu.europa.ec.edelivery.smp.config.SingleDomainPropertiesTestConfig;
import eu.europa.ec.edelivery.smp.config.PropertiesSingleDomainTestConfig;
import eu.europa.ec.edelivery.smp.config.SmpServicesTestConfig;
import eu.europa.ec.edelivery.smp.data.dao.OwnershipDao;
import eu.europa.ec.edelivery.smp.data.dao.ServiceGroupDao;
......@@ -38,7 +38,7 @@ import static eu.europa.ec.smp.api.Identifiers.asParticipantId;
* Created by gutowpa on 27/03/2017.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SmpServicesTestConfig.class, SingleDomainPropertiesTestConfig.class})
@ContextConfiguration(classes = {SmpServicesTestConfig.class, PropertiesSingleDomainTestConfig.class})
@Transactional
@Rollback(true)
abstract class AbstractServiceGroupServiceIntegrationTest {
......
......@@ -13,7 +13,7 @@
package eu.europa.ec.edelivery.smp.services;
import eu.europa.ec.edelivery.smp.config.SingleDomainPropertiesTestConfig;
import eu.europa.ec.edelivery.smp.config.PropertiesSingleDomainTestConfig;
import eu.europa.ec.edelivery.smp.conversion.ServiceGroupConverter;
import eu.europa.ec.edelivery.smp.conversion.ServiceMetadataConverter;
import eu.europa.ec.edelivery.smp.data.dao.ServiceMetadataDao;
......@@ -51,7 +51,7 @@ import static org.junit.Assert.*;
* Created by gutowpa on 15/11/2017.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SmpServicesTestConfig.class, SingleDomainPropertiesTestConfig.class})
@ContextConfiguration(classes = {SmpServicesTestConfig.class, PropertiesSingleDomainTestConfig.class})
@Transactional
@Rollback(true)
@Sql("classpath:/service_integration_test_data.sql")
......
......@@ -13,7 +13,7 @@
package eu.europa.ec.edelivery.smp.services;
import eu.europa.ec.edelivery.smp.config.MultipleDomainPropertiesTestConfig;
import eu.europa.ec.edelivery.smp.config.PropertiesMultipleDomainTestConfig;
import eu.europa.ec.edelivery.smp.config.SmpServicesTestConfig;
import eu.europa.ec.edelivery.smp.testutil.SignatureUtil;
import org.junit.Test;
......@@ -31,7 +31,7 @@ import static org.junit.Assert.assertEquals;
* Created by gutowpa on 24/01/2018.
*/
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SmpServicesTestConfig.class, MultipleDomainPropertiesTestConfig.class})
@ContextConfiguration(classes = {SmpServicesTestConfig.class, PropertiesMultipleDomainTestConfig.class})
public class ServiceMetadataSignerMultipleDomainsIntegrationTest {
@Autowired
......
......@@ -13,7 +13,7 @@
package eu.europa.ec.edelivery.smp.services;
import eu.europa.ec.edelivery.smp.config.SingleDomainPropertiesTestConfig;
import eu.europa.ec.edelivery.smp.config.PropertiesSingleDomainTestConfig;
import eu.europa.ec.edelivery.smp.testutil.SignatureUtil;
import eu.europa.ec.edelivery.smp.config.SmpServicesTestConfig;
import org.junit.Test;
......@@ -31,7 +31,7 @@ import static eu.europa.ec.edelivery.smp.testutil.XmlTestUtils.loadDocument;
*/
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SmpServicesTestConfig.class, SingleDomainPropertiesTestConfig.class})
@ContextConfiguration(classes = {SmpServicesTestConfig.class, PropertiesSingleDomainTestConfig.class})
public class ServiceMetadataSignerTest {
@Autowired
......
/*
* Copyright 2018 European Commission | CEF eDelivery
*
* Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
*
* You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and limitations under the Licence.
*/
package eu.europa.ec.edelivery.smp.smlintegration;
import eu.europa.ec.bdmsl.ws.soap.IManageParticipantIdentifierWS;
import eu.europa.ec.edelivery.smp.sml.SmlClientFactory;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.message.Message;
import org.apache.cxf.transport.http.HTTPConduit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import javax.net.ssl.KeyManager;
import javax.net.ssl.X509KeyManager;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import static eu.europa.ec.edelivery.smp.testutil.LocalPropertiesTestUtil.buildLocalProperties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
/**
* Created by gutowpa on 08/01/2018.
*/
@RunWith(SpringRunner.class)
@ContextConfiguration
public class SmlClientFactoryMultipleDomainsTest {
@Configuration
@ComponentScan("eu.europa.ec.edelivery.smp.sml")
static class Config {
@Bean
public PropertySourcesPlaceholderConfigurer setLocalProperties() {
String clientCertificatesKeystorePath = Thread.currentThread().getContextClassLoader().getResource("service_integration_signatures_multiple_domains.jks").getFile();
return buildLocalProperties(new String[][]{
{"bdmsl.integration.url", "https://sml.url.pl"},
{"bdmsl.integration.keystore.path", clientCertificatesKeystorePath},
{"bdmsl.integration.keystore.password", "test123"}
});
}
}
@Autowired
private SmlClientFactory smlClientFactory;
@Test
public void factoryProducesPreconfiguredCxfClientThatAuthenticatesItselfWithGivenCertAlias() {
//when
IManageParticipantIdentifierWS client = smlClientFactory.create("second_domain_alias", null);
//then
assertNotNull(client);
Client cxfClient = ClientProxy.getClient(client);
Map<String, Object> requestContext = cxfClient.getRequestContext();
X509Certificate clientCert = getClientCertFromKeystore(cxfClient);
assertEquals("CN=second domain common name, OU=eDelivery, O=European Commission, C=PL", clientCert.getSubjectDN().getName());
assertEquals("https://sml.url.pl", requestContext.get(Message.ENDPOINT_ADDRESS));
}
@Test
public void factoryProducesClientWithAnotherCertFromKeystore() {
//when
IManageParticipantIdentifierWS client = smlClientFactory.create("single_domain_key", null);
//then
Client cxfClient = ClientProxy.getClient(client);
X509Certificate clientCert = getClientCertFromKeystore(cxfClient);
assertEquals("CN=SMP Mock Services, OU=DIGIT, O=European Commision, C=BE", clientCert.getSubjectDN().getName());
}
private static X509Certificate getClientCertFromKeystore(Client cxfClient){
HTTPConduit httpConduit = (HTTPConduit) cxfClient.getConduit();
TLSClientParameters tlsParams = httpConduit.getTlsClientParameters();
String alias = tlsParams.getCertAlias();
KeyManager keyManager = tlsParams.getKeyManagers()[0];
assertTrue(keyManager instanceof X509KeyManager);
PrivateKey key = ((X509KeyManager) keyManager).getPrivateKey(alias);
assertNotNull(key);
return ((X509KeyManager) keyManager).getCertificateChain(alias)[0];
}
@Test(expected = IllegalStateException.class)
public void factoryDoesNotAcceptBothAuthentication() {
smlClientFactory.create("any_domain_alias", "any_header_value");
}
}
......@@ -21,15 +21,17 @@ import org.apache.cxf.message.Message;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Map;
import static eu.europa.ec.edelivery.smp.testutil.LocalPropertiesTestUtil.buildLocalProperties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
......@@ -37,18 +39,25 @@ import static org.junit.Assert.assertNotNull;
* Created by gutowpa on 08/01/2018.
*/
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SmlClientFactoryTest.class)
@Configuration
@ComponentScan("eu.europa.ec.edelivery.smp.sml")
@TestPropertySource(properties = {
"bdmsl.integration.url=https://sml.url.pl"})
public class SmlClientFactoryTest {
@ContextConfiguration
public class SmlClientFactorySingleDomainTest {
@Configuration
@ComponentScan("eu.europa.ec.edelivery.smp.sml")
static class Config {
@Bean
public PropertySourcesPlaceholderConfigurer setLocalProperties() {
return buildLocalProperties(new String[][]{
{"bdmsl.integration.url", "https://sml.url.pl"}
});
}
}
@Autowired
private SmlClientFactory smlClientFactory;
@Test
public void factoryProducedPreconfiguredCxfClient() {
public void factoryProducesPreconfiguredCxfClientThatAuthenticatesItselfWithGivenHttpHeader() {
//when
IManageParticipantIdentifierWS client = smlClientFactory.create(null, "value_of_ClientCert_HTTP_header");
......@@ -62,4 +71,5 @@ public class SmlClientFactoryTest {
assertEquals("value_of_ClientCert_HTTP_header", clientCerts.get(0));
assertEquals("https://sml.url.pl", requestContext.get(Message.ENDPOINT_ADDRESS));
}
}
......@@ -11,30 +11,26 @@
* See the Licence for the specific language governing permissions and limitations under the Licence.
*/
package eu.europa.ec.edelivery.smp.config;
package eu.europa.ec.edelivery.smp.testutil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import java.util.Map;
import java.util.Properties;
/**
* Created by gutowpa on 24/01/2018.
* Created by gutowpa on 25/01/2018.
*/
public abstract class AbstractPropertiesTestConfig {
public class LocalPropertiesTestUtil {
protected Map<String, String> overridenProperties;
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
public static PropertySourcesPlaceholderConfigurer buildLocalProperties(String[][] props) {
PropertySourcesPlaceholderConfigurer propertiesConfig = new PropertySourcesPlaceholderConfigurer();
Properties localProps = new Properties();
overridenProperties.forEach((key, value) -> localProps.setProperty(key, value));
for (String[] entry : props) {
localProps.setProperty(entry[0], entry[1]);
}
propertiesConfig.setProperties(localProps);
propertiesConfig.setLocalOverride(true);
return propertiesConfig;
}
}
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