aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: e7cd2c6d8f1f2a17529cc2132c09c2ff4bf41a96 (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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
##############################################################################
# Copyright (c) 2016,2017 Cavium, Enea AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

# NOTE: Armband patching consists of:
# - clone upstream repositories to git submodules, tracking remotes;
# - tag each submodule (before patching) with "${A_OPNFV_TAG}-root";
# - apply Armband patches for each submodule;
# - tag each submodule (after patching) with "${OPNFV_TAG}";
# - stage Fuel submodule patches by copying them to Fuel f_repos/patch dir;
# - pass updated repository info to Fuel@OPNFV build system
#   (e.g. FUEL_PLUGIN_ODL_CHANGE="${OPNFV_TAG}") via armband-fuel-config.mk;

# NOTE: Long-term goals (Armband repo should merge with Fuel@OPNFV):
# - all build related changes should affect Fuel@OPNFV, NOT Armband;
# - Armband make/build system should only handle patching non-Fuel submodules,
#   and then invoke Fuel@OPNFV's patch & build system;
# - Fuel@OPNFV is made aware of an Armband type build by passing
#   the "ARMBAND_BASE" env var;

SHELL = /bin/sh

export ARMBAND_BASE  := $(shell pwd)
export OPNFV_GIT_SHA := $(shell git rev-parse HEAD)
export REVSTATE

include armband-fuel-config.mk

all: release

# Fetch & update git submodules, checkout remote HEAD
.PHONY: submodules-init
submodules-init: .submodules-init

.submodules-init:
	@if [ -n "${ARMBAND_TRACK_REMOTES}" ]; then \
		git submodule update --init --remote 2>/dev/null; \
	else \
		git submodule update --init 2>/dev/null; \
	fi
	@touch $@

# Clean any changes made to submodules, checkout Armband root commit
.PHONY: submodules-clean
submodules-clean: .submodules-init
	@git submodule -q foreach ' \
		git am -q --abort 2>/dev/null; \
		git checkout -q -f ${A_OPNFV_TAG}-root 2>/dev/null; \
		git branch -q -D opnfv-armband 2>/dev/null; \
		git tag | grep ${A_OPNFV_TAG} | xargs git tag -d > /dev/null 2>&1; \
		git reset -q --hard HEAD; \
		git clean -xdff'
	@rm -f .submodules-patched

# Generate patches from submodules
.PHONY: patches-export
patches-export: .submodules-init
	@git submodule -q foreach ' \
		SUB_DIR=${A_PATCH_DIR}/$$name; \
		git tag | awk "!/root/ && /${A_OPNFV_TAG}-fuel/" | while read A_TAG; do \
			SUB_FEATURE=`dirname $${A_TAG#${A_OPNFV_TAG}-fuel/}`; \
			echo "`tput setaf 2`== exporting $$name ($$A_TAG)`tput sgr0`"; \
			mkdir -p $$SUB_DIR/$${SUB_FEATURE} && \
			git format-patch --no-signature --ignore-space-at-eol \
				-o $$SUB_DIR/$$SUB_FEATURE -N $$A_TAG-root..$$A_TAG; \
			sed -i -e "1{/From: /!d}" -e "s/[[:space:]]*$$//" \
				$$SUB_DIR/$$SUB_FEATURE/*.patch; \
		done'

# Apply patches from patches/* to respective submodules
.PHONY: patches-import
patches-import: .submodules-init .submodules-patched

.submodules-patched: ${A_PATCHES}
	@$(MAKE) submodules-clean
	@git submodule -q foreach ' \
		SUB_DIR=${A_PATCH_DIR}/$$name; mkdir -p $$SUB_DIR && \
		git tag ${A_OPNFV_TAG}-root && \
		git checkout -q -b opnfv-armband && \
		find $$SUB_DIR -type d | sort | while read p_dir; do \
			SUB_PATCHES=$$(ls $$p_dir/*.patch 2>/dev/null); \
			if [ -n "$$SUB_PATCHES" ]; then \
				SUB_FEATURE=$${p_dir#$$SUB_DIR} \
				SUB_TAG=${A_OPNFV_TAG}-fuel$$SUB_FEATURE/patch; \
				echo "`tput setaf 2`== patching $$name ($$SUB_TAG)`tput sgr0`";\
				git tag $$SUB_TAG-root && \
				git am -3 --whitespace=nowarn --patch-format=mbox \
					--committer-date-is-author-date $$SUB_PATCHES && \
				git tag $$SUB_TAG || exit 1; \
			fi \
		done && \
		git tag ${A_OPNFV_TAG}'
	# Staging Fuel@OPNFV patches
	@ls -d ${F_PATCH_DIR}/* 2>/dev/null | while read p_sub_path; do \
		SUB_NAME=`basename $$p_sub_path`; \
		find ${A_PATCH_DIR}/$$SUB_NAME -name '*.patch' 2>/dev/null -exec sh -c '\
			A_PATCH={}; R_PATCH=$${A_PATCH#${A_PATCH_DIR}/}; \
			F_PATCH=${F_PATCH_DIR}/$${0}/armband/$${R_PATCH#$${0}/}; \
			if [ -f $$F_PATCH ]; then \
				echo "`tput setaf 3`* WARN: $$R_PATCH upstream.`tput sgr0`"; \
			else \
				if [ -h $$A_PATCH ]; then \
					echo "`tput setaf 3`* PHONY: $$R_PATCH`tput sgr0`"; \
				else \
					echo "`tput setaf 6`* Staging $$R_PATCH`tput sgr0`"; \
					mkdir -p `dirname $$F_PATCH` && cp $$A_PATCH $$F_PATCH; \
				fi; \
			fi' "$$SUB_NAME" \; || true ; \
	done
	@touch $@

##############################################################################
# Fuel@OPNFV patch operations - to be used only during development
##############################################################################
# Apply all Fuel@OPNFV patches, including Armband patches
.PHONY: fuel-patches-import
fuel-patches-import: .submodules-patched fuel-patches-clean
	$(MAKE) -e -C ${F_PATCH_DIR} patches-import

.PHONY: fuel-patches-clean
fuel-patches-clean:
	$(MAKE) -e -C ${F_PATCH_DIR} clean

# Add copyright header to patch files if not already present
.PHONY: patches-copyright
patches-copyright:
	@grep -e "Copyright (c)" -L ${A_PATCHES} | while read p_file; do \
		ptmp=`mktemp` && \
		cat armband-patch-copyright.template $$p_file > $$ptmp && \
		mv $$ptmp $$p_file; \
	done
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 */ }
tiers:
    -
        name: healthcheck
        order: 0
        ci_loop: '(daily)|(weekly)'
        description : >-
            First tier to be executed to verify the basic
            operations in the VIM.
        testcases:
            -
                name: snaps_health_check
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    This test case creates executes the SimpleHealthCheck
                    Python test class which creates an, image, flavor, network,
                    and Cirros VM instance and observes the console output to
                    validate the single port obtains the correct IP address.
                dependencies:
                    installer: ''
                    scenario: '^((?!lxd).)*$'
                run:
                    module: 'functest.opnfv_tests.openstack.snaps.health_check'
                    class: 'HealthCheck'
            -
                name: connection_check
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    This test case verifies the retrieval of OpenStack clients:
                    Keystone, Glance, Neutron and Nova and may perform some
                    simple queries. When the config value of
                    snaps.use_keystone is True, functest must have access to
                    the cloud's private network.

                dependencies:
                    installer: '^((?!netvirt).)*$'
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.openstack.snaps.connection_check'
                    class: 'ConnectionCheck'

            -
                name: api_check
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    This test case verifies the retrieval of OpenStack clients:
                    Keystone, Glance, Neutron and Nova and may perform some
                    simple queries. When the config value of
                    snaps.use_keystone is True, functest must have access to
                    the cloud's private network.

                dependencies:
                    installer: '^((?!netvirt).)*$'
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.openstack.snaps.api_check'
                    class: 'ApiCheck'
    -
        name: smoke
        order: 1
        ci_loop: '(daily)|(weekly)'
        description : >-
            Set of basic Functional tests to validate the OPNFV scenarios.
        testcases:
            -
                name: vping_ssh
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    This test case verifies: 1) SSH to an instance using floating
                    IPs over the public network. 2) Connectivity between 2 instances
                    over a private network.
                dependencies:
                    installer: ''
                    scenario: '^((?!bgpvpn|odl_l3).)*$'
                run:
                    module: 'functest.opnfv_tests.openstack.vping.vping_ssh'
                    class: 'VPingSSH'

            -
                name: vping_userdata
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    This test case verifies:  1) Boot a VM with given userdata.
                    2) Connectivity between 2 instances over a private network.
                dependencies:
                    installer: ''
                    scenario: '^((?!lxd).)*$'
                run:
                    module: 'functest.opnfv_tests.openstack.vping.vping_userdata'
                    class: 'VPingUserdata'

            -
                name: tempest_smoke_serial
                criteria: 'success_rate == 100%'
                blocking: false
                description: >-
                    This test case runs the smoke subset of the OpenStack
                    Tempest suite. The list of test cases is generated by
                    Tempest automatically and depends on the parameters of
                    the OpenStack deplopyment.
                dependencies:
                    installer: '^((?!netvirt).)*$'
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.openstack.tempest.tempest'
                    class: 'TempestSmokeSerial'

            -
                name: rally_sanity
                criteria: 'success_rate == 100%'
                blocking: false
                description: >-
                    This test case runs a sub group of tests of the OpenStack
                    Rally suite in smoke mode.
                dependencies:
                    installer: ''
                    scenario: '^((?!bgpvpn).)*$'
                run:
                    module: 'functest.opnfv_tests.openstack.rally.rally'
                    class: 'RallySanity'

            -
                name: odl
                criteria: 'success_rate == 100%'
                blocking: true
                description: >-
                    Test Suite for the OpenDaylight SDN Controller. It
                    integrates some test suites from upstream using
                    Robot as the test framework.
                dependencies:
                    installer: ''
                    scenario: 'odl'
                run:
                    module: 'functest.opnfv_tests.sdn.odl.odl'
                    class: 'ODLTests'
                    args:
                        suites:
                            -  /home/opnfv/repos/odl_test/csit/suites/integration/basic
                            -  /home/opnfv/repos/odl_test/csit/suites/openstack/neutron

            -
                name: odl_netvirt
                criteria: 'success_rate == 100%'
                blocking: true
                description: >-
                    Test Suite for the OpenDaylight SDN Controller when
                    the NetVirt features are installed. It integrates
                    some test suites from upstream using Robot as the
                    test framework.
                dependencies:
                    installer: ''
                    scenario: 'netvirt'
                run:
                    module: 'functest.opnfv_tests.sdn.odl.odl'
                    class: 'ODLTests'
                    args:
                        suites:
                            -  /home/opnfv/repos/odl_test/csit/suites/integration/basic
                            -  /home/opnfv/repos/odl_test/csit/suites/openstack/neutron
                            -  /home/opnfv/repos/odl_test/csit/suites/openstack/connectivity

            -
                name: onos
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    Test Suite for the ONOS SDN Controller. It integrates
                    some test suites from upstream using TestON as the test
                    framework.
                dependencies:
                    installer: ''
                    scenario: 'onos'


            -
                name: snaps_smoke
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    This test case contains tests that setup and destroy
                    environments with VMs with and without Floating IPs
                    with a newly created user and project. Set the config
                    value snaps.use_floating_ips (True|False) to toggle
                    this functionality. When the config value of
                    snaps.use_keystone is True, functest must have access to
                    the cloud's private network.

                dependencies:
                    installer: '^((?!netvirt).)*$'
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.openstack.snaps.smoke'
                    class: 'SnapsSmoke'

    -
        name: features
        order: 2
        ci_loop: '(daily)|(weekly)'
        description : >-
            Test suites from feature projects
            integrated in functest
        testcases:
            -
                name: promise
                criteria: 'success_rate == 100%'
                blocking: false
                description: >-
                    Test suite from Promise project.
                dependencies:
                    installer: '(fuel)|(joid)'
                    scenario: ''
                run:
                     module: 'functest.opnfv_tests.features.promise'
                     class: 'Promise'

            -
                name: doctor
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite from Doctor project.
                dependencies:
                    installer: '(apex)|(fuel)|(joid)'
                    scenario: '^((?!fdio).)*$'
                run:
                    module: 'functest.opnfv_tests.features.doctor'
                    class: 'Doctor'

            -
                name: bgpvpn
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite from SDNVPN project.
                dependencies:
                    installer: '(fuel)|(apex)|(netvirt)'
                    scenario: 'bgpvpn'
                run:
                    module: 'functest.opnfv_tests.features.sdnvpn'
                    class: 'SdnVpnTests'

            -
                name: security_scan
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Simple Security Scan
                dependencies:
                    installer: 'apex'
                    scenario: '^((?!fdio).)*$'
                run:
                    module: 'functest.opnfv_tests.features.security_scan'
                    class: 'SecurityScan'
