/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as 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 at: * * http://ec.europa.eu/idabc/eupl * * 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 com.eviware.soapui.impl.wsdl.support.wss.crypto; import com.eviware.soapui.config.KeyMaterialCryptoConfig; import com.eviware.soapui.impl.wsdl.WsdlProject; import com.eviware.soapui.impl.wsdl.support.wss.DefaultWssContainer; import com.eviware.soapui.support.SoapUIException; import org.apache.xmlbeans.XmlException; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.IOException; import java.security.KeyStore; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.when; /** * @author Erik R. Yverling * <p/> * Tests loading all supported types of cryptos with correct and * incorrect credentials */ // FIXME We should also add tests for truststores public class KeyMaterialWssCryptoTest { private static final String TEST_RESOURCES_DIR = "/keys/"; private static final String CORRECT_PASSWORD = "test"; private static final String INCORRECT_PASSWORD = "not-correct"; private KeyMaterialWssCrypto crypto; @Mock private KeyMaterialCryptoConfig configMock; @Mock private DefaultWssContainer containerMock; private WsdlProject project; @Before public void setUp() throws XmlException, IOException, SoapUIException { MockitoAnnotations.initMocks(this); project = new WsdlProject(); } @Test public void testLoadingJKSKeystoreWithCorrectPassword() throws Exception { loadCryptoSucessfully(CryptoType.KEYSTORE, "jks-test-key.jks", CORRECT_PASSWORD); } @Test public void testLoadingJKSKeystoreWithNullPassword() throws Exception { loadCryptoSucessfully(CryptoType.TRUSTSTORE, "jks-test-key.jks", null); } @Test public void testLoadingJKSKeystoreWithBlankPassword() throws Exception { loadCryptoSucessfully(CryptoType.TRUSTSTORE, "jks-test-key.jks", ""); } @Test public void testLoadingJCEKSSKeystoreWithCorrectPassword() throws Exception { loadCryptoSucessfully(CryptoType.KEYSTORE, "jceks-test-key.jck", CORRECT_PASSWORD); } @Test public void testLoadingPKCS12KeystoreWithCorrectPassword() throws Exception { loadCryptoSucessfully(CryptoType.KEYSTORE, "pkcs12-test-key.p12", CORRECT_PASSWORD); } @Test public void testLoadingJKSKeystoreWithIncorrectPassword() throws Exception { loadCryptoUnsucessfully(CryptoType.KEYSTORE, "jks-test-key.jks", INCORRECT_PASSWORD); } @Test public void testLoadingJCEKSSKeystoreWithIncorrectPassword() throws Exception { loadCryptoUnsucessfully(CryptoType.KEYSTORE, "jceks-test-key.jck", INCORRECT_PASSWORD); } @Test public void testLoadingPKCS12KeystoreWithIncorrectPassword() throws Exception { loadCryptoUnsucessfully(CryptoType.KEYSTORE, "pkcs12-test-key.p12", INCORRECT_PASSWORD); } private void loadCryptoSucessfully(CryptoType type, String filename, String password) { String path = initLoad(type, filename, password); try { KeyStore loadedKeystore = crypto.load(); assertNotNull("The crypto (" + path + ") is not null", loadedKeystore); } catch (Exception e) { fail("The crypto (" + path + ") could not be loaded because of: " + e.getMessage()); } } private void loadCryptoUnsucessfully(CryptoType type, String filename, String password) { String path = initLoad(type, filename, password); KeyStore loadedKeystore = null; try { loadedKeystore = crypto.load(); fail("The keystore was loaded suessfully"); } catch (Exception e) { assertNull("The crypto (" + path + ") is null", loadedKeystore); } } private String initLoad(CryptoType type, String filename, String password) { String path = KeyMaterialWssCryptoTest.class.getResource(TEST_RESOURCES_DIR + filename).getPath(); when(containerMock.getModelItem()).thenReturn(project); when(configMock.getSource()).thenReturn(path); when(configMock.getPassword()).thenReturn(password); crypto = new KeyMaterialWssCrypto(configMock, containerMock, path, password, type); return path; } }