summaryrefslogtreecommitdiffstats
path: root/ocata/tox.ini
blob: 2fb81e7f69dab085e9746da338e283ec25a40fd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[tox]
envlist = py27,cov
skipsdist = true

[tox:jenkins]
downloadcache = ~/cache/pip

[flake8]
ignore = E501,E722
exclude = ./venv-tox,./.tox
max-complexity = 27

[testenv]
setenv =
    PYTHONPATH = {toxinidir}/../share
deps = -r{toxinidir}/requirements.txt
commands = 
    coverage run --branch manage.py test ocata
    coverage report --omit="./venv-tox/*,./.tox/*,*tests*,*__init__.py,*newton_base*,*common*" --fail-under=30

[testenv:pep8]
deps=flake8
commands=flake8

[testenv:cov]
commands = coverage xml --omit="./venv-tox/*,./.tox/*,*tests*,*__init__.py,*newton_base*,*common*, *site-packages*"
*/ .highlight .na { color: #a6e22e } /* Name.Attribute */ .highlight .nb { color: #f8f8f2 } /* Name.Builtin */ .highlight .nc { color: #a6e22e } /* Name.Class */ .highlight .no { color: #66d9ef } /* Name.Constant */ .highlight .nd { color: #a6e22e } /* Name.Decorator */ .highlight .ni { color: #f8f8f2 } /* Name.Entity */ .highlight .ne { color: #a6e22e } /* Name.Exception */ .highlight .nf { color: #a6e22e } /* Name.Function */ .highlight .nl { color: #f8f8f2 } /* Name.Label */ .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ .highlight .nx { color: #a6e22e } /* Name.Other */ .highlight .py { color: #f8f8f2 } /* Name.Property */ .highlight .nt { color: #f92672 } /* Name.Tag */ .highlight .nv { color: #f8f8f2 } /* Name.Variable */ .highlight .ow { color: #f92672 } /* Operator.Word */ .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ .highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ .highlight .mf { color: #ae81ff } /* Literal.Number.Float */ .highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ .highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ .highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ .highlight .sa { color: #e6db74 } /* Literal.String.Affix */ .highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ .highlight .sc { color: #e6db74 } /* Literal.String.Char */ .highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ .highlight .sd { color: #e6db74 } /* Literal.String.Doc */ .highlight .s2 { color: #e6db74 } /* Literal.String.Double */ .highlight .se { color: #ae81ff } /* Literal.String.Escape */ .highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ .highlight .si { color: #e6db74 } /* Literal.String.Interpol */ .highlight .sx { color: #e6db74 } /* Literal.String.Other */ .highlight .sr { color: #e6db74 } /* Literal.String.Regex */ .highlight .s1 { color: #e6db74 } /* Literal.String.Single */ .highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ .highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #a6e22e } /* Name.Function.Magic */ .highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * ============LICENSE_START=======================================================
 * policy-endpoints
 * ================================================================================
 * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * 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.
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.common.endpoints.event.comm.bus;

import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_ALLOW_SELF_SIGNED_CERTIFICATES_SUFFIX;
import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX;
import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX;
import static org.onap.policy.common.endpoints.properties.PolicyEndPointProperties.PROPERTY_TOPIC_EFFECTIVE_TOPIC_SUFFIX;

import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.function.Predicate;
import org.onap.policy.common.endpoints.event.comm.Topic;
import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;

/**
 * Base class for Topic Factory tests that use BusTopicParams.
 *
 * @param <T> type of topic managed by the factory
 */
public abstract class BusTopicFactoryTestBase<T extends Topic> extends TopicFactoryTestBase<T> {

    /**
     * Builds a topic.
     *
     * @param params the parameters used to configure the topic
     * @return a new topic
     */
    protected abstract T buildTopic(BusTopicParams params);

    /**
     * Builds a topic.
     *
     * @param servers list of servers
     * @param topic the topic name
     * @return a new topic
     */
    protected abstract T buildTopic(List<String> servers, String topic);

    /**
     * Gets the parameters used to build the most recent topic.
     *
     * @return the most recent topic's parameters
     */
    protected abstract BusTopicParams getLastParams();

    /**
     * Tests building a topic using BusTopicParams.
     */
    public void testBuildBusTopicParams() {
        initFactory();

        // two unmanaged topics
        T item = buildTopic(makeBuilder().managed(false).effectiveTopic(null).build());
        T item2 = buildTopic(makeBuilder().managed(false).topic(TOPIC2).build());
        assertNotNull(item);
        assertNotNull(item2);
        assertEquals(item.getTopic(), item.getEffectiveTopic());
        assertNotEquals(item2.getTopic(), item2.getEffectiveTopic());
        assertNotSame(item, item2);

        // duplicate topics, but since they aren't managed, they should be different
        T item3 = buildTopic(makeBuilder().managed(false).build());
        T item4 = buildTopic(makeBuilder().managed(false).effectiveTopic(TOPIC2).build());
        assertNotNull(item3);
        assertNotNull(item4);
        assertEquals(MY_TOPIC, item4.getTopic());
        assertEquals(TOPIC2, item4.getEffectiveTopic());
        assertNotSame(item, item3);
        assertNotSame(item, item4);
        assertNotSame(item3, item4);

        // two managed topics
        T item5 = buildTopic(makeBuilder().build());
        T item6 = buildTopic(makeBuilder().topic(TOPIC2).build());
        assertNotNull(item5);
        assertNotNull(item6);

        // re-build same managed topics - should get exact same objects
        assertSame(item5, buildTopic(makeBuilder().topic(MY_TOPIC).build()));
        assertSame(item6, buildTopic(makeBuilder().topic(TOPIC2).build()));
    }

    /**
     * Tests exception cases when building a topic using BusTopicParams.
     */
    public void testBuildBusTopicParams_Ex() {
        // null topic
        assertThatIllegalArgumentException().isThrownBy(() -> buildTopic(makeBuilder().topic(null).build()));

        // empty topic
        assertThatIllegalArgumentException().isThrownBy(() -> buildTopic(makeBuilder().topic("").build()));
    }

    /**
     * Tests building a topic using a list of servers and a topic.
     */
    public void testBuildListOfStringString() {
        initFactory();

        T item1 = buildTopic(servers, MY_TOPIC);
        assertNotNull(item1);

        // check parameters that were used
        BusTopicParams params = getLastParams();
        assertEquals(servers, params.getServers());
        assertEquals(MY_TOPIC, params.getTopic());
        assertEquals(true, params.isManaged());
        assertEquals(false, params.isUseHttps());

        T item2 = buildTopic(servers, TOPIC2);
        assertNotNull(item2);
        assertNotSame(item1, item2);

        // duplicate - should be the same, as these topics are managed
        T item3 = buildTopic(servers, TOPIC2);
        assertSame(item2, item3);
    }

    /**
     * Tests building a topic using Properties. Verifies parameters specific to Bus
     * topics.
     */
    public void testBuildProperties() {
        initFactory();

        List<T> topics = buildTopics(makePropBuilder().makeTopic(MY_TOPIC).build());
        assertEquals(1, topics.size());
        assertEquals(MY_TOPIC, topics.get(0).getTopic());
        assertEquals(MY_EFFECTIVE_TOPIC, topics.get(0).getEffectiveTopic());

        BusTopicParams params = getLastParams();
        assertEquals(true, params.isManaged());
        assertEquals(true, params.isUseHttps());
        assertEquals(true, params.isAllowSelfSignedCerts());
        assertEquals(MY_API_KEY, params.getApiKey());
        assertEquals(MY_API_SECRET, params.getApiSecret());
        assertEquals(Arrays.asList(SERVER), params.getServers());
        assertEquals(MY_TOPIC, params.getTopic());
        assertEquals(MY_EFFECTIVE_TOPIC, params.getEffectiveTopic());

        List<T> topics2 = buildTopics(makePropBuilder().makeTopic(TOPIC3)
            .removeTopicProperty(PROPERTY_TOPIC_EFFECTIVE_TOPIC_SUFFIX).build());
        assertEquals(1, topics2.size());
        assertEquals(TOPIC3, topics2.get(0).getTopic());
        assertEquals(topics2.get(0).getTopic(), topics2.get(0).getEffectiveTopic());
    }

    @Override
    public void testBuildProperties_Variations() {
        super.testBuildProperties_Variations();

        // check boolean properties that default to true
        checkDefault(PROPERTY_MANAGED_SUFFIX, BusTopicParams::isManaged);

        // check boolean properties that default to false
        checkDefault(PROPERTY_HTTP_HTTPS_SUFFIX, params -> !params.isUseHttps());
        checkDefault(PROPERTY_ALLOW_SELF_SIGNED_CERTIFICATES_SUFFIX, params -> !params.isAllowSelfSignedCerts());
    }

    /**
     * Verifies that a parameter has the correct default, if the original builder property
     * is not provided.
     *
     * @param builderName name of the builder property
     * @param validate function to test the validity of the property
     * @param values the values to which the property should be set, defaults to
     *        {@code null} and ""
     */
    protected void checkDefault(String builderName, Predicate<BusTopicParams> validate, Object... values) {
        Object[] values2 = (values.length > 0 ? values : new Object[] {null, ""});

        for (Object value : values2) {
            // always start with a fresh factory
            initFactory();

            TopicPropertyBuilder builder = makePropBuilder().makeTopic(MY_TOPIC);

            if (value == null) {
                builder.removeTopicProperty(builderName);

            } else {
                builder.setTopicProperty(builderName, value.toString());
            }

            assertEquals("size for default " + value, 1, buildTopics(builder.build()).size());
            assertTrue("default for " + value, validate.test(getLastParams()));
        }
    }

    /**
     * Verifies that an "additional" property does not exist, if the original builder
     * property is not provided.
     *
     * @param builderName name of the builder property
     * @param addName name of the "additional" property
     */
    protected void expectNullAddProp(String builderName, String addName) {

        // remove the property
        initFactory();
        Properties props = makePropBuilder().makeTopic(MY_TOPIC).removeTopicProperty(builderName).build();
        assertEquals(1, buildTopics(props).size());
        assertFalse(getLastParams().getAdditionalProps().containsKey(addName));


        // repeat, this time using an empty string instead of null
        initFactory();
        props = makePropBuilder().makeTopic(MY_TOPIC).setTopicProperty(builderName, "").build();
        assertEquals(1, buildTopics(props).size());
        assertFalse(getLastParams().getAdditionalProps().containsKey(addName));
    }
}