.PHONY: test-setup test distclean

LTS_CODENAME = $(shell dpkg-parsechangelog --show-field distribution -l ../debian/changelog | sed 's/^xivo-//' )
HOST_USER=$(shell whoami)
COMPOSE_FILES = $(wildcard assets/*/docker-compose.yml)

PROVD_TEST_BRANCH ?= master
PROVD_DIR = ./xivo-provisioning

DB_TEST_BRANCH ?= master
DB_DIR=./xivo-db

RABBITMQ_TEST_BRANCH ?= master
RABBITMQ_DIR=./rabbitmq

CONFIG_TEST_BRANCH ?= master
CONFIG_DIR = ./xivo-config

POSTGRES_DOCKER=$(DB_DIR)/contribs/postgres-test/Dockerfile
RABBITMQ_DOCKER=$(RABBITMQ_DIR)/contribs/rabbitmq-test/Dockerfile
DOCKER_TAG=confd_integration_tests


test-setup: test-setup-local

test-setup-local: build-provd build-confd build-db build-rabbit
	docker pull dokku/wait
	docker pull p0bailey/docker-flask

build-confd: build-config
	docker build --no-cache -t xivoxc/xivo-confd:$(DOCKER_TAG) ..
	docker build --no-cache -t xivoxc/xivo-confd-test --build-arg VERSION=$(DOCKER_TAG) -f Dockerfile ..

build-db:
	rm -rf $(DB_DIR)
	git clone --depth 1 -b $(DB_TEST_BRANCH) "git@gitlab.com:xivo.solutions/xivo-db.git"
	docker build --no-cache -t xivoxc/xivo-db:$(DOCKER_TAG) $(DB_DIR)
	docker build --no-cache -t xivoxc/xivo-db-test --build-arg VERSION=$(DOCKER_TAG) -f ../contribs/docker/Dockerfile-db ..

build-provd:
	rm -rf $(PROVD_DIR)
	git clone --depth 1 -b $(PROVD_TEST_BRANCH) "git@gitlab.com:xivo.solutions/xivo-provisioning.git"
	docker build --no-cache -t xivoxc/xivo-provd-test $(PROVD_DIR)

build-rabbit:
	rm -rf $(RABBITMQ_DIR)
	git clone --depth 1 -b $(RABBITMQ_TEST_BRANCH) "git@gitlab.com:xivo.solutions/rabbitmq.git"
	docker build --no-cache -t xivoxc/rabbitmq:$(DOCKER_TAG) $(RABBITMQ_DIR)/docker
	docker build --no-cache -t xivoxc/rabbitmq-test --build-arg VERSION=$(DOCKER_TAG) -f ${RABBITMQ_DOCKER} ${RABBITMQ_DIR}

build-config:
	rm -rf $(CONFIG_DIR)
	git clone --depth 1 -b $(CONFIG_TEST_BRANCH) "git@gitlab.com:xivo.solutions/xivo-config.git"
	cp $(CONFIG_DIR)/etc/xivo/default_french_configuration.sql ../

test:
	docker run --rm \
		-v /var/run/docker.sock:/var/run/docker.sock \
		-v /etc/localtime:/etc/localtime:ro \
		-v /etc/timezone:/etc/timezone:ro \
		-v /etc/group:/etc/group:ro \
		-v /etc/passwd:/etc/passwd:ro \
		-v /etc/shadow:/etc/shadow:ro \
		-v /etc/xivo/wizard.d:/etc/xivo/wizard.d \
		-v /var/tmp:/var/tmp \
		-v "`pwd`/..":"`pwd`/.." \
		-w "`pwd`" \
		--network host \
		xivoxc/debian-builder-$(LTS_CODENAME):latest \
		/bin/bash -c "python3 -m venv /tmp/venv3; \
			source /tmp/venv3/bin/activate; \
			cd .. ; python setup.py egg_info ; cd - ;\
			pip install pip==23.0.1; \
			pip install -r test-requirements.txt; \
			INTEGRATION_TEST_TIMEOUT=240 python3 -m unittest discover suite -cv"


# test-env:
# 	python3 -m venv /tmp/venv && source /tmp/venv/bin/activate
run-docker-builder:
	docker run --rm -it \
		-v /var/run/docker.sock:/var/run/docker.sock \
		-v /etc/localtime:/etc/localtime:ro \
		-v /etc/timezone:/etc/timezone:ro \
		-v /etc/group:/etc/group:ro \
		-v /etc/passwd:/etc/passwd:ro \
		-v /etc/shadow:/etc/shadow:ro \
		-v /etc/xivo/wizard.d:/etc/xivo/wizard.d \
		-v /var/tmp:/var/tmp \
		-v "`pwd`/..":"`pwd`/.." \
		-w "`pwd`" \
		--network host \
		xivoxc/debian-builder-$(LTS_CODENAME):latest

# This is to be run after if needed to fix perms of folder
# the run-tests target above may have written file as root
fix-perms:
	docker run --rm \
		-v /etc/localtime:/etc/localtime:ro \
		-v /etc/timezone:/etc/timezone:ro \
		-v /etc/group:/etc/group:ro \
		-v /etc/passwd:/etc/passwd:ro \
		-v /etc/shadow:/etc/shadow:ro \
		-v "`pwd`/..":"`pwd`/.." \
		-w "`pwd`" \
		--network host \
		xivoxc/debian-builder-$(LTS_CODENAME):latest \
		/bin/bash -c "chown -R $(HOST_USER):$(HOST_USER) ../"

stop:
	@$(foreach cpf,$(COMPOSE_FILES),$(shell docker compose -f $(cpf) kill))

clean:
	@$(foreach cpf,$(COMPOSE_FILES),$(shell docker compose -f $(cpf) down))

distclean: fix-perms stop clean
	docker rmi -f xivoxc/xivo-confd:$(DOCKER_TAG)
	docker rmi -f xivoxc/xivo-db:$(DOCKER_TAG)
	docker rmi -f xivoxc/rabbitmq:$(DOCKER_TAG)
	docker rmi -f xivoxc/xivo-confd-test
	docker rmi -f xivoxc/xivo-db-test
	docker rmi -f xivoxc/xivo-provd-test
	docker rmi -f xivoxc/rabbitmq-test
	rm -rf $(DB_DIR) $(PROVD_DIR) $(CONFIG_DIR) $(RABBITMQ_DIR)
	rm -f ../default_french_configuration.sql
	docker network prune -f
