From 2107dec509fb604a803aea24f2cc90f7eb907966 Mon Sep 17 00:00:00 2001 From: Lukas Bischofberger Date: Thu, 13 Dec 2018 10:23:14 +0100 Subject: [PATCH 1/4] Acceptance tests: Collect and logs metrics --- .buildkite/pipeline.sh | 2 ++ acceptance/README.md | 5 +++ acceptance/common.sh | 32 +++++++++++++++++++ acceptance/ctl | 4 ++- acceptance/lib.sh | 24 ++++++++------ acceptance/run | 3 -- acceptance/sig_acceptance/test | 9 ++++-- acceptance/topo_ps_reloads_br_acceptance/test | 6 ++-- acceptance/topo_ps_reloads_cs_acceptance/test | 6 ++-- acceptance/topo_sd_reloads_br_acceptance/test | 6 ++-- acceptance/topo_sd_reloads_cs_acceptance/test | 6 ++-- acceptance/topo_sd_reloads_ps_acceptance/test | 6 ++-- python/topology/common.py | 8 ++--- python/topology/docker.py | 12 ++++--- python/topology/go.py | 3 +- python/topology/prometheus.py | 17 +++++++--- python/topology/sig.py | 4 +++ python/topology/supervisor.py | 18 ++++++++--- scion.sh | 2 +- 19 files changed, 129 insertions(+), 44 deletions(-) create mode 100644 acceptance/common.sh diff --git a/.buildkite/pipeline.sh b/.buildkite/pipeline.sh index 399099c171..ec927fa68a 100755 --- a/.buildkite/pipeline.sh +++ b/.buildkite/pipeline.sh @@ -2,6 +2,8 @@ set -e +export RUN_ALL_TESTS=y + export BASE=".buildkite" STEPS="$BASE/steps" diff --git a/acceptance/README.md b/acceptance/README.md index b66e464faa..70cb3b7115 100644 --- a/acceptance/README.md +++ b/acceptance/README.md @@ -49,5 +49,10 @@ acceptance/ctl gsetup ``` This will also rebuild the docker images, taking new code into account. +To run the `setup`, `run` and `teardown` phases of a single test (without gsetup): +``` +acceptance/ctl grun TESTNAME +``` + Note that `acceptance/ctl` will not save artifacts on its own, and all output is dumped on the console. diff --git a/acceptance/common.sh b/acceptance/common.sh new file mode 100644 index 0000000000..42b89d57b4 --- /dev/null +++ b/acceptance/common.sh @@ -0,0 +1,32 @@ +# Acceptance tests common functions + +ia_file() { + echo ${1:?} | sed -e "s/:/_/g" +} + +as_file() { + ia_file ${1:?} | cut -d '-' -f 2 +} + +collect_metrics() { + echo "Reading topology: ${1:?}" + METRICS_DIR=${2:?} + echo "Saving metrics in $METRICS_DIR" + mkdir -p "$METRICS_DIR" + + local elems=$(jq '.BorderRouters | to_entries[] | .key' $1) + for elem in $elems; do + local ip="$(jq .BorderRouters[$elem].InternalAddrs.IPv4.PublicOverlay.Addr $1 | sed -e 's/^"//' -e 's/"$//')" + curl "$ip:30442/metrics" -o "$METRICS_DIR/$(remove_quotes $elem)" -s -S + done + + local elems=$(jq '.SIG | to_entries[] | .key' $1) + for elem in $elems; do + local ip="$(jq .SIG[$elem].Addrs.IPv4.Public.Addr $1 | sed -e 's/^"//' -e 's/"$//')" + curl "$ip:30456/metrics" -o "$METRICS_DIR/$(remove_quotes $elem)" -s -S + done +} + +remove_quotes() { + echo "${1:?}" | sed -e 's/^"//' -e 's/"$//' +} diff --git a/acceptance/ctl b/acceptance/ctl index 6271ba429e..38cab99260 100755 --- a/acceptance/ctl +++ b/acceptance/ctl @@ -32,7 +32,9 @@ case "$COMMAND" in gsetup) global_setup ;; grun) - global_run_single "$1" ;; + artifacts_dir; stats_failed=0 + global_run_single "$1" + [ $stats_failed -eq 0 ] ;; gteardown) global_teardown ;; *) cmd_help; exit 1 ;; diff --git a/acceptance/lib.sh b/acceptance/lib.sh index 46594981f5..556e2c93a6 100644 --- a/acceptance/lib.sh +++ b/acceptance/lib.sh @@ -42,7 +42,13 @@ build_docker_perapp() { make -C docker/perapp } +artifacts_dir() { + export ACCEPTANCE_ARTIFACTS="${ACCEPTANCE_ARTIFACTS:-$(mktemp -d /tmp/acceptance-artifacts-$(date +"%Y%m%d-%H%M%S").XXXXXXX)}" + echo "Acceptance artifacts saved to $ACCEPTANCE_ARTIFACTS" +} + global_setup() { + artifacts_dir local out_dir="$ACCEPTANCE_ARTIFACTS" set -e print_green "[==========]" @@ -89,9 +95,9 @@ test_run_wrapper() { } save_logs() { - local out="$1" - mkdir -p "$out/$TEST_NAME/logs" - mv logs/* "$out/$TEST_NAME/logs" + local out_dir="${ACCEPTANCE_ARTIFACTS:?}" + mkdir -p "$out_dir/$TEST_NAME/logs" + mv logs/* "$out_dir/$TEST_NAME/logs" } test_teardown_wrapper() { @@ -114,7 +120,7 @@ global_run() { if [[ "$TEST_NAME" =~ $regex_matcher ]]; then global_run_single "$TEST_PROGRAM" local fatal_teardown=$? - save_logs "$out" + save_logs if [ $fatal_teardown -ne 0 ]; then print_red "[ FATAL ]" "Teardown failed, stopping test suite" exit 1 @@ -127,13 +133,13 @@ global_run() { } global_run_single() { - local out="${ACCEPTANCE_ARTIFACTS:?}" + local out_dir="${ACCEPTANCE_ARTIFACTS:?}" TEST_PROGRAM="${1:?}" TEST_NAME=$($TEST_PROGRAM name) - mkdir -p "$out/$TEST_NAME" - SETUP_FILE="$out/$TEST_NAME/setup.out" - RUN_FILE="$out/$TEST_NAME/run.out" - TEARDOWN_FILE="$out/$TEST_NAME/teardown.out" + mkdir -p "$out_dir/$TEST_NAME" + SETUP_FILE="$out_dir/$TEST_NAME/setup.out" + RUN_FILE="$out_dir/$TEST_NAME/run.out" + TEARDOWN_FILE="$out_dir/$TEST_NAME/teardown.out" test_setup_wrapper "$SETUP_FILE" && \ test_run_wrapper "$RUN_FILE" test_teardown_wrapper "$TEARDOWN_FILE" diff --git a/acceptance/run b/acceptance/run index 19390b0b28..64b73a4d83 100755 --- a/acceptance/run +++ b/acceptance/run @@ -2,9 +2,6 @@ . acceptance/lib.sh -export ACCEPTANCE_ARTIFACTS=$(mktemp -d /tmp/acceptance-artifacts-$(date +"%Y%m%d-%H%M%S").XXXXXXX) -echo "Acceptance artifacts saved to $ACCEPTANCE_ARTIFACTS" - stats_passed=0 stats_failed=0 stats_skipped=0 diff --git a/acceptance/sig_acceptance/test b/acceptance/sig_acceptance/test index 9fd1c3117f..3f4493ea48 100755 --- a/acceptance/sig_acceptance/test +++ b/acceptance/sig_acceptance/test @@ -4,8 +4,8 @@ TEST_NAME="sig" TEST_TOPOLOGY="topology/Tiny.topo" test_setup() { - set -ex - ./scion.sh topology zkclean -c $TEST_TOPOLOGY -d --sig -n 242.0.0.0/16 + set -e + ./scion.sh topology zkclean -c $TEST_TOPOLOGY -d --sig -n 242.254.0.0/16 ./scion.sh run nobuild ./tools/dc start 'tester*' sleep 10 @@ -16,6 +16,11 @@ test_run() { } test_teardown() { + set -e + METRICS="${ACCEPTANCE_ARTIFACTS:?}/$TEST_NAME/metrics" + collect_metrics "gen/ISD1/ASff00_0_110/br1-ff00_0_110-1/topology.json" "$METRICS" + collect_metrics "gen/ISD1/ASff00_0_111/br1-ff00_0_111-1/topology.json" "$METRICS" + collect_metrics "gen/ISD1/ASff00_0_112/br1-ff00_0_112-1/topology.json" "$METRICS" ./tools/dc down } diff --git a/acceptance/topo_ps_reloads_br_acceptance/test b/acceptance/topo_ps_reloads_br_acceptance/test index 211eb5fd21..d8655d8f05 100755 --- a/acceptance/topo_ps_reloads_br_acceptance/test +++ b/acceptance/topo_ps_reloads_br_acceptance/test @@ -5,12 +5,14 @@ # use the new internal address as next-hop when doing path segment # synchronization with other core PSes. +. acceptance/common.sh + TEST_NAME="topo_ps_reloads_br" TEST_TOPOLOGY="topology/Tiny.topo" SRC_IA=${SRC_IA:-1-ff00:0:112} -SRC_IA_FILE=$(echo $SRC_IA | sed -e "s/:/_/g") -SRC_AS_FILE=$(echo $SRC_IA_FILE | cut -d '-' -f 2) +SRC_IA_FILE="$(ia_file $SRC_IA)" +SRC_AS_FILE="$(as_file $SRC_IA)" DST_IA=${DST_IA:-1-ff00:0:111} test_setup() { diff --git a/acceptance/topo_ps_reloads_cs_acceptance/test b/acceptance/topo_ps_reloads_cs_acceptance/test index b70561cb01..5650e7095f 100755 --- a/acceptance/topo_ps_reloads_cs_acceptance/test +++ b/acceptance/topo_ps_reloads_cs_acceptance/test @@ -4,12 +4,14 @@ # the PS process receives a SIGHUP it will reload the config and push future # crypto to the new address. +. acceptance/common.sh + TEST_NAME="topo_ps_reloads_cs" TEST_TOPOLOGY="topology/Tiny.topo" IA=${IA:-1-ff00:0:112} -IA_FILE=$(echo $IA | sed -e "s/:/_/g") -AS_FILE=$(echo $IA_FILE | cut -d '-' -f 2) +IA_FILE="$(ia_file $SRC_IA)" +AS_FILE="$(as_file $SRC_IA)" test_setup() { set -e diff --git a/acceptance/topo_sd_reloads_br_acceptance/test b/acceptance/topo_sd_reloads_br_acceptance/test index 701ea1e787..e4648b2373 100755 --- a/acceptance/topo_sd_reloads_br_acceptance/test +++ b/acceptance/topo_sd_reloads_br_acceptance/test @@ -5,12 +5,14 @@ # use the new internal address as next-hop in the replies to path requests from # clients. +. acceptance/common.sh + TEST_NAME="topo_sd_reloads_br" TEST_TOPOLOGY="topology/Tiny.topo" SRC_IA=${SRC_IA:-1-ff00:0:112} -SRC_IA_FILE=$(echo $SRC_IA | sed -e "s/:/_/g") -SRC_AS_FILE=$(echo $SRC_IA_FILE | cut -d '-' -f 2) +SRC_IA_FILE="$(ia_file $SRC_IA)" +SRC_AS_FILE="$(as_file $SRC_IA)" DST_IA=${DST_IA:-1-ff00:0:110} test_setup() { diff --git a/acceptance/topo_sd_reloads_cs_acceptance/test b/acceptance/topo_sd_reloads_cs_acceptance/test index 76857293fd..9356e47934 100755 --- a/acceptance/topo_sd_reloads_cs_acceptance/test +++ b/acceptance/topo_sd_reloads_cs_acceptance/test @@ -4,12 +4,14 @@ # the SD process receives a SIGHUP it will reload the config and get future # certificate chains from the new address. +. acceptance/common.sh + TEST_NAME="topo_sd_reloads_cs" TEST_TOPOLOGY="topology/Tiny.topo" SRC_IA=${SRC_IA:-1-ff00:0:112} -SRC_IA_FILE=$(echo $SRC_IA | sed -e "s/:/_/g") -SRC_AS_FILE=$(echo $SRC_IA_FILE | cut -d '-' -f 2) +SRC_IA_FILE="$(ia_file $SRC_IA)" +SRC_AS_FILE="$(as_file $SRC_IA)" DST_IA=${DST_IA:-1-ff00:0:110} test_setup() { diff --git a/acceptance/topo_sd_reloads_ps_acceptance/test b/acceptance/topo_sd_reloads_ps_acceptance/test index da219fd4ab..ead7d63438 100755 --- a/acceptance/topo_sd_reloads_ps_acceptance/test +++ b/acceptance/topo_sd_reloads_ps_acceptance/test @@ -4,12 +4,14 @@ # the SD process receives a SIGHUP it will reload the config and service future # client requests for paths by querying the new PS addresses. +. acceptance/common.sh + TEST_NAME="topo_reloading" TEST_TOPOLOGY="topology/Tiny.topo" SRC_IA=${SRC_IA:-1-ff00:0:112} -SRC_IA_FILE=$(echo $SRC_IA | sed -e "s/:/_/g") -SRC_AS_FILE=$(echo $SRC_IA_FILE | cut -d '-' -f 2) +SRC_IA_FILE="$(ia_file $SRC_IA)" +SRC_AS_FILE="$(as_file $SRC_IA)" DST_IA=${DST_IA:-1-ff00:0:110} test_setup() { diff --git a/python/topology/common.py b/python/topology/common.py index 74b96ae55a..66f995ff15 100644 --- a/python/topology/common.py +++ b/python/topology/common.py @@ -89,16 +89,16 @@ def __repr__(self): return "" % self -def prom_addr_br(br_id, br_ele, port_gen): +def prom_addr_br(br_id, br_ele, port): """Get the prometheus address for a border router""" pub = get_pub(br_ele['InternalAddrs']) - return "[%s]:%s" % (pub['PublicOverlay']['Addr'].ip, port_gen.register(br_id + "prom")) + return "[%s]:%s" % (pub['PublicOverlay']['Addr'].ip, port) -def prom_addr_infra(infra_id, infra_ele, port_gen): +def prom_addr_infra(infra_id, infra_ele, port): """Get the prometheus address for an infrastructure element.""" pub = get_pub(infra_ele['Addrs']) - return "[%s]:%s" % (pub['Public']['Addr'].ip, port_gen.register(infra_id + "prom")) + return "[%s]:%s" % (pub['Public']['Addr'].ip, port) def get_pub(topo_addr): diff --git a/python/topology/docker.py b/python/topology/docker.py index 67de74b26a..3172f3b809 100644 --- a/python/topology/docker.py +++ b/python/topology/docker.py @@ -30,11 +30,15 @@ ArgsTopoDicts, docker_image, DOCKER_USR_VOL, - prom_addr_infra, sciond_name, sciond_svc_name ) from topology.docker_utils import DockerUtilsGenArgs, DockerUtilsGenerator +from topology.prometheus import ( + BS_PROM_PORT, + CS_PROM_PORT, + PS_PROM_PORT +) from topology.sig import SIGGenArgs, SIGGenerator DOCKER_CONF = 'scion-dc.yml' @@ -169,7 +173,7 @@ def _cs_conf(self, topo_id, topo, base): if self.args.cert_server == 'py': sciond = get_default_sciond_path(ISD_AS(topo["ISD_AS"])) entry['command'].append('--spki_cache_dir=cache') - entry['command'].append('--prom=%s' % prom_addr_infra(k, v, self.args.port_gen)) + entry['command'].append('--prom=[0.0.0.0]:%s' % CS_PROM_PORT) entry['command'].append('--sciond_path=%s' % sciond) entry['command'].append(k) entry['command'].append('conf') @@ -195,7 +199,7 @@ def _bs_conf(self, topo_id, topo, base): name = self.prefix + k entry['container_name'] = name entry['volumes'].append('%s:/share/conf:ro' % os.path.join(base, k)) - entry['command'].append('--prom=%s' % prom_addr_infra(k, v, self.args.port_gen)) + entry['command'].append('--prom=[0.0.0.0]:%s' % BS_PROM_PORT) entry['command'].append('--sciond_path=%s' % get_default_sciond_path(ISD_AS(topo["ISD_AS"]))) entry['command'].append(k) @@ -223,7 +227,7 @@ def _ps_conf(self, topo_id, topo, base): entry['volumes'].append('%s:/share/conf:ro' % os.path.join(base, k)) if self.args.path_server == 'py': entry['command'].append('--spki_cache_dir=cache') - entry['command'].append('--prom=%s' % prom_addr_infra(k, v, self.args.port_gen)) + entry['command'].append('--prom=[0.0.0.0]:%s' % PS_PROM_PORT) entry['command'].append('--sciond_path=%s' % get_default_sciond_path(ISD_AS(topo["ISD_AS"]))) entry['command'].append(k) diff --git a/python/topology/go.py b/python/topology/go.py index ed5ec89b11..1c2f9311d9 100755 --- a/python/topology/go.py +++ b/python/topology/go.py @@ -34,6 +34,7 @@ prom_addr_br, PS_CONFIG_NAME, ) +from topology.prometheus import DEFAULT_BR_PROM_PORT class GoGenArgs(ArgsTopoDicts): @@ -66,7 +67,7 @@ def _build_br_conf(self, topo_id, ia, base, name, v): }, 'logging': self._log_entry(name), 'metrics': { - 'Prometheus': prom_addr_br(name, v, self.args.port_gen), + 'Prometheus': prom_addr_br(name, v, DEFAULT_BR_PROM_PORT), }, 'br': { 'Profile': False, diff --git a/python/topology/prometheus.py b/python/topology/prometheus.py index a0f33bdebb..8e23ed7b1b 100755 --- a/python/topology/prometheus.py +++ b/python/topology/prometheus.py @@ -28,6 +28,12 @@ from lib.util import write_file from topology.common import prom_addr_br, prom_addr_infra, ArgsTopoDicts +PS_PROM_PORT = 30453 +BS_PROM_PORT = 30452 +CS_PROM_PORT = 30454 +SIG_PROM_PORT = 30456 +DEFAULT_BR_PROM_PORT = 30442 + class PrometheusGenArgs(ArgsTopoDicts): pass @@ -59,10 +65,13 @@ def generate(self): for topo_id, as_topo in self.args.topo_dicts.items(): ele_dict = defaultdict(list) for br_id, br_ele in as_topo["BorderRouters"].items(): - ele_dict["BorderRouters"].append(prom_addr_br(br_id, br_ele, self.args.port_gen)) - for svc_type in ["BeaconService", "PathService", "CertificateService"]: - for elem_id, elem in as_topo[svc_type].items(): - ele_dict[svc_type].append(prom_addr_infra(elem_id, elem, self.args.port_gen)) + ele_dict["BorderRouters"].append(prom_addr_br(br_id, br_ele, DEFAULT_BR_PROM_PORT)) + for elem_id, elem in as_topo["BeaconService"].items(): + ele_dict["BeaconService"].append(prom_addr_infra(elem_id, elem, BS_PROM_PORT)) + for elem_id, elem in as_topo["PathService"].items(): + ele_dict["PathService"].append(prom_addr_infra(elem_id, elem, PS_PROM_PORT)) + for elem_id, elem in as_topo["CertificateService"].items(): + ele_dict["CertificateService"].append(prom_addr_infra(elem_id, elem, CS_PROM_PORT)) config_dict[topo_id] = ele_dict self._write_config_files(config_dict) diff --git a/python/topology/sig.py b/python/topology/sig.py index 9078e3e82f..532022dde2 100644 --- a/python/topology/sig.py +++ b/python/topology/sig.py @@ -29,6 +29,7 @@ remote_nets, sciond_svc_name ) +from topology.prometheus import SIG_PROM_PORT class SIGGenArgs(ArgsBase): @@ -156,6 +157,9 @@ def _sig_toml(self, topo_id, topo, base): 'console': { 'Level': 'error', } + }, + 'metrics': { + 'Prometheus': '0.0.0.0:%s' % SIG_PROM_PORT } } write_file(os.path.join(base, name, "sig.toml"), toml.dumps(sig_conf)) diff --git a/python/topology/supervisor.py b/python/topology/supervisor.py index f515c01e17..e40f974425 100755 --- a/python/topology/supervisor.py +++ b/python/topology/supervisor.py @@ -36,6 +36,11 @@ prom_addr_infra, PS_CONFIG_NAME, ) +from topology.prometheus import ( + BS_PROM_PORT, + CS_PROM_PORT, + PS_PROM_PORT +) SUPERVISOR_CONF = 'supervisord.conf' @@ -67,11 +72,11 @@ def _as_conf(self, topo, base): entries.extend(self._ps_entries(topo, base)) return entries - def _std_entries(self, topo, topo_key, cmd, base): + def _std_entries(self, topo, topo_key, cmd, base, port): entries = [] for elem_id, elem in topo.get(topo_key, {}).items(): conf_dir = os.path.join(base, elem_id) - prom_addr = prom_addr_infra(elem_id, elem, self.args.port_gen) + prom_addr = prom_addr_infra(elem_id, elem, port) entries.append((elem_id, [cmd, "--prom", prom_addr, "--sciond_path", get_default_sciond_path(ISD_AS(topo["ISD_AS"])), elem_id, conf_dir])) @@ -85,11 +90,13 @@ def _br_entries(self, topo, cmd, base): return entries def _bs_entries(self, topo, base): - return self._std_entries(topo, "BeaconService", "python/bin/beacon_server", base) + return self._std_entries(topo, "BeaconService", "python/bin/beacon_server", base, + BS_PROM_PORT) def _cs_entries(self, topo, base): if self.args.cert_server == "py": - return self._std_entries(topo, "CertificateService", "python/bin/cert_server", base) + return self._std_entries(topo, "CertificateService", "python/bin/cert_server", base, + CS_PROM_PORT) entries = [] for k, v in topo.get("CertificateService", {}).items(): # only a single Go-CS per AS is currently supported @@ -100,7 +107,8 @@ def _cs_entries(self, topo, base): def _ps_entries(self, topo, base): if self.args.path_server == "py": - return self._std_entries(topo, "PathService", "python/bin/path_server", base) + return self._std_entries(topo, "PathService", "python/bin/path_server", base, + PS_PROM_PORT) entries = [] for k, v in topo.get("PathService", {}).items(): # only a single Go-PS per AS is currently supported diff --git a/scion.sh b/scion.sh index 4634256a81..19f2e172eb 100755 --- a/scion.sh +++ b/scion.sh @@ -75,7 +75,7 @@ run_zk() { local addr="127.0.0.1:2181" if is_running_in_docker; then addr="${DOCKER0:-172.17.0.1}:2182" - elif is_docker; then + elif is_docker_be; then addr="$(./tools/docker-ip):2181" fi tools/zkcleanslate --zk "$addr" From c453f88a04b331e6103fd2af4727e77eef2b38c9 Mon Sep 17 00:00:00 2001 From: Lukas Bischofberger Date: Fri, 14 Dec 2018 09:45:04 +0100 Subject: [PATCH 2/4] comments luke r1 --- acceptance/common.sh | 50 ++++++++++++++----- acceptance/sig_acceptance/test | 2 + acceptance/topo_ps_reloads_cs_acceptance/test | 4 +- python/topology/docker.py | 3 ++ 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/acceptance/common.sh b/acceptance/common.sh index 42b89d57b4..d47bc7d570 100644 --- a/acceptance/common.sh +++ b/acceptance/common.sh @@ -1,32 +1,56 @@ # Acceptance tests common functions +####################################### +# Converts ISD-AS representation to its file format +# Arguments: +# ISD-AS +####################################### ia_file() { echo ${1:?} | sed -e "s/:/_/g" } +####################################### +# Converts ISD-AS representation to AS file format, i.e. removes the ISD +# Arguments: +# ISD-AS +####################################### as_file() { ia_file ${1:?} | cut -d '-' -f 2 } +####################################### +# Collects metrics from services that can be found in the topology file +# Metrics are saved in METRICS_DIR/ +# Arguments: +# Topology path +# METRICS_DIR +####################################### collect_metrics() { - echo "Reading topology: ${1:?}" + TOPOLOGY=${1:?} + echo "Reading topology: $TOPOLOGY" METRICS_DIR=${2:?} echo "Saving metrics in $METRICS_DIR" mkdir -p "$METRICS_DIR" - local elems=$(jq '.BorderRouters | to_entries[] | .key' $1) - for elem in $elems; do - local ip="$(jq .BorderRouters[$elem].InternalAddrs.IPv4.PublicOverlay.Addr $1 | sed -e 's/^"//' -e 's/"$//')" - curl "$ip:30442/metrics" -o "$METRICS_DIR/$(remove_quotes $elem)" -s -S - done + collect_elem_metrics 'BorderRouters' '30442' 'InternalAddrs.IPv4.PublicOverlay.Addr' + collect_elem_metrics 'SIG' '30456' + collect_elem_metrics 'BeaconService' '30452' + collect_elem_metrics 'CertificateService' '30454' + collect_elem_metrics 'PathService' '30453' +} - local elems=$(jq '.SIG | to_entries[] | .key' $1) +####################################### +# Collect metrics for one element type +# Arguments: +# Service Type +# Port +# IP Addr Key (optional) +####################################### +collect_elem_metrics() { + local elems=$(jq -r ".${1:?} | keys | .[]" $TOPOLOGY) + local addr_key=${3:-Addrs.IPv4.Public.Addr} for elem in $elems; do - local ip="$(jq .SIG[$elem].Addrs.IPv4.Public.Addr $1 | sed -e 's/^"//' -e 's/"$//')" - curl "$ip:30456/metrics" -o "$METRICS_DIR/$(remove_quotes $elem)" -s -S + local ip="$(jq -r .$1[\"$elem\"].$addr_key $TOPOLOGY)" + curl "$ip:${2:?}/metrics" -o "$METRICS_DIR/$elem" -s -S --connect-timeout 2 || true done } - -remove_quotes() { - echo "${1:?}" | sed -e 's/^"//' -e 's/"$//' -} diff --git a/acceptance/sig_acceptance/test b/acceptance/sig_acceptance/test index 3f4493ea48..25d2448ba2 100755 --- a/acceptance/sig_acceptance/test +++ b/acceptance/sig_acceptance/test @@ -3,6 +3,8 @@ TEST_NAME="sig" TEST_TOPOLOGY="topology/Tiny.topo" +. acceptance/common.sh + test_setup() { set -e ./scion.sh topology zkclean -c $TEST_TOPOLOGY -d --sig -n 242.254.0.0/16 diff --git a/acceptance/topo_ps_reloads_cs_acceptance/test b/acceptance/topo_ps_reloads_cs_acceptance/test index 5650e7095f..ed2a11f250 100755 --- a/acceptance/topo_ps_reloads_cs_acceptance/test +++ b/acceptance/topo_ps_reloads_cs_acceptance/test @@ -10,8 +10,8 @@ TEST_NAME="topo_ps_reloads_cs" TEST_TOPOLOGY="topology/Tiny.topo" IA=${IA:-1-ff00:0:112} -IA_FILE="$(ia_file $SRC_IA)" -AS_FILE="$(as_file $SRC_IA)" +IA_FILE="$(ia_file $IA)" +AS_FILE="$(as_file $IA)" test_setup() { set -e diff --git a/python/topology/docker.py b/python/topology/docker.py index 3172f3b809..81979434b4 100644 --- a/python/topology/docker.py +++ b/python/topology/docker.py @@ -163,6 +163,7 @@ def _cs_conf(self, topo_id, topo, base): 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, + 'network_mode': 'service:scion_disp_%s' % topo_id.file_fmt(), 'volumes': self._std_vol(topo_id), 'command': [] } @@ -189,6 +190,7 @@ def _bs_conf(self, topo_id, topo, base): 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, + 'network_mode': 'service:scion_disp_%s' % topo_id.file_fmt(), 'volumes': self._std_vol(topo_id), 'command': [ '--spki_cache_dir=cache' @@ -217,6 +219,7 @@ def _ps_conf(self, topo_id, topo, base): 'environment': { 'SU_EXEC_USERSPEC': self.user_spec, }, + 'network_mode': 'service:scion_disp_%s' % topo_id.file_fmt(), 'volumes': self._std_vol(topo_id), 'command': [], } From afb1b4120498e48d78e81793f78f1ddc9cb31823 Mon Sep 17 00:00:00 2001 From: Lukas Bischofberger Date: Fri, 14 Dec 2018 10:42:07 +0100 Subject: [PATCH 3/4] remove RUN_ALL_TESTS --- .buildkite/pipeline.sh | 2 -- python/topology/sig.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.buildkite/pipeline.sh b/.buildkite/pipeline.sh index ec927fa68a..399099c171 100755 --- a/.buildkite/pipeline.sh +++ b/.buildkite/pipeline.sh @@ -2,8 +2,6 @@ set -e -export RUN_ALL_TESTS=y - export BASE=".buildkite" STEPS="$BASE/steps" diff --git a/python/topology/sig.py b/python/topology/sig.py index 532022dde2..e9de426702 100644 --- a/python/topology/sig.py +++ b/python/topology/sig.py @@ -63,8 +63,8 @@ def generate(self): self.output_base, topo_id.base_dir(self.args.output_dir)) self._dispatcher_conf(topo_id, base) self._sig_dc_conf(topo_id, base) - self._sig_toml(topo_id, topo, base) - self._sig_json(topo_id, base) + self._sig_toml(topo_id, topo) + self._sig_json(topo_id) return self.dc_conf def _dispatcher_conf(self, topo_id, base): @@ -120,7 +120,7 @@ def _sig_dc_conf(self, topo_id, base): 'command': [remote_nets(self.args.networks, topo_id)] } - def _sig_json(self, topo_id, base): + def _sig_json(self, topo_id): sig_cfg = {"ConfigVersion": 1, "ASes": {}} for t_id, topo in self.args.topo_dicts.items(): if topo_id == t_id: @@ -130,14 +130,14 @@ def _sig_json(self, topo_id, base): sig_cfg['ASes'][str(t_id)]['Nets'].append(net['net']) sig_cfg['ASes'][str(t_id)]['Sigs']['sig'] = {"Addr": str(net['ipv4'])} - cfg = os.path.join(base, 'sig%s' % topo_id.file_fmt(), "cfg.json") + cfg = os.path.join(topo_id.base_dir(self.args.output_dir), 'sig%s' % topo_id.file_fmt(), + "cfg.json") contents_json = json.dumps(sig_cfg, default=json_default, indent=2) write_file(cfg, contents_json + '\n') - def _sig_toml(self, topo_id, topo, base): + def _sig_toml(self, topo_id, topo): name = 'sig%s' % topo_id.file_fmt() net = self.args.networks[name][0] - base = topo_id.base_dir(self.args.output_dir) log_level = 'trace' if self.args.trace else 'debug' sig_conf = { 'sig': { @@ -162,7 +162,8 @@ def _sig_toml(self, topo_id, topo, base): 'Prometheus': '0.0.0.0:%s' % SIG_PROM_PORT } } - write_file(os.path.join(base, name, "sig.toml"), toml.dumps(sig_conf)) + path = os.path.join(topo_id.base_dir(self.args.output_dir), name, "sig.toml") + write_file(path, toml.dumps(sig_conf)) def _disp_vol(self, topo_id): return 'vol_scion_%sdisp_sig_%s:/run/shm/dispatcher:rw' % (self.prefix, topo_id.file_fmt()) From 44efa7506fefddb70fa932fbed4fe353f6ab5aea Mon Sep 17 00:00:00 2001 From: Lukas Bischofberger Date: Fri, 14 Dec 2018 11:13:39 +0100 Subject: [PATCH 4/4] run CI container with network mode host --- .buildkite/steps/acceptance | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/steps/acceptance b/.buildkite/steps/acceptance index 82b13c2e9a..86da9019d9 100755 --- a/.buildkite/steps/acceptance +++ b/.buildkite/steps/acceptance @@ -20,7 +20,7 @@ for test in ./acceptance/*_acceptance; do echo " - $BASE/steps/host_acceptance $test" else echo " env:" - echo " DOCKER_ARGS: \"-e ACCEPTANCE_ARTIFACTS=logs/acceptance\"" + echo " DOCKER_ARGS: \"-e ACCEPTANCE_ARTIFACTS=logs/acceptance --network=host\"" echo " command:" echo " - $BASE/scripts/all_images pull" echo " - $BASE/run_step run_acceptance $test"