#! /bin/bash

# shellcheck disable=SC1091
. ./config.sh

start_suite "Test with ebpf restarts and proc fallback"

weave_on "$HOST1" launch
# Manually start scope in order to start EbpfTracker in debug mode
DOCKER_HOST=tcp://${HOST1}:${DOCKER_PORT} CHECKPOINT_DISABLE=true \
    WEAVESCOPE_DOCKER_ARGS="-e SCOPE_DEBUG_BPF=1" \
    "${SCOPE}" launch

server_on "$HOST1"
client_on "$HOST1"

wait_for_containers "$HOST1" 60 nginx client

has_container "$HOST1" nginx
has_container "$HOST1" client
has_connection containers "$HOST1" client nginx

docker_on "$HOST1" exec weavescope sh -c "mkdir /var/run/scope && echo stop > /var/run/scope/debug-bpf"
sleep 5

server_on "$HOST1" "nginx2"
client_on "$HOST1" "client2" "nginx2"

wait_for_containers "$HOST1" 60 nginx2 client2

has_container "$HOST1" nginx2
has_container "$HOST1" client2
has_connection containers "$HOST1" client2 nginx2

# Save stdout for debugging output
exec 3>&1
assert_raises "docker_on $HOST1 logs weavescope 2>&1 | grep 'ebpf tracker died, restarting it' || (docker_on $HOST1 logs weavescope 2>&3 ; false)"

docker_on "$HOST1" exec weavescope sh -c "echo stop > /var/run/scope/debug-bpf"
sleep 5

server_on "$HOST1" "nginx3"
client_on "$HOST1" "client3" "nginx3"

wait_for_containers "$HOST1" 60 nginx3 client3

has_container "$HOST1" nginx3
has_container "$HOST1" client3
has_connection containers "$HOST1" client3 nginx3

assert_raises "docker_on $HOST1 logs weavescope 2>&1 | grep 'ebpf tracker died again, gently falling back to proc scanning' || (docker_on $HOST1 logs weavescope 2>&3 ; false)"

scope_end_suite
