#
# Copyright 2016 the original author or authors.
#
# 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.
#

ifneq ($(VOLTHA_BUILD),docker)
ifeq ($(VOLTHA_BASE)_set,_set)
$(error To get started, please source the env.sh file)
endif
endif

ifeq ($(TAG),)
TAG := latest
endif

ifeq ($(TARGET_TAG),)
TARGET_TAG := latest
endif

# If no DOCKER_HOST_IP is specified grab a v4 IP address associated with
# the default gateway
ifeq ($(DOCKER_HOST_IP),)
DOCKER_HOST_IP := $(shell ifconfig $$(netstat -rn | grep -E '^(default|0.0.0.0)' | head -1 | awk '{print $$NF}') | grep inet | awk '{print $$2}' | sed -e 's/addr://g')
endif

include setup.mk

ifneq ($(http_proxy)$(https_proxy),)
# Include proxies from the environment
DOCKER_PROXY_ARGS = \
       --build-arg http_proxy=$(http_proxy) \
       --build-arg https_proxy=$(https_proxy) \
       --build-arg ftp_proxy=$(ftp_proxy) \
       --build-arg no_proxy=$(no_proxy) \
       --build-arg HTTP_PROXY=$(HTTP_PROXY) \
       --build-arg HTTPS_PROXY=$(HTTPS_PROXY) \
       --build-arg FTP_PROXY=$(FTP_PROXY) \
       --build-arg NO_PROXY=$(NO_PROXY)
endif

DOCKER_BUILD_ARGS = \
	--build-arg TAG=$(TAG) \
	--build-arg REGISTRY=$(REGISTRY) \
	--build-arg REPOSITORY=$(REPOSITORY) \
	$(DOCKER_PROXY_ARGS) $(DOCKER_CACHE_ARG) \
	 --rm --force-rm \
	$(DOCKER_BUILD_EXTRA_ARGS)

VENVDIR := venv-$(shell uname -s | tr '[:upper:]' '[:lower:]')

DOCKER_IMAGE_LIST = \
	base \
	protoc \
	protos \
	voltha \
	ofagent \
	tools \
	fluentd \
	envoy \
	go-builder \
	netconf \
	shovel \
	dashd \
	cli \
	portainer \
	nginx \
	consul \
	grafana \
	onos \
	unum \
	tester \
	config-push \
	j2 \
	test_runner

# The following list was scavanged from the compose / stack files as well as
# from the Dockerfiles. If nothing else it highlights that VOLTHA is not
# using consistent versions for some of the containers.

# grep  -i "^FROM" docker/Dockerfile.* | grep -v voltha-  | sed -e 's/ as .*$//g' -e 's/\${REGISTRY}//g' | awk '{print $NF}' | grep -v '^scratch' | sed '/:.*$/!s/$/:latest/g' | sort -u | sed -e 's/^/       /g' -e 's/$/ \\/g'
FETCH_BUILD_IMAGE_LIST = \
       alpine:3.6 \
       centos:7 \
       centurylink/ca-certs:latest \
       consul:0.9.2 \
       debian:stretch-slim \
       docker.elastic.co/logstash/logstash:5.6.0 \
       fluent/fluentd:v0.12.42 \
       gliderlabs/registrator:v7 \
       golang:1.9.2 \
       grpc/python:latest \
       kamon/grafana_graphite:3.0 \
       lyft/envoy:29361deae91575a1d46c7a21e913f19e75622ebe \
       maven:3-jdk-8-alpine \
       onosproject/onos:1.10.9 \
       opennms/horizon-core-web:19.0.1-1 \
       portainer/portainer:1.15.2 \
       ubuntu:xenial

# find compose -type f | xargs grep image: | awk '{print $NF}' | grep -v voltha- | sed -e 's/\"//g' -e 's/\${REGISTRY}//g' -e 's/:\${.*:-/:/g' -e 's/\}//g' -e '/:.*$/!s/$/:latest/g' | sort -u | sed -e 's/^/        /g' -e 's/$/ \\/g'
FETCH_COMPOSE_IMAGE_LIST = \
        consul:0.9.2 \
        docker.elastic.co/elasticsearch/elasticsearch:5.6.0 \
        fluent/fluentd:latest \
        fluent/fluentd:v0.12.42 \
        gliderlabs/registrator:latest \
        kamon/grafana_graphite:latest \
        marcelmaatkamp/freeradius:latest \
        postgres:9.6.1 \
        quay.io/coreos/etcd:v3.2.9 \
        registry:2 \
        tianon/true:latest \
        wurstmeister/kafka:latest \
        wurstmeister/zookeeper:latest

