#!/bin/bash
set -euo pipefail

# Plain installed-package test: compile against /usr/share/gocode only.
if [[ $# -ne 0 ]]; then
    echo "Usage: $0" >&2
    exit 2
fi
script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
for tool in go dbus-run-session timeout; do
    command -v "$tool" >/dev/null || { echo "Missing tool: $tool" >&2; exit 2; }
done
factory_dir=/usr/share/gocode/src/github.com/linuxdeepin/go-dbus-factory
[[ -f "$factory_dir/session/org.freedesktop.dbus/auto.go" ]] || {
    echo "Missing installed factory source: $factory_dir" >&2
    exit 2
}
work_dir=$(mktemp -d "${AUTOPKGTEST_TMP:-${TMPDIR:-/tmp}}/factory-dbus-smoke.XXXXXXXX")
trap 'rm -rf -- "$work_dir"' EXIT
cp -- "$script_dir/factory-dbus-smoke.go" "$work_dir/main.go"
timeout --signal=TERM --kill-after=5s 120s \
    env GO111MODULE=off GOPATH=/usr/share/gocode GOWORK=off GOPROXY=off \
    GOSUMDB=off GOTOOLCHAIN=local GOENV=off GOFLAGS= CGO_ENABLED=1 \
    GOCACHE="$work_dir/cache" \
    go build -p 2 -v -o "$work_dir/factory-dbus-smoke" "$work_dir/main.go"

# dbus-run-session creates the daemon. No inherited address reaches the client.
timeout --signal=TERM --kill-after=2s 20s \
    env -u DBUS_SESSION_BUS_ADDRESS -u DBUS_SESSION_BUS_PID \
        -u DBUS_STARTER_ADDRESS -u DBUS_STARTER_BUS_TYPE \
    dbus-run-session -- env FACTORY_SMOKE_PRIVATE_BUS=1 "$work_dir/factory-dbus-smoke"
