File: test_helper.sh

package info (click to toggle)
debci 3.13
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,656 kB
  • sloc: ruby: 6,516; sh: 2,437; javascript: 100; makefile: 92; perl: 11
file content (197 lines) | stat: -rw-r--r-- 4,885 bytes parent folder | download | duplicates (2)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
set -u

. $(dirname $0)/dep8_helper.sh

TEST_RABBIT_PORT=5677

export DEBCI_RUNNING_TESTS=yes
if [ -z "${DEBUG:-}" ]; then
  export debci_quiet='true'
else
  export debci_quiet='false'
fi
export debci_backend='fake'
export debci_amqp_server="amqp://localhost:$TEST_RABBIT_PORT"
export debci_amqp_queue="debci-$(dpkg --print-architecture)-test"

if [ $# -gt 0 ]; then
  export TESTCASES="$@"
  suite() {
    for t in $TESTCASES; do
      suite_addTest "$t"
    done
  }
  set --
fi

setUp() {
  export __tmpdir="$(mktemp -d --tmpdir debci.data.XXXXXX)"
  mkdir -p $__tmpdir/data
  mkdir -p $__tmpdir/config
  mkdir -p $__tmpdir/lock
  cat > "$__tmpdir/config/seed_list" <<EOF
ruby
ruby-ffi
rubygems-integration
rake
EOF
  export debci_data_basedir="$__tmpdir/data"
  export debci_config_dir="$__tmpdir/config"
  export debci_lock_dir="$__tmpdir/lock"
  export debci_arch=$(dpkg --print-architecture)
  export debci_secrets_dir="$__tmpdir/secrets"
  debci migrate --quiet
}

submit_tests() {
  debci-enqueue $(cat ${debci_config_dir}/seed_list)
}

autopkgtest_dir_for_package() {
  local pkg="$1"
  pkg_dir=$(echo "$pkg" | sed -e 's/\(\(lib\)\?.\).*/\1\/&/')
  echo "${debci_data_basedir}/autopkgtest/unstable/${debci_arch}/${pkg_dir}"
}

tearDown() {
  stop_worker
  stop_collector
  if [ -z "${DEBUG:-}" ]; then
    rm -rf $__tmpdir
  else
    echo "I: test data available in $__tmpdir"
  fi
  unset DEBCI_FAKE_RESULT
  unset DEBCI_FAKE_DEPS
}

oneTimeTearDown() {
  stop_rabbitmq_server
}

result_pass() {
  export DEBCI_FAKE_RESULT="pass"
  "$@"
}

result_fail() {
  export DEBCI_FAKE_RESULT="fail"
  "$@"
}

result_tmpfail() {
  export DEBCI_FAKE_RESULT="tmpfail"
  "$@"
}

TEST_RABBIT_SERVER_DIR=''
TEST_RABBIT_SERVER_PID=''

start_rabbitmq_server() {
  if [ -n "$TEST_RABBIT_SERVER_DIR" ]; then
    return
  fi
  TEST_RABBIT_SERVER_DIR=$(mktemp -d --tmpdir debci-rabbitmq-$(hostname)-XXXXXX)
  mkdir -p $TEST_RABBIT_SERVER_DIR/log
  export RABBITMQ_NODENAME=$(basename "${TEST_RABBIT_SERVER_DIR}")
  export RABBITMQ_NODE_PORT=$TEST_RABBIT_PORT
  echo "management.tcp.port = 1${TEST_RABBIT_PORT}" > "${TEST_RABBIT_SERVER_DIR}/rabbitmq.conf"
  env RABBITMQ_MNESIA_BASE=$TEST_RABBIT_SERVER_DIR/mnesia \
    RABBITMQ_LOG_BASE=$TEST_RABBIT_SERVER_DIR/log \
    RABBITMQ_SCHEMA_DIR=$TEST_RABBIT_SERVER_DIR/schema \
    RABBITMQ_GENERATED_CONFIG_DIR=$TEST_RABBIT_SERVER_DIR/config \
    RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 \
    RABBITMQ_CONFIG_FILE=$TEST_RABBIT_SERVER_DIR/rabbitmq.conf \
    HOME=$TEST_RABBIT_SERVER_DIR \
    /usr/lib/rabbitmq/bin/rabbitmq-server > $TEST_RABBIT_SERVER_DIR/log/output.txt 2>&1 &
  TEST_RABBIT_SERVER_PID=$!

  HOME=$TEST_RABBIT_SERVER_DIR /usr/lib/rabbitmq/bin/rabbitmqctl wait \
      -q $TEST_RABBIT_SERVER_DIR/mnesia/debci-test.pid

  if [ -n "${DEBUG:-}" ]; then
    echo "started local rabbit server"
  fi
}

stop_rabbitmq_server() {
  if [ -z "$TEST_RABBIT_SERVER_DIR" ]; then
    return
  fi
  if [ -n "${DEBUG:-}" ]; then
    echo "stopping local rabbit server"
  fi

  env RABBITMQ_MNESIA_BASE=$TEST_RABBIT_SERVER_DIR/mnesia \
    RABBITMQ_LOG_BASE=$TEST_RABBIT_SERVER_DIR/log \
    RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 \
    HOME=$TEST_RABBIT_SERVER_DIR \
    /usr/lib/rabbitmq/bin/rabbitmqctl stop > $TEST_RABBIT_SERVER_DIR/log/stop_output.txt 2>&1 &

  wait $TEST_RABBIT_SERVER_PID
  if [ -z "${DEBUG:-}" ]; then
    rm -rf "$TEST_RABBIT_SERVER_DIR"
  else
    echo "I: test rabbitmq-server dir available in $TEST_RABBIT_SERVER_DIR"
  fi
  TEST_RABBIT_SERVER_DIR=''
  TEST_RABBIT_SERVER_PID=''
}

TEST_WORKER_PID=''
TEST_PUBLISHER_PID=''

start_worker() {
  export WORKER_START_TIMESTAMP=$(date +%s)
  start_rabbitmq_server
  stop_worker  # in case a test does multiple runs under different modes
  start_collector
  export debci_poll_interval="0.1"
  PATH="$testbin:$PATH" debci worker &
  TEST_WORKER_PID=$!
  PATH="$testbin:$PATH" debci publisher &
  TEST_PUBLISHER_PID=$!
  sleep 0.1
  if [ -n "${DEBUG:-}" ]; then
    echo "started worker $TEST_WORKER_PID"
  fi
}

stop_worker() {
  stop_collector
  if [ -n "$TEST_WORKER_PID" ]; then
    if [ -n "${DEBUG:-}" ]; then
      echo "cleaning up worker $TEST_WORKER_PID"
    fi
    kill $TEST_WORKER_PID 2>/dev/null && wait $TEST_WORKER_PID || true
    TEST_WORKER_PID=
    kill $TEST_PUBLISHER_PID 2>/dev/null && wait $TEST_PUBLISHER_PID || true
    TEST_PUBLISHER_PID=
  fi
}

COLLECTOR_PID=''

start_collector() {
  if [ -z "$COLLECTOR_PID" ]; then # won't start multiple collectors
    debci collector &
    COLLECTOR_PID=$!
  fi
}

stop_collector() {
  if [ -n "$COLLECTOR_PID" ]; then
    kill $COLLECTOR_PID
    amqp-delete-queue --url $debci_amqp_server -q debci_results > /dev/null
    COLLECTOR_PID=''
  fi
}

clean_queue() {
  amqp-delete-queue --url $debci_amqp_server -q $debci_amqp_queue
}

testbin="$(dirname $0)/bin"
wait_for_results() {
  "$testbin"/wait_for_results "$@"
}