# find k8s -type f | xargs grep image: | awk '{print $NF}' | sed -e 's/\"//g' | sed '/:.*$/!s/$/:latest/g' | sort -u | sed -e 's/^/       /g' -e 's/$/ \\/g'
# Manually remove some image from this list as they don't reflect the new 
# naming conventions for the VOLTHA build
FETCH_K8S_IMAGE_LIST = \
       consul:0.9.2 \
       quay.io/coreos/etcd-operator:v0.7.2 \
       wurstmeister/kafka:1.0.0 \
       zookeeper:3.4.11

FETCH_IMAGE_LIST = $(shell echo $(FETCH_BUILD_IMAGE_LIST) $(FETCH_COMPOSE_IMAGE_LIST) $(FETCH_K8S_IMAGE_LIST) | tr ' ' '\n' | sort -u)

.PHONY: $(DIRS) $(DIRS_CLEAN) $(DIRS_FLAKE8) flake8 base voltha ofagent netconf shovel onos dashd cli portainer grafana nginx consul envoy go-builder envoyd tools opennms logstash unum start stop tag push pull

# This should to be the first and default target in this Makefile
help:
	@echo "Usage: make [<target>]"
	@echo "where available targets are:"
	@echo
	@echo "build        : Build the Voltha protos and docker images.\n\
               If this is the first time you are building, choose \"make build\" option."
	@echo "production   : Build voltha for production deployment"
	@echo "clean        : Remove files created by the build and tests"
	@echo "distclean    : Remove venv directory"
	@echo "fetch        : Pre-fetch artifacts for subsequent local builds"
	@echo "flake8       : Run specifically flake8 tests"
	@echo "help         : Print this help"
	@echo "protoc       : Build a container with protoc installed"
	@echo "protos       : Compile all grpc/protobuf files"
	@echo "rebuild-venv : Rebuild local Python virtualenv from scratch"
	@echo "venv         : Build local Python virtualenv if did not exist yet"
	@echo "utest        : Run all unit tests"
	@echo "itest        : Run all integration tests"
	@echo "containers   : Build all the docker containers"
	@echo "base         : Build the base docker container used by all other dockers"
	@echo "voltha       : Build the voltha docker container"
	@echo "ofagent      : Build the ofagent docker container"
	@echo "netconf      : Build the netconf docker container"
	@echo "shovel       : Build the shovel docker container"
	@echo "onos         : Build the onos docker container"
	@echo "dashd        : Build the dashd docker container"
	@echo "cli          : Build the cli docker container"
	@echo "portainer    : Build the portainer docker container"
	@echo "grafana      : Build the grafana docker container"
	@echo "nginx        : Build the nginx docker container"
	@echo "consul       : Build the consul docker container"
	@echo "unum         : Build the unum docker container"
	@echo "j2           : Build the Jinja2 template container"
	@echo "test_runner  : Build a container from which tests are run"
	@echo "start        : Start VOLTHA on the current system"
	@echo "stop         : Stop VOLTHA on the current system"
	@echo "tag          : Tag a set of images"
	@echo "push         : Push the docker images to an external repository"
	@echo "pull         : Pull the docker images from a repository"
	@echo

## New directories can be added here
DIRS:=\
voltha/northbound/openflow \
voltha/northbound/openflow/agent \
voltha/northbound/openflow/oftest

## If one directory depends on another directory that
## dependency can be expressed here
##
## For example, if the Tibit directory depended on the eoam
## directory being built first, then that can be expressed here.
##  driver/tibit: eoam

# Parallel Build
$(DIRS):
	@echo "    MK $@"
	$(Q)$(MAKE) -C $@

# Parallel Clean
DIRS_CLEAN = $(addsuffix .clean,$(DIRS))
$(DIRS_CLEAN):
	@echo "    CLEAN $(basename $@)"
	$(Q)$(MAKE) -C $(basename $@) clean

