t0060-daemon.sh 5.88 KB
Newer Older
Łukasz Magiera's avatar
Łukasz Magiera committed
1
#!/usr/bin/env bash
2 3 4 5 6 7 8 9 10
#
# Copyright (c) 2014 Juan Batiz-Benet
# MIT Licensed; see the LICENSE file in this repository.
#

test_description="Test daemon command"

. lib/test-lib.sh

Dominic Della Valle's avatar
Dominic Della Valle committed
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
test_expect_success "test environment initialized" '
  export ORIG_IPFS_PATH="$IPFS_PATH"

  export ORIG_PATH="$(pwd)/.ipfs"
  export IPFS_PATH="$ORIG_PATH"
  export CLONE_PATH="$(pwd)/.ipfs-clone"
  ipfs init --profile=badgerds > /dev/null
'

export IPFS_PATH=$CLONE_PATH
test_launch_ipfs_daemon --init --init-config="$ORIG_PATH/config"
test_kill_ipfs_daemon

test_expect_success "daemon initialization with existing config works" '
  ipfs config "Datastore.Spec.child.path" >actual &&
  test $(cat actual) = "badgerds"
'

test_expect_success "clean up daemon clone" '
  rm -rf "$CLONE_PATH"
'
test_launch_ipfs_daemon --init --init-config="$ORIG_PATH/config" --init-profile=randomports
test_kill_ipfs_daemon

test_expect_failure "daemon initialization with existing config + profiles works" '
  ipfs config Addresses >clone_conf &&
  IPFS_PATH=$ORIG_PATH &&
  ipfs config Addresses >orig_conf &&
  test_cmp clone_conf orig_conf
'

test_expect_success "clean up test environment" '
  rm -rf "$CLONE_PATH"
  rm -rf "$ORIG_PATH"

  export IPFS_PATH=$ORIG_IPFS_PATH
'
48

Jeromy's avatar
Jeromy committed
49
test_init_ipfs
Stephen Whitmore's avatar
Stephen Whitmore committed
50
test_launch_ipfs_daemon
51

Stephen Whitmore's avatar
Stephen Whitmore committed
52
# this errors if we didn't --init $IPFS_PATH correctly
53
test_expect_success "'ipfs config Identity.PeerID' works" '
Łukasz Magiera's avatar
Łukasz Magiera committed
54
  PEERID=$(ipfs config Identity.PeerID)
55 56
'

57
test_expect_success "'ipfs swarm addrs local' works" '
Łukasz Magiera's avatar
Łukasz Magiera committed
58
  ipfs swarm addrs local >local_addrs
59 60
'

61
test_expect_success "ipfs swarm addrs listen; works" '
Łukasz Magiera's avatar
Łukasz Magiera committed
62
  ipfs swarm addrs listen >listen_addrs
63 64
'

65
test_expect_success "ipfs peer id looks good" '
Łukasz Magiera's avatar
Łukasz Magiera committed
66
  test_check_peerid "$PEERID"
67 68
'

rht's avatar
rht committed
69 70 71
# this is for checking SetAllowedOrigins race condition for the api and gateway
# See https://github.com/ipfs/go-ipfs/pull/1966
test_expect_success "ipfs API works with the correct allowed origin port" '
Łukasz Magiera's avatar
Łukasz Magiera committed
72
  curl -s -X GET -H "Origin:http://localhost:$API_PORT" -I "http://$API_ADDR/api/v0/version"
rht's avatar
rht committed
73 74 75
'

test_expect_success "ipfs gateway works with the correct allowed origin port" '
Łukasz Magiera's avatar
Łukasz Magiera committed
76
  curl -s -X GET -H "Origin:http://localhost:$GWAY_PORT" -I "http://$GWAY_ADDR/api/v0/version"
rht's avatar
rht committed
77 78
'

79
test_expect_success "ipfs daemon output looks good" '
Łukasz Magiera's avatar
Łukasz Magiera committed
80 81
  STARTFILE="ipfs cat /ipfs/$HASH_WELCOME_DOCS/readme" &&
  echo "Initializing daemon..." >expected_daemon &&
Overbool's avatar
Overbool committed
82
  ipfs version --all >> expected_daemon &&
Łukasz Magiera's avatar
Łukasz Magiera committed
83 84 85
  sed "s/^/Swarm listening on /" listen_addrs >>expected_daemon &&
  sed "s/^/Swarm announcing /" local_addrs >>expected_daemon &&
  echo "API server listening on '$API_MADDR'" >>expected_daemon &&
86
  echo "WebUI: http://'$API_ADDR'/webui" >>expected_daemon &&
Łukasz Magiera's avatar
Łukasz Magiera committed
87 88 89
  echo "Gateway (readonly) server listening on '$GWAY_MADDR'" >>expected_daemon &&
  echo "Daemon is ready" >>expected_daemon &&
  test_cmp expected_daemon actual_daemon
90 91
'

92
test_expect_success ".ipfs/ has been created" '
Łukasz Magiera's avatar
Łukasz Magiera committed
93 94 95 96 97
  test -d ".ipfs" &&
  test -f ".ipfs/config" &&
  test -d ".ipfs/datastore" &&
  test -d ".ipfs/blocks" ||
  test_fsh ls -al .ipfs
98 99
'

100 101 102
# begin same as in t0010

test_expect_success "ipfs version succeeds" '
Łukasz Magiera's avatar
Łukasz Magiera committed
103
  ipfs version >version.txt
