frostfs-testcases/Makefile

149 lines
6.2 KiB
Makefile

#!/usr/bin/make -f
.DEFAULT_GOAL := help
SHELL = bash
OUTPUT_DIR = artifacts/
KEYWORDS_REPO = git@github.com:nspcc-dev/neofs-keywords.git
VENVS = $(shell ls -1d venv/*/ | sort -u | xargs basename -a)
ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
DEV_IMAGE_PY ?= registry.spb.yadro.com/tools/pytest-neofs-x86_64:7
SETUP_DIR ?= $(CURDIR)/.setup
DEV_ENV_DEPLOY_DIR ?= /opt/dev-env
DOCKER_NETWORK = --network host
ifeq ($(shell uname -s),Darwin)
DOCKER_NETWORK = --network bridge -p 389:389 -p 636:636
endif
.PHONY: all
all: venvs
include venv_template.mk
run: venvs
@echo "⇒ Test Run"
@robot --timestampoutputs --outputdir $(OUTPUT_DIR) robot/testsuites/integration/
.PHONY: venvs
venvs:
$(foreach venv,$(VENVS),venv.$(venv))
$(foreach venv,$(VENVS),$(eval $(call VENV_template,$(venv))))
submodules:
@git submodule init
@git submodule update --recursive --remote
clean:
rm -rf venv.*
pytest-local:
@echo "⇒ Run Pytest"
export PYTHONPATH=$(ROOT_DIR)/neofs-keywords/lib:$(ROOT_DIR)/neofs-keywords/robot:$(ROOT_DIR)/robot/resources/lib:$(ROOT_DIR)/robot/resources/lib/python_keywords:$(ROOT_DIR)/robot/variables && \
python -m pytest pytest_tests/testsuites/
help:
@echo "⇒ run Run testcases ${R}"
.PHONY: setup-for-remote-devenv
setup-for-remote-devenv:
mkdir -p $(SETUP_DIR)
# Download services directory from remote devenv into $(SETUP_DIR)/services
scp -r root@$(DEV_ENV_HOST_NAME):$(DEV_ENV_DEPLOY_DIR)/services $(SETUP_DIR)
# Generate .env file
echo NEO_MAINNET_ENDPOINT=http://$(DEV_ENV_HOST_NAME):30333 > .env
echo MORPH_ENDPOINT=http://$(DEV_ENV_HOST_NAME):30334 >> .env
echo HTTP_GATE=http://$(DEV_ENV_HOST_NAME):81 >> .env
echo S3_GATE=https://$(DEV_ENV_HOST_NAME):8080 >> .env
echo NEOFS_ENDPOINT=$(DEV_ENV_HOST_NAME):8081 >> .env
# env: blockchain wallets
echo MAINNET_WALLET_PATH="/.setup/services/chain/node-wallet.json" >> .env
echo IR_WALLET_PATH="/.setup/services/ir/wallet01.json" >> .env
# env: storage nodes
echo STORAGE_CONTROL_ENDPOINT_1=$(DEV_ENV_HOST_NAME):8181 >> .env
echo STORAGE_CONTROL_ENDPOINT_2=$(DEV_ENV_HOST_NAME):8182 >> .env
echo STORAGE_CONTROL_ENDPOINT_3=$(DEV_ENV_HOST_NAME):8183 >> .env
echo STORAGE_CONTROL_ENDPOINT_4=$(DEV_ENV_HOST_NAME):8184 >> .env
echo STORAGE_CONTROL_ENDPOINT_PRIVATE="true" >> .env
echo STORAGE_RPC_ENDPOINT_1=$(DEV_ENV_HOST_NAME):8081 >> .env
echo STORAGE_RPC_ENDPOINT_2=$(DEV_ENV_HOST_NAME):8082 >> .env
echo STORAGE_RPC_ENDPOINT_3=$(DEV_ENV_HOST_NAME):8083 >> .env
echo STORAGE_RPC_ENDPOINT_4=$(DEV_ENV_HOST_NAME):8084 >> .env
echo STORAGE_WALLET_PATH_1="/.setup/services/storage/wallet01.json" >> .env
echo STORAGE_WALLET_PATH_2="/.setup/services/storage/wallet02.json" >> .env
echo STORAGE_WALLET_PATH_3="/.setup/services/storage/wallet03.json" >> .env
echo STORAGE_WALLET_PATH_4="/.setup/services/storage/wallet04.json" >> .env
# env: SSH connection to storage node host and bin directory on that host
echo STORAGE_NODE_SSH_USER="root" >> .env
echo STORAGE_NODE_SSH_PRIVATE_KEY_PATH="/root/.ssh/id_rsa" >> .env
echo STORAGE_NODE_BIN_PATH="$(DEV_ENV_DEPLOY_DIR)/vendor" >> .env
# env: s3 gateway public key
ssh root@$(DEV_ENV_HOST_NAME) 'cd $(DEV_ENV_DEPLOY_DIR) && make env | grep NEOFS_IR_CONTRACTS_NEOFS' >> .env
.PHONY: setup-for-sbercloud
setup-for-sbercloud:
mkdir -p $(SETUP_DIR)
# Copy wallets from configuration directory to setup directory
cp -r $(CONFIG_DIR)/alphabet-wallets $(SETUP_DIR)
cp -r $(CONFIG_DIR)/wallets $(SETUP_DIR)
# Copy neofs-adm config to setup directory (and adjust path to wallets)
cat $(CONFIG_DIR)/config.yaml | sed "s|alphabet-wallets:.*|alphabet-wallets: /.setup/alphabet-wallets|" > $(SETUP_DIR)/config.yaml
# Copy SSH key for neofs nodes
cp /jenkins/.ssh/id_rsa $(SETUP_DIR)
# Generate .env file (NEO_MAINNET_ENDPOINT might be incorrect, but we don't use it)
echo NEO_MAINNET_ENDPOINT=http://$(NODE1):40333 > .env
echo MORPH_ENDPOINT=http://$(NODE1):40332 >> .env
echo HTTP_GATE=http://$(NODE1):8888 >> .env
echo S3_GATE=http://$(NODE1):8084 >> .env
echo STORAGE_CONTROL_ENDPOINT_1=localhost:8091 >> .env
echo STORAGE_CONTROL_ENDPOINT_2=localhost:8091 >> .env
echo STORAGE_CONTROL_ENDPOINT_3=localhost:8091 >> .env
echo STORAGE_CONTROL_ENDPOINT_4=localhost:8091 >> .env
echo STORAGE_CONTROL_ENDPOINT_PRIVATE="true" >> .env
echo NEOFS_ENDPOINT=$(NODE1):8080 >> .env
echo STORAGE_RPC_ENDPOINT_1=$(NODE1):8080 >> .env
echo STORAGE_RPC_ENDPOINT_2=$(NODE2):8080 >> .env
echo STORAGE_RPC_ENDPOINT_3=$(NODE3):8080 >> .env
echo STORAGE_RPC_ENDPOINT_4=$(NODE4):8080 >> .env
echo STORAGE_WALLET_PATH_1="/.setup/wallets/node1-storage.json" >> .env
echo STORAGE_WALLET_PATH_2="/.setup/wallets/node2-storage.json" >> .env
echo STORAGE_WALLET_PATH_3="/.setup/wallets/node3-storage.json" >> .env
echo STORAGE_WALLET_PATH_4="/.setup/wallets/node4-storage.json" >> .env
echo MAINNET_WALLET_PATH="/.setup/alphabet-wallets/az.json" >> .env
echo FREE_STORAGE=true >> .env
echo NEOFS_ADM_EXEC="neofs-adm" >> .env
echo NEOFS_ADM_CONFIG_PATH="/.setup/config.yaml" >> .env
# env: SSH connection to storage node host and bin directory on that host
echo STORAGE_NODE_SSH_USER="root" >> .env
echo STORAGE_NODE_SSH_PRIVATE_KEY_PATH="/.setup/id_rsa" >> .env
echo STORAGE_NODE_BIN_PATH="/usr/bin" >> .env
# env: s3 gateway public key
echo S3_GATE_PUB_KEY=$(shell $(NEO_BIN_DIR)/neo-go wallet dump-keys -w $(CONFIG_DIR)/wallets/node1-s3.json | head -2 | tail -1) >> .env
.PHONY: pytest-docker
pytest-docker:
-docker ps
-docker rm neofs_tests_py$(BUILD_NUMBER)
-docker pull $(DEV_IMAGE_PY)
docker run -t --rm \
-w /tests \
--name neofs_tests_py$(BUILD_NUMBER) \
-e PYTHONPATH="/tests/neofs-keywords/lib:/tests/neofs-keywords/robot:/tests/robot/resources/lib:/tests/robot/resources/lib/python_keywords:/tests/robot/variables:/tests/pytest_tests/helpers" \
-v $(CURDIR):/tests \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(NEO_BIN_DIR):/neofs \
-v $(SETUP_DIR):/.setup \
--privileged \
$(DOCKER_NETWORK) \
--env-file $(CURDIR)/.env \
$(DEV_IMAGE_PY) \
-v \
-m "$(CI_MARKERS)" \
--color=no \
--junitxml=/tests/xunit_results.xml \
--alluredir=/tests/allure_results \
--setup-show \
/tests/pytest_tests/testsuites