# Parallel Flake8
DIRS_FLAKE8 = $(addsuffix .flake8,$(DIRS))
$(DIRS_FLAKE8):
	@echo "    FLAKE8 $(basename $@)"
	-$(Q)$(MAKE) -C $(basename $@) flake8

build: protoc protos go-builder containers

production: protoc protos go-builder prod-containers

jenkins: build

jenkins-containers: base voltha ofagent netconf consul cli envoy fluentd unum j2

prod-containers: base voltha ofagent netconf shovel onos dashd cli grafana consul tools envoy fluentd unum j2

containers: base voltha ofagent netconf shovel onos tester config-push dashd cli portainer grafana nginx consul tools envoy fluentd unum j2 test_runner

base:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-base:${TAG} -f docker/Dockerfile.base .

ifneq ($(VOLTHA_BUILD),docker)
voltha: voltha-adapters
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-voltha:${TAG} -f docker/Dockerfile.voltha .
else
voltha:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-voltha:${TAG} -f docker/Dockerfile.voltha_d .
endif

voltha-adapters:
	make -C voltha/adapters/asfvolt16_olt

ofagent:
ifneq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-ofagent:${TAG} -f docker/Dockerfile.ofagent .
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-ofagent:${TAG} -f docker/Dockerfile.ofagent_d .
endif

tools:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-tools:${TAG} -f docker/Dockerfile.tools .

fluentd:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-fluentd:${TAG} -f docker/Dockerfile.fluentd .

envoy: envoyd
ifneq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-envoy:${TAG} -f docker/Dockerfile.envoy .
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-envoy:${TAG} -f docker/Dockerfile.envoy_d .
endif

envoyd:
ifneq ($(VOLTHA_BUILD),docker)
	make -C envoy
	make -C envoy/go/envoyd
endif

go-builder:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-go-builder:${TAG} -f envoy/go/golang-builder/Dockerfile ./envoy/go/golang-builder

netconf:
ifneq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-netconf:${TAG} -f docker/Dockerfile.netconf .
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-netconf:${TAG} -f docker/Dockerfile.netconf_d .
endif

netopeer:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-netopeer:${TAG} -f docker/Dockerfile.netopeer .

shovel:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-shovel:${TAG} -f docker/Dockerfile.shovel .

dashd:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-dashd:${TAG} -f docker/Dockerfile.dashd .

cli:
ifneq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-cli:${TAG} -f docker/Dockerfile.cli .
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-cli:${TAG} -f docker/Dockerfile.cli_d .
endif

portainer:
ifneq ($(VOLTHA_BUILD),docker)
	REGISTRY=${REGISTRY} REPOSITORY=${REPOSITORY} TAG=${TAG} portainer/buildPortainer.sh
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-portainer:${TAG} -f docker/Dockerfile.portainer_d .
endif

nginx:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-nginx:${TAG} -f docker/Dockerfile.nginx .

consul:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-consul:${TAG} -f docker/Dockerfile.consul .

grafana:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-grafana:${TAG} -f docker/Dockerfile.grafana .

onos:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-onos:${TAG} -f docker/Dockerfile.onos docker

unum:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-unum:${TAG} -f unum/Dockerfile ./unum

tester:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-tester:${TAG} -f docker/Dockerfile.tester docker

config-push:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-config-push:${TAG} -f docker/Dockerfile.configpush docker

opennms:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-opennms:${TAG} -f docker/Dockerfile.opennms .

logstash:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-logstash:${TAG} -f docker/Dockerfile.logstash .

j2:
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-j2:${TAG} -f docker/Dockerfile.j2 docker

test_runner:
ifeq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-test_runner:${TAG} -f docker/Dockerfile.test_runner .
endif