104 105 106
'

test_expect_success "ipfs version output looks good" '
Łukasz Magiera's avatar
Łukasz Magiera committed
107 108
  egrep "^ipfs version [0-9]+\.[0-9]+\.[0-9]" version.txt >/dev/null ||
  test_fsh cat version.txt
109 110
'

111 112 113 114 115 116 117 118 119 120
test_expect_success "ipfs version deps succeeds" '
  ipfs version deps >deps.txt
'

test_expect_success "ipfs version deps output looks good" '
  head -1 deps.txt | grep "go-ipfs@(devel)" &&
  [[ $(tail -n +2 deps.txt | egrep -v -c "^[^ @]+@v[^ @]+( => [^ @]+@v[^ @]+)?$") -eq 0 ]] ||
  test_fsh cat deps.txt
'

121
test_expect_success "ipfs help succeeds" '
Łukasz Magiera's avatar
Łukasz Magiera committed
122
  ipfs help >help.txt
123 124 125
'

test_expect_success "ipfs help output looks good" '
Łukasz Magiera's avatar
Łukasz Magiera committed
126 127 128
  egrep -i "^Usage" help.txt >/dev/null &&
  egrep "ipfs .* <command>" help.txt >/dev/null ||
  test_fsh cat help.txt
129 130
'

Christian Couder's avatar
Christian Couder committed
131
# netcat (nc) is needed for the following test
Jakub Sztandera's avatar
Jakub Sztandera committed
132 133
test_expect_success "socat is available" '
  type socat >/dev/null
Christian Couder's avatar
Christian Couder committed
134
'
135

Christian Couder's avatar
Christian Couder committed
136
# check transport is encrypted
rht's avatar
rht committed
137
test_expect_success "transport should be encrypted" '
Jakub Sztandera's avatar
Jakub Sztandera committed
138
  socat - tcp:localhost:$SWARM_PORT,connect-timeout=1 > swarmnc < ../t0060-data/mss-ls &&
Łukasz Magiera's avatar
Łukasz Magiera committed
139 140 141
  grep -q "/secio" swarmnc &&
  test_must_fail grep -q "/plaintext/1.0.0" swarmnc ||
  test_fsh cat swarmnc
142 143
'

144
test_expect_success "output from streaming commands works" '
Łukasz Magiera's avatar
Łukasz Magiera committed
145
  test_expect_code 28 curl -m 5 http://localhost:$API_PORT/api/v0/stats/bw\?poll=true > statsout
146 147 148
'

test_expect_success "output looks good" '
Łukasz Magiera's avatar
Łukasz Magiera committed
149 150 151 152
  grep TotalIn statsout > /dev/null &&
  grep TotalOut statsout > /dev/null &&
  grep RateIn statsout > /dev/null &&
  grep RateOut statsout >/dev/null
153 154
'

155 156
# end same as in t0010

157
test_expect_success "daemon is still running" '
Łukasz Magiera's avatar
Łukasz Magiera committed
158
  kill -0 $IPFS_PID
159 160 161
'

test_expect_success "'ipfs daemon' can be killed" '
Łukasz Magiera's avatar
Łukasz Magiera committed
162
  test_kill_repeat_10_sec $IPFS_PID
163 164
'

165
test_expect_success "'ipfs daemon' should be able to run with a pipe attached to stdin (issue #861)" '
Łukasz Magiera's avatar
Łukasz Magiera committed
166 167 168 169
  yes | ipfs daemon >stdin_daemon_out 2>stdin_daemon_err &
  DAEMON_PID=$!
  test_wait_for_file 20 100ms "$IPFS_PATH/api" &&
  test_set_address_vars stdin_daemon_out
Jeromy's avatar
Jeromy committed
170 171 172
'

test_expect_success "daemon with pipe eventually becomes live" '
Łukasz Magiera's avatar
Łukasz Magiera committed
173 174 175
  pollEndpoint -host='$API_MADDR' -ep=/version -v -tout=1s -tries=10 >stdin_poll_apiout 2>stdin_poll_apierr &&
  test_kill_repeat_10_sec $DAEMON_PID ||
  test_fsh cat stdin_daemon_out || test_fsh cat stdin_daemon_err || test_fsh cat stdin_poll_apiout || test_fsh cat stdin_poll_apierr
176 177
'

178 179 180 181 182
test_expect_success "'ipfs daemon' cleans up when it fails to start" '
  test_must_fail ipfs daemon --routing=foobar &&
  test ! -e "$IPFS_PATH/repo.lock"
'

183
ulimit -S -n 512
Jeromy's avatar
Jeromy committed
184 185 186 187
TEST_ULIMIT_PRESET=1
test_launch_ipfs_daemon

test_expect_success "daemon raised its fd limit" '
188
  grep -v "setting file descriptor limit" actual_daemon > /dev/null
Jeromy's avatar
Jeromy committed
189 190
'

191
test_expect_success "daemon actually can handle 2048 file descriptors" '
Łukasz Magiera's avatar
Łukasz Magiera committed
192
  hang-fds -hold=2s 2000 '$API_MADDR' > /dev/null
193 194 195
'

test_expect_success "daemon didnt throw any errors" '
Łukasz Magiera's avatar
Łukasz Magiera committed
196
  test_expect_code 1 grep "too many open files" daemon_err
197
'
198

Jeromy's avatar
Jeromy committed
199 200
test_kill_ipfs_daemon

201
test_done