mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-12 19:57:55 +08:00
fix the nc wait. the issue was that stdin needs to remain _open_ but not receive any input for some time. If stdin receives (invalid) input or closes, the other side terminates the connection before writing out the muxer frames + identify handshake. This commit also changes the use of `!` for `test_must_fail` License: MIT Signed-off-by: Juan Batiz-Benet <juan@benet.ai>
129 lines
4.1 KiB
Bash
Executable File
129 lines
4.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2014 Juan Batiz-Benet
|
|
# MIT Licensed; see the LICENSE file in this repository.
|
|
#
|
|
|
|
test_description="Test daemon command"
|
|
|
|
. lib/test-lib.sh
|
|
|
|
# TODO: randomize ports here once we add --config to ipfs daemon
|
|
|
|
# this needs to be in a different test than "ipfs daemon --init" below
|
|
test_expect_success "setup IPFS_PATH" '
|
|
IPFS_PATH="$(pwd)/.ipfs" &&
|
|
export IPFS_PATH
|
|
'
|
|
|
|
# NOTE: this should remove bootstrap peers (needs a flag)
|
|
# TODO(cryptix):
|
|
# - we won't see daemon startup failure because we put the daemon in the background - fix: fork with exit code after api listen
|
|
# - also default ports: might clash with local clients. Failure in that case isn't clear as well because pollEndpoint just uses the already running node
|
|
test_expect_success "ipfs daemon --init launches" '
|
|
ipfs daemon --init >actual_daemon 2>daemon_err &
|
|
'
|
|
|
|
# this is like "'ipfs daemon' is ready" in test_launch_ipfs_daemon(), see test-lib.sh
|
|
test_expect_success "initialization ended" '
|
|
IPFS_PID=$! &&
|
|
pollEndpoint -ep=/version -v -tout=1s -tries=60 2>poll_apierr > poll_apiout ||
|
|
test_fsh cat actual_daemon || test_fsh cat daemon_err || test_fsh cat poll_apierr || test_fsh cat poll_apiout
|
|
'
|
|
|
|
# this errors if daemon didnt --init $IPFS_PATH correctly
|
|
test_expect_success "'ipfs config Identity.PeerID' works" '
|
|
ipfs config Identity.PeerID >config_peerId
|
|
'
|
|
|
|
test_expect_success "'ipfs swarm addrs local' works" '
|
|
ipfs swarm addrs local >local_addrs
|
|
'
|
|
|
|
|
|
# this is lifted straight from t0020-init.sh
|
|
test_expect_success "ipfs peer id looks good" '
|
|
PEERID=$(cat config_peerId) &&
|
|
echo $PEERID | tr -dC "[:alnum:]" | wc -c | tr -d " " >actual_id &&
|
|
echo "46" >expected_id &&
|
|
test_cmp_repeat_10_sec expected_id actual_id
|
|
'
|
|
|
|
# This is like t0020-init.sh "ipfs init output looks good"
|
|
#
|
|
# Unfortunately the line:
|
|
#
|
|
# API server listening on /ip4/127.0.0.1/tcp/5001
|
|
#
|
|
# sometimes doesn't show up, so we cannot use test_expect_success yet.
|
|
#
|
|
test_expect_success "ipfs daemon output looks good" '
|
|
STARTFILE="ipfs cat /ipfs/$HASH_WELCOME_DOCS/readme" &&
|
|
echo "Initializing daemon..." >expected_daemon &&
|
|
echo "initializing ipfs node at $IPFS_PATH" >>expected_daemon &&
|
|
echo "generating 2048-bit RSA keypair...done" >>expected_daemon &&
|
|
echo "peer identity: $PEERID" >>expected_daemon &&
|
|
echo "to get started, enter:" >>expected_daemon &&
|
|
printf "\\n\\t$STARTFILE\\n\\n" >>expected_daemon &&
|
|
cat local_addrs | sed "s/^/Swarm listening on /" >>expected_daemon &&
|
|
echo "API server listening on /ip4/127.0.0.1/tcp/5001" >>expected_daemon &&
|
|
echo "Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080" >>expected_daemon &&
|
|
test_cmp expected_daemon actual_daemon
|
|
'
|
|
|
|
test_expect_success ".ipfs/ has been created" '
|
|
test -d ".ipfs" &&
|
|
test -f ".ipfs/config" &&
|
|
test -d ".ipfs/datastore" ||
|
|
test_fsh ls .ipfs
|
|
'
|
|
|
|
# begin same as in t0010
|
|
|
|
test_expect_success "ipfs version succeeds" '
|
|
ipfs version >version.txt
|
|
'
|
|
|
|
test_expect_success "ipfs version output looks good" '
|
|
cat version.txt | egrep "^ipfs version [0-9]+\.[0-9]+\.[0-9]" >/dev/null ||
|
|
test_fsh cat version.txt
|
|
'
|
|
|
|
test_expect_success "ipfs help succeeds" '
|
|
ipfs help >help.txt
|
|
'
|
|
|
|
test_expect_success "ipfs help output looks good" '
|
|
cat help.txt | egrep -i "^Usage:" >/dev/null &&
|
|
cat help.txt | egrep "ipfs .* <command>" >/dev/null ||
|
|
test_fsh cat help.txt
|
|
'
|
|
|
|
# check transport is encrypted
|
|
|
|
test_expect_success 'transport should be encrypted' '
|
|
nc -w 5 localhost 4001 >swarmnc &&
|
|
grep -q "AES-256,AES-128" swarmnc &&
|
|
test_must_fail grep -q "/ipfs/identify" swarmnc ||
|
|
test_fsh cat swarmnc
|
|
'
|
|
|
|
# end same as in t0010
|
|
|
|
test_expect_success "daemon is still running" '
|
|
kill -0 $IPFS_PID
|
|
'
|
|
|
|
test_expect_success "'ipfs daemon' can be killed" '
|
|
test_kill_repeat_10_sec $IPFS_PID
|
|
'
|
|
|
|
test_expect_success "'ipfs daemon' should be able to run with a pipe attached to stdin (issue #861)" '
|
|
yes | ipfs daemon --init >stdin_daemon_out 2>stdin_daemon_err &
|
|
pollEndpoint -ep=/version -v -tout=1s -tries=10 >stdin_poll_apiout 2>stdin_poll_apierr &&
|
|
test_kill_repeat_10_sec $! ||
|
|
test_fsh cat stdin_daemon_out || test_fsh cat stdin_daemon_err || test_fsh cat stdin_poll_apiout || test_fsh cat stdin_poll_apierr
|
|
'
|
|
|
|
test_done
|