start:
	bash -c 'echo $$VOLTHA_LOGS &&  TMP_STACK_FILE=$$(mktemp -u) && \
		echo $$TMP_STACK_FILE && \
		SWARM_MANAGER_COUNT=$$(docker node ls | grep Ready | egrep "(Leader)|(Reachable)" | wc -l | sed -e "s/ //g") && \
		cat ./compose/voltha-stack.yml.j2 2>&1 | docker run -e RADIUS_ROOT=$$RADIUS_ROOT -e CONSUL_ROOT=$$CONSUL_ROOT -e VOLTHA_LOGS=$$VOLTHA_LOGS -e SWARM_MANAGER_COUNT=$$SWARM_MANAGER_COUNT --rm -i ${REGISTRY}${REPOSITORY}voltha-j2:${TAG} - 2>&1 > $$TMP_STACK_FILE && \
	        docker stack deploy -c $$TMP_STACK_FILE voltha && \
	        rm -f $$TMP_STACK_FILE'

stop:
	docker stack rm voltha

tag: $(patsubst  %,%.tag,$(DOCKER_IMAGE_LIST))

push: tag $(patsubst  %,%.push,$(DOCKER_IMAGE_LIST))

pull: $(patsubst  %,%.pull,$(DOCKER_IMAGE_LIST))

%.tag:
	docker tag ${REGISTRY}${REPOSITORY}voltha-$(subst .tag,,$@):${TAG} ${TARGET_REGISTRY}${TARGET_REPOSITORY}voltha-$(subst .tag,,$@):${TARGET_TAG}

%.push:
	docker push ${TARGET_REGISTRY}${TARGET_REPOSITORY}voltha-$(subst .push,,$@):${TARGET_TAG}

%.pull:
	docker pull ${REGISTRY}${REPOSITORY}voltha-$(subst .pull,,$@):${TAG}

protoc:
ifeq ($(VOLTHA_BUILD),docker)
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-protoc:${TAG} -f docker/Dockerfile.protoc .
endif

protos:
ifneq ($(VOLTHA_BUILD),docker)
	make -C voltha/protos
	make -C ofagent/protos
	make -C netconf/protos
else
	docker build $(DOCKER_BUILD_ARGS) -t ${REGISTRY}${REPOSITORY}voltha-protos:${TAG} -f docker/Dockerfile.protos .
endif

install-protoc:
	make -C voltha/protos install-protoc

clean:
	find voltha -name '*.pyc' | xargs rm -f

distclean: clean
	rm -rf ${VENVDIR}

fetch:
	@bash -c ' \
		for i in $(FETCH_IMAGE_LIST); do \
			docker pull $$i; \
		done'

fetch-jenkins: fetch

purge-venv:
	rm -fr ${VENVDIR}

rebuild-venv: purge-venv venv

ifneq ($(VOLTHA_BUILD),docker)
venv: ${VENVDIR}/.built
else
venv:
endif

${VENVDIR}/.built:
	@ virtualenv ${VENVDIR}
	@ . ${VENVDIR}/bin/activate && \
	    pip install --upgrade pip; \
	    if ! pip install -r requirements.txt; \
	    then \
	        echo "On MAC OS X, if the installation failed with an error \n'<openssl/opensslv.h>': file not found,"; \
	        echo "see the BUILD.md file for a workaround"; \
	    else \
	        uname -s > ${VENVDIR}/.built; \
	    fi

ifneq ($(VOLTHA_BUILD),docker)
test: venv protos run-as-root-tests
	@ echo "Executing all tests"
	. ${VENVDIR}/bin/activate && \
	nosetests -s tests \
	--exclude-dir=./tests/itests/run_as_root/
else
test: protos test_runner run-as-root-tests
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		nosetests -s tests --exclude-dir=./tests/itests/run_as_root/
endif

ifneq ($(VOLTHA_BUILD),docker)
utest: venv protos
	@ echo "Executing all unit tests"
	. ${VENVDIR}/bin/activate && \
	    for d in $$(find ./tests/utests -type d|sort -nr); do echo $$d:; nosetests $$d; done
else
utest: protos test_runner
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		bash -c \
		'for d in $$(find ./tests/utests -type d|sort -nr); do \
			echo $$d:; \
			nosetests $$d; \
		done'
endif

ifneq ($(VOLTHA_BUILD),docker)
utest-with-coverage: venv protos
	@ echo "Executing all unit tests and producing coverage results"
	. ${VENVDIR}/bin/activate && \
        for d in $$(find ./tests/utests -type d|sort -nr); do echo $$d:; \
	nosetests --with-xcoverage --with-xunit --cover-package=voltha,common,ofagent $$d; done
