Package dbfit.util

Source Code of dbfit.util.PropertiesLoaderTest

package dbfit.util;

import static dbfit.util.PropertiesTestsSetUp.wrapEncryptedValue;

import dbfit.util.crypto.CryptoTestsConfig;
import dbfit.util.crypto.CryptoService;
import static dbfit.util.crypto.CryptoTestsConfig.getFakeCryptoService;

import org.junit.Test;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;

import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times;

import java.util.List;
import java.util.Map;

@RunWith(MockitoJUnitRunner.class)
public class PropertiesLoaderTest {

    public static final String DB_PASSWORD = "Test Password";
    private final String ENCRYPTED_PASSWORD = encrypt(DB_PASSWORD);

    @Mock private CryptoService mockedCryptoService;
    @Rule public TemporaryFolder tempKeyStoreFolder = new TemporaryFolder();
    private PropertiesLoader fakeLoader;

    @Before
    public void initMockedCryptoService() {
        when(mockedCryptoService.decrypt(ENCRYPTED_PASSWORD)).thenReturn(DB_PASSWORD);
        fakeLoader = new PropertiesLoader(getFakeCryptoService());
    }

    private String encrypt(String password) {
        return getFakeCryptoService().encrypt(password);
    }

    private List<String> prepareEncryptedSettings() {
        return PropertiesTestsSetUp.prepareEncryptedSettings(ENCRYPTED_PASSWORD);
    }

    //----- Whole list loading tests -----/
    @Test
    public void shouldCallDecryptWhenLoadingEncryptedValue() {
        PropertiesLoader loader = new PropertiesLoader(mockedCryptoService);

        loader.loadFromList(prepareEncryptedSettings());

        verify(mockedCryptoService, times(1)).decrypt(ENCRYPTED_PASSWORD);
    }

    @Test
    public void testNonEncryptedPropertyLoad() throws Exception {
        Map<String, String> props =
            fakeLoader.loadFromList(prepareEncryptedSettings());

        assertEquals("mydemodb", props.get("database"));
    }

    @Test
    public void testEncryptedPropertyLoad() throws Exception {
        Map<String, String> props =
            fakeLoader.loadFromList(prepareEncryptedSettings());

        assertEquals(DB_PASSWORD, props.get("password"));
    }

    @Test
    public void shouldSkipCommentedLines() throws Exception {
        List<String> lines = new java.util.ArrayList<String>();
        lines.add("#=A comment here");
        lines.add("username=myname");

        Map<String, String> props = fakeLoader.loadFromList(lines);

        assertThat(props, not(hasKey(startsWith("#"))));
    }

    // Integration test with real crypto svc
    @Test
    public void testEncryptedPropertyLoadRealCryptoSvc() throws Exception {
        java.io.File ksRoot = tempKeyStoreFolder.getRoot();
        CryptoTestsConfig.createTestKeyStore(ksRoot);
        CryptoService crypto = CryptoTestsConfig.getCryptoService(ksRoot);

        PropertiesLoader loader = new PropertiesLoader(crypto);

        Map<String, String> props = loader.loadFromList(
            PropertiesTestsSetUp.prepareEncryptedSettings(crypto.encrypt(DB_PASSWORD)));

        assertEquals(DB_PASSWORD, props.get("password"));
    }
    //----- End of whole list loading tests -/

    //----- Line-level processing tests -----/
    @Test
    public void parseEncryptedValueTest() throws Exception {
        String decPwd = fakeLoader.parseValue(wrapEncryptedValue(ENCRYPTED_PASSWORD));
        assertEquals(DB_PASSWORD, decPwd);
    }

    @Test
    public void parseNonEncryptedValueTest() throws Exception {
        String decPwd = fakeLoader.parseValue(DB_PASSWORD);
        assertEquals(DB_PASSWORD, decPwd);
    }

    //----- Start of static methods tests ------/
    @Test
    public void unwrapEncryptedValueTest() {
        String value = "XYZ";
        String wrapped = wrapEncryptedValue(value);

        assertEquals(value, PropertiesLoader.unwrapEncryptedValue(wrapped));
    }

    @Test
    public void unwrapNonEncryptedValueShouldGiveNull() {
        assertNull(PropertiesLoader.unwrapEncryptedValue("XYZ"));
    }

    @Test
    public void splitKeyValueSettingsLineTest() {
        String[] keyval = PropertiesLoader.splitKeyVal("password=crap");

        assertEquals("password", keyval[0]);
        assertEquals("crap", keyval[1]);
    }

    @Test
    public void shouldAllowEqualsSignInSettingsValue() {
        String key = "password";
        String value = "One=Two-Three==";
        String[] keyval = PropertiesLoader.splitKeyVal(
                key + "=" + value);


        assertEquals(key, keyval[0]);
        assertEquals(value, keyval[1]);
    }
    //------- End of static methods tests ------/
}
TOP

Related Classes of dbfit.util.PropertiesLoaderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.