org.zaproxy.zap.extension.ext.ExtensionParamUnitTest.java Source code

Java tutorial

Introduction

Here is the source code for org.zaproxy.zap.extension.ext.ExtensionParamUnitTest.java

Source

/*
 * Zed Attack Proxy (ZAP) and its related class files.
 * 
 * ZAP is an HTTP/HTTPS proxy for assessing web application security.
 * 
 * Copyright 2016 The ZAP Development Team
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.zaproxy.zap.extension.ext;

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.configuration.FileConfiguration;
import org.apache.log4j.Logger;
import org.apache.log4j.varia.NullAppender;
import org.junit.BeforeClass;
import org.junit.Test;
import org.zaproxy.zap.utils.ZapXmlConfiguration;

/**
 * Unit test for {@link ExtensionParam}.
 */
public class ExtensionParamUnitTest {

    @BeforeClass
    public static void suppressLogging() {
        Logger.getRootLogger().addAppender(new NullAppender());
    }

    @Test
    public void shouldNotHaveConfigByDefault() {
        // Given / When
        ExtensionParam param = new ExtensionParam();
        // Then
        assertThat(param.getConfig(), is(equalTo(null)));
    }

    @Test
    public void shouldBeCloneableByDefault() {
        // Given
        ExtensionParam param = new ExtensionParam();
        // When
        ExtensionParam clone = param.clone();
        // Then
        assertThat(clone, is(not(equalTo(null))));
    }

    @Test
    public void shouldParseLoadedFileConfiguration() {
        // Given
        ExtensionParam param = new ExtensionParam();
        FileConfiguration config = createTestConfig(false, true, false, true, true);
        // When
        param.load(config);
        // Then
        assertThat(param.isExtensionEnabled("Extension 1"), is(equalTo(false)));
        assertThat(param.isExtensionEnabled("Extension 2"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 3"), is(equalTo(false)));
        assertThat(param.isExtensionEnabled("Extension 4"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 5"), is(equalTo(true)));
    }

    @Test
    public void shouldDefaultToAllExtensionsEnabledIfLoadingMalformedFileConfiguration() {
        // Given
        ExtensionParam param = new ExtensionParam();
        // When
        param.load(createMalformedTestConfig());
        // Then
        assertThat(param.isExtensionEnabled("Extension 1"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 2"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 3"), is(equalTo(true)));
    }

    @Test
    public void shouldHaveLoadedConfigsAfterCloning() {
        // Given
        ExtensionParam param = new ExtensionParam();
        FileConfiguration config = createTestConfig(false, true, false);
        param.load(config);
        // When
        ExtensionParam clone = param.clone();
        // Then
        assertThat(clone.isExtensionEnabled("Extension 1"), is(equalTo(false)));
        assertThat(clone.isExtensionEnabled("Extension 2"), is(equalTo(true)));
        assertThat(clone.isExtensionEnabled("Extension 3"), is(equalTo(false)));
    }

    @Test(expected = IllegalArgumentException.class)
    public void shouldFailToPersistNullExtensionsState() {
        // Given
        ExtensionParam param = new ExtensionParam();
        // When
        param.setExtensionsState(null);
        // Then = IllegalArgumentException
    }

    @Test(expected = NullPointerException.class)
    public void shouldFailToPersistExtensionsStateWithoutConfigurationFile() {
        // Given
        ExtensionParam param = new ExtensionParam();
        // When
        param.setExtensionsState(Collections.<String, Boolean>emptyMap());
        // Then = NullPointerException
    }

    @Test
    public void shouldSetExtensionsState() {
        // Given
        ExtensionParam param = new ExtensionParam();
        FileConfiguration config = createTestConfig();
        param.load(config);
        Map<String, Boolean> states = extensionsState(true, false, true, false, true, true);
        // When
        param.setExtensionsState(states);
        // Then
        assertThat(param.isExtensionEnabled("Extension 1"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 2"), is(equalTo(false)));
        assertThat(param.isExtensionEnabled("Extension 3"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 4"), is(equalTo(false)));
        assertThat(param.isExtensionEnabled("Extension 5"), is(equalTo(true)));
        assertThat(param.isExtensionEnabled("Extension 6"), is(equalTo(true)));
    }

    @Test
    public void shouldPersistDisabledExtensions() {
        // Given
        ExtensionParam param = new ExtensionParam();
        FileConfiguration config = createTestConfig();
        param.load(config);
        Map<String, Boolean> states = extensionsState(true, false, true, false, true, true);
        // When
        param.setExtensionsState(states);
        // Then
        assertThat(config.getString("extensions.extension(0).name"), is(equalTo("Extension 2")));
        assertThat(config.getBoolean("extensions.extension(0).enabled"), is(equalTo(false)));
        assertThat(config.getString("extensions.extension(1).name"), is(equalTo("Extension 4")));
        assertThat(config.getBoolean("extensions.extension(1).enabled"), is(equalTo(false)));
        assertThat(config.containsKey("extensions.extension(2).name"), is(equalTo(false)));
        assertThat(config.containsKey("extensions.extension(2).enabled"), is(equalTo(false)));
    }

    @Test
    public void shouldNotPersistNullExtensionNamesOrNullEnabledState() {
        // Given
        ExtensionParam param = new ExtensionParam();
        FileConfiguration config = createTestConfig();
        param.load(config);
        Map<String, Boolean> states = new HashMap<>();
        states.put(null, Boolean.FALSE);
        states.put("Extension 2", null);
        // When
        param.setExtensionsState(states);
        // Then
        assertThat(param.getConfig().getKeys().hasNext(), is(equalTo(false)));
    }

    private static Map<String, Boolean> extensionsState(boolean... states) {
        Map<String, Boolean> extensionsState = new HashMap<>();
        if (states == null || states.length == 0) {
            return extensionsState;
        }

        for (int i = 0; i < states.length; ++i) {
            extensionsState.put("Extension " + (i + 1), states[i]);
        }
        return extensionsState;
    }

    private static FileConfiguration createTestConfig(boolean... states) {
        ZapXmlConfiguration config = new ZapXmlConfiguration();
        if (states == null || states.length == 0) {
            return config;
        }

        for (int i = 0; i < states.length; ++i) {
            String elementBaseKey = "extensions.extension(" + i + ").";

            config.setProperty(elementBaseKey + "name", "Extension " + (i + 1));
            config.setProperty(elementBaseKey + "enabled", states[i]);
        }
        return config;
    }

    private static FileConfiguration createMalformedTestConfig() {
        ZapXmlConfiguration config = new ZapXmlConfiguration();
        for (int i = 0; i < 3; ++i) {
            String elementBaseKey = "extensions.extension(" + i + ").";

            config.setProperty(elementBaseKey, null);
            config.setProperty(elementBaseKey + "enabled", "X");
        }
        return config;
    }
}