summaryrefslogtreecommitdiff
path: root/test/testenv
blob: 935726948f33f4c6b30f00814faba2ac0d64d2c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env bash
{
	set -e

	# Parse the arguments
	NETWORK=true
	SUDO=true
	while [[ $# -gt 0 ]]; do
		case "$1" in
			--no-network) shift; unset NETWORK;;
			--network) shift; NETWORK=true;;
			--no-sudo) shift; unset SUDO;;
			--sudo) shift; SUDO=true;;
			--) shift; break;;
			*) break;;
		esac
	done
	export NETWORK SUDO

	if [[ $# == 0 ]]; then
		echo 'You need to run testenv with arguments!' >&2
		exit 1
	fi

	# Set up the working directory, and add the hook to clean it up
	export TMPDIR="$(mktemp --tmpdir -d libretools-test.XXXXXXXXXX)"
	trap "rm -rf '$TMPDIR'" EXIT

	# Set up the install to work with
	destdir=$TMPDIR/destdir

	old_pwd="$(pwd)"
	if [[ -f $0 ]]; then
		cd "${0%/*}"
	fi
	if ! make -C .. install prefix=/usr sysconfdir=/etc DESTDIR="$destdir" &>"$TMPDIR/make-output"; then
		echo 'error creating local install, cannot run tests' >&2
		cat "$TMPDIR/make-output"
		exit 1
	fi
	cd "$old_pwd"

	# Set up the environment
	export PATH="$destdir/usr/bin:$PATH"
	export LIBRETOOLS_LIBDIR="$destdir/usr/lib/libretools"
	export XBS_LIBDIR="$destdir/usr/lib/xbs"
	export HOME=$TMPDIR/home
	export GNUPGHOME="$HOME/.gnupg"
	export XDG_CACHE_HOME="$HOME/.cache"
	export XDG_CONFIG_HOME="$HOME/.config"
	export _librelib_conf_sh_sysconfdir="$destdir/etc"
	export _librelib_conf_sh_pkgconfdir="$destdir/etc/libretools.d"

	mkdir -p -- "$GNUPGHOME"
	chmod 700 -- "$GNUPGHOME"
	unset GPGKEY
	gpg --quiet --no-tty --batch --gen-key <<-eot
	Key-Type: default
	Key-Usage: sign
	Name-Real: Bob Tester
	Name-Email: tester@localhost
	Expire-Date: 0
	%no-protection
	%commit
	eot
	export GPGKEY="$(gpg --quiet --list-secret-keys --with-colons | awk -F: '/^sec:/{print substr($5,9)}')"

	# Hack to respect our variables in sudo
	_sudo() {
		local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR GNUPGHOME XDG_CACHE_HOME XDG_CONFIG_HOME _librelib_conf_sh_sysconfdir GPGKEY)
		local env=()
		local var
		for var in "${vars[@]}"; do
			env+=("$var=${!var}")
		done
		sudo "${env[@]}" "$@"
	}
	printf '%s\n' \
		'#!/bin/bash' \
		"$(declare -f _sudo)" \
		'_sudo "$@"' \
		> "$destdir/usr/bin/testsudo"
	chmod 755 "$destdir/usr/bin/testsudo"

	# Run the tests
	command -- "$@"
}