else
utest-with-coverage: protos test_runner
	@echo "Executing all unit tests and producing coverage results"
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		bash -c \
		'for d in $$(find ./tests/utests -type d|sort -nr); do \
			echo $$d:; \
			nosetests --with-xcoverage --with-xunit --cover-package=voltha,common,ofagent $$d; \
		done'
endif

ifneq ($(VOLTHA_BUILD),docker)
itest: venv run-as-root-tests
	@ echo "Executing all integration tests"
	. ${VENVDIR}/bin/activate && \
	rm -rf /tmp/fluentd/* && \
	REGISTRY=${REGISTRY} \
	REPOSITORY=${REPOSITORY} \
	TAG=${TAG} \
	DOCKER_HOST_IP=${DOCKER_HOST_IP} \
	nosetests -s  \
		tests/itests/docutests/build_md_test.py \
		--exclude-dir=./tests/utests/ \
		--exclude-dir=./tests/itests/run_as_root/
else
itest: protos test_runner
	@ echo "Executing all integration tests"
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		nosetests -s  \
			tests/itests/docutests/build_md_test.py \
			--exclude-dir=./tests/utests/ \
			--exclude-dir=./tests/itests/run_as_root/
endif

ifneq ($(VOLTHA_BUILD),docker)
smoke-test: venv run-as-root-tests
	@ echo "Executing smoke tests"
	. ${VENVDIR}/bin/activate && \
	rm -rf /tmp/fluentd/* && \
	REGISTRY=${REGISTRY} \
	REPOSITORY=${REPOSITORY} \
	TAG=${TAG} \
	DOCKER_HOST_IP=${DOCKER_HOST_IP} \
	nosetests -s  \
	tests/itests/docutests/build_md_test.py:BuildMdTests.test_07_start_all_containers \
	--exclude-dir=./tests/itests/run_as_root/
else
smoke-test: protos test_runner run-as-root-tests
	@ echo "Executing smoke tests"
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		nosetests -s  \
			tests/itests/docutests/build_md_test.py:BuildMdTests.test_07_start_all_containers \
			--exclude-dir=./tests/itests/run_as_root/
endif

ifneq ($(VOLTHA_BUILD),docker)
jenkins-test: venv
	@ echo "Executing jenkins smoke tests"
	. ${VENVDIR}/bin/activate && \
	rm -rf /tmp/fluentd/* && \
	REGISTRY=${REGISTRY} \
	REPOSITORY=${REPOSITORY} \
	TAG=${TAG} \
	DOCKER_HOST_IP=${DOCKER_HOST_IP} \
	nosetests -s  \
		tests/itests/docutests/build_md_test.py:BuildMdTests.test_07_start_all_containers \
		--exclude-dir=./tests/itests/run_as_root/
else
jenkins-test: protos test_runner
	@ echo "Executing jenkins smoke tests"
	@ echo "Starting VOLTHA as docker-compose services"
	docker run \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --net=host -v /var/run/docker.sock:/var/run/docker.sock \
		${REGISTRY}${REPSOITORY}voltha-test_runner:${TAG} \
		nosetests -s \
			tests/itests/docutests/build_md_test.py:BuildMdTests.test_07_start_all_containers \
			--exclude-dir=./tests/itests/run_as_root/
endif

ifneq ($(VOLTHA_BUILD),docker)
run-as-root-tests:
	docker run -i --rm -v /cord/incubator/voltha:/voltha --privileged ${REGISTRY}${REPOSITORY}voltha-base:${TAG} env PYTHONPATH=/voltha python /voltha/tests/itests/run_as_root/test_frameio.py
else
run-as-root-tests:
	docker run \
		-e VOLTHA_BUILD=docker \
		-e REGISTRY=${REGISTRY} \
		-e REPOSITORY=${REPOSITORY} \
		-e TAG=${TAG} \
		-e DOCKER_HOST_IP=${DOCKER_HOST_IP} \
		--rm --privileged \
		${REGISTRY}${REPOSITORY}voltha-test_runner:${TAG} \
		env PYTHONPATH=/work python tests/itests/run_as_root/test_frameio.py
endif

flake8: $(DIRS_FLAKE8)

# end file