#            -
#                name: copper
#                criteria: 'status == "PASS"'
#                blocking: false
#                description: >-
#                    Test suite for policy management based on OpenStack Congress
#                dependencies:
#                    installer: '(apex)|(joid)'
#                    scenario: '^((?!fdio|lxd).)*$'
#                run:
#                    module: 'functest.opnfv_tests.features.copper'
#                    class: 'Copper'
            -
                name: multisite
                criteria: 'success_rate == 100%'
                blocking: false
                description: >-
                    Test suite from kingbird
                dependencies:
                    installer: '(fuel)|(compass)'
                    scenario: 'multisite'
                run:
                    module: 'functest.opnfv_tests.openstack.tempest.tempest'
                    class: 'TempestMultisite'
            -
                name: odl-sfc
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite for odl-sfc to test two chains and two SFs
                dependencies:
                    installer: '(apex)|(fuel)'
                    scenario: 'odl_l2-sfc'
                run:
                    module: 'functest.opnfv_tests.features.odl_sfc'
                    class: 'OpenDaylightSFC'
            -
                name: onos_sfc
                criteria: 'status == "PASS"'
                blocking: true
                description: >-
                    Test Suite for onos-sfc to test sfc function.
                dependencies:
                    installer: ''
                    scenario: 'onos-sfc'
            -
                name: parser
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    Test suite from Parser project.
                dependencies:
                    installer: 'fuel'
                    scenario: '^((?!bgpvpn|noha).)*$'
                run:
                    module: 'functest.opnfv_tests.vnf.rnc.parser'
                    class: 'Parser'
            -
                name: domino
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite from Domino project.
                dependencies:
                    installer: ''
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.features.domino'
                    class: 'Domino'
            -
                name: orchestra
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    Test OpenBaton (Orchestra) stack
                dependencies:
                    installer: 'joid'
                    scenario: 'unknown'
                run:
                    module: 'functest.opnfv_tests.features.orchestrator.orchestra'
                    class: 'OpenbatonOrchestrator'
            -
                name: netready
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite from Netready project.
                dependencies:
                    installer: 'apex'
                    scenario: 'gluon'
                run:
                     module: 'functest.opnfv_tests.features.netready'
                     class: 'GluonVping'
            -
                name: barometer
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    Test suite for the Barometer project. Separate tests verify the
                    proper configuration and functionality of the following
                    collectd plugins Ceilometer, Hugepages, Memory RAS (mcelog),
                    and OVS Events
                dependencies:
                    installer: 'fuel'
                    scenario: 'kvm_ovs_dpdk_bar'
                run:
                     module: 'functest.opnfv_tests.features.barometer'
                     class: 'BarometerCollectd'
    -
        name: components
        order: 3
        ci_loop: 'daily'
        description : >-
            Extensive testing of OpenStack API.
        testcases:
