File: util.bash

package info (click to toggle)
mimic 0.7.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,204 kB
  • sloc: ansic: 484,549; sh: 490; makefile: 268
file content (64 lines) | stat: -rw-r--r-- 1,670 bytes parent folder | download
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
_setup() {
  mkfifo ${fifo[@]}
  for _i in {0..1}; do
    sleep infinity >${fifo[$_i]} &
    fifo_pid[$_i]=$!
  done
}

_teardown() {
  kill -9 ${fifo_pid[@]} 2>/dev/null
  kill -INT ${socat_pid[@]} ${mimic_pid[@]} 2>/dev/null
  wait ${mimic_pid[@]}
  rm -f ${fifo[@]} ${output[@]}
}

generate_port() {
  echo $((SRANDOM % (65536 - 10000) + 10000))
}

strip_ip_cidr() {
  sed 's/\/[0-9]\+$//' <(echo "$1")
}

setup_mimic_socat() {
  local port=($(generate_port) $(generate_port))

  for _i in {0..1}; do
    local _o=$((1 - $_i))
    if [ "$1" = v6 ]; then
      local self_ip_port="[$(strip_ip_cidr ${veth_ipv6[$_i]})]:${port[$_i]}"
      local opposite_ip_port="[$(strip_ip_cidr ${veth_ipv6[$_o]})]:${port[$_o]}"
    else
      local self_ip_port="$(strip_ip_cidr ${veth_ipv4[$_i]}):${port[$_i]}"
      local opposite_ip_port="$(strip_ip_cidr ${veth_ipv4[$_o]}):${port[$_o]}"
    fi

    ip netns exec ${netns[$_i]} "$BATS_TEST_DIRNAME/../out/mimic" \
      run ${veth[$_i]} -flocal="$self_ip_port" $MIMIC_TEST_EXTRA_ARGS \
      &
    mimic_pid[$_i]=$!
    echo "$! is mimic"

    # FIXME: Sometimes the second socat will exit without any messages
    ip netns exec ${netns[$_i]} socat - \
      "udp:$opposite_ip_port,bind=$self_ip_port" \
      <${fifo[$_i]} >${output[$_i]} \
      &
    socat_pid[$_i]=$!
    echo "$! is socat"
  done

  # Wait for socat and mimic to set up
  sleep $((5 * SLEEP_MULTIPLIER))
}

# Check Mimic is still running.
#
# Because Mimic layers UDP traffic transparently, when both ends fails to run
# Mimic, the result will still be correct.
check_mimic_is_alive() {
  for _i in {0..1}; do
    ps -p ${mimic_pid[$_i]} >/dev/null
  done
}