#            -
#                name: tempest_full_parallel
#                criteria: 'success_rate >= 80%'
#                blocking: false
#                description: >-
#                    The list of test cases is generated by
#                    Tempest automatically and depends on the parameters of
#                    the OpenStack deplopyment.
#                dependencies:
#                    installer: '^((?!netvirt).)*$'
#                    scenario: ''
#                run:
#                    module: 'functest.opnfv_tests.openstack.tempest.tempest'
#                    class: 'TempestFullParallel'
            -
                name: tempest_defcore
                criteria: 'success_rate == 100%'
                blocking: false
                description: >-
                    This is the set of Tempest test cases created by OpenStack
                    Interop Working Group for certification purposes.
                dependencies:
                    installer: ''
                    scenario: 'nosdn-nofeature-ha'
                run:
                    module: 'functest.opnfv_tests.openstack.tempest.tempest'
                    class: 'TempestDefcore'
#            -
#                name: rally_full
#                criteria: 'success_rate >= 90%'
#                blocking: false
#                description: >-
#                    This test case runs the full suite of scenarios of the OpenStack
#                    Rally suite using several threads and iterations.
#                dependencies:
#                    installer: '^((?!netvirt).)*$'
#                    scenario: ''
#                run:
#                    module: 'functest.opnfv_tests.openstack.rally.rally'
#                    class: 'RallyFull'

    -
        name: vnf
        order: 4
        ci_loop: 'weekly'
        description : >-
            Collection of VNF test cases.
        testcases:
            -
                name: cloudify_ims
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    This test case deploys an OpenSource vIMS solution from Clearwater
                    using the Cloudify orchestrator. It also runs some signaling traffic.
                dependencies:
                    installer: ''
                    scenario: '(ocl)|(nosdn)|^(os-odl)((?!bgpvpn).)*$'
                run:
                    module: 'functest.opnfv_tests.vnf.ims.cloudify_ims'
                    class: 'ImsVnf'
            -
                name: aaa
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    Test suite from Parser project.
                dependencies:
                    installer: ''
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.vnf.aaa.aaa'
                    class: 'AaaVnf'

            -
                name: juju_epc
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    Test suite from OAI project, vEPC deployed with Juju.
                dependencies:
                    installer: 'unknown'
                    scenario: 'unknown'
                run:
                    module: 'functest.opnfv_tests.vnf.epc.epc'
                    class: 'EpcVnf'

            -
                name: orchestra_ims
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    VNF deployment with OpenBaton (Orchestra)
                dependencies:
                    installer: ''
                    scenario: ''
                run:
                    module: 'functest.opnfv_tests.vnf.ims.orchestra_ims'
                    class: 'ImsVnf'

            -
                name: opera_ims
                criteria: 'ret == 0'
                blocking: false
                description: >-
                    Evolution of vIMS
                dependencies:
                    installer: 'unknown'
                    scenario: 'unknown'
                run:
                    module: 'functest.opnfv_tests.vnf.ims.opera_ims'
                    class: 'ImsVnf'

            -
                name: vyos_vrouter
                criteria: 'status == "PASS"'
                blocking: false
                description: >-
                    This test case is vRouter testing.
                dependencies:
                    installer: 'fuel'
                    scenario: 'nosdn-nofeature'
                run:
                    module: 'functest.opnfv_tests.vnf.router.vyos_vrouter'
                    class: 'VrouterVnf'