forked from cerc-io/ipld-eth-server
296 lines
9.2 KiB
Bash
Executable File
296 lines
9.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
test_description="Test config command"
|
|
|
|
. lib/test-lib.sh
|
|
|
|
# we use a function so that we can run it both offline + online
|
|
test_config_cmd_set() {
|
|
|
|
# flags (like --bool in "ipfs config --bool")
|
|
cfg_flags="" # unset in case.
|
|
test "$#" = 3 && { cfg_flags=$1; shift; }
|
|
|
|
cfg_key=$1
|
|
cfg_val=$2
|
|
test_expect_success "ipfs config succeeds" '
|
|
ipfs config $cfg_flags "$cfg_key" "$cfg_val"
|
|
'
|
|
|
|
test_expect_success "ipfs config output looks good" '
|
|
echo "$cfg_val" >expected &&
|
|
ipfs config "$cfg_key" >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
|
|
# also test our lib function. it should work too.
|
|
cfg_key="Lib.$cfg_key"
|
|
test_expect_success "test_config_set succeeds" '
|
|
test_config_set $cfg_flags "$cfg_key" "$cfg_val"
|
|
'
|
|
|
|
test_expect_success "test_config_set value looks good" '
|
|
echo "$cfg_val" >expected &&
|
|
ipfs config "$cfg_key" >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
}
|
|
|
|
# this is a bit brittle. the problem is we need to test
|
|
# with something that will be forced to unmarshal as a struct.
|
|
# (i.e. just setting 'ipfs config --json foo "[1, 2, 3]"') may
|
|
# set it as astring instead of proper json. We leverage the
|
|
# unmarshalling that has to happen.
|
|
CONFIG_SET_JSON_TEST='{
|
|
"MDNS": {
|
|
"Enabled": true,
|
|
"Interval": 10
|
|
}
|
|
}'
|
|
|
|
test_profile_apply_revert() {
|
|
profile=$1
|
|
inverse_profile=$2
|
|
|
|
test_expect_success "save expected config" '
|
|
ipfs config show >expected
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply ${profile}' works" '
|
|
ipfs config profile apply '${profile}'
|
|
'
|
|
|
|
test_expect_success "profile ${profile} changed something" '
|
|
ipfs config show >actual &&
|
|
test_must_fail test_cmp expected actual
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply ${inverse_profile}' works" '
|
|
ipfs config profile apply '${inverse_profile}'
|
|
'
|
|
|
|
test_expect_success "config is back to previous state after ${inverse_profile} was applied" '
|
|
ipfs config show >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
}
|
|
|
|
test_profile_apply_dry_run_not_alter() {
|
|
profile=$1
|
|
|
|
test_expect_success "'ipfs config profile apply ${profile} --dry-run' doesn't alter config" '
|
|
cat "$IPFS_PATH/config" >expected &&
|
|
ipfs config profile apply '${profile}' --dry-run &&
|
|
cat "$IPFS_PATH/config" >actual &&
|
|
test_cmp expected actual
|
|
'
|
|
}
|
|
|
|
test_config_cmd() {
|
|
test_config_cmd_set "beep" "boop"
|
|
test_config_cmd_set "beep1" "boop2"
|
|
test_config_cmd_set "beep1" "boop2"
|
|
test_config_cmd_set "--bool" "beep2" "true"
|
|
test_config_cmd_set "--bool" "beep2" "false"
|
|
test_config_cmd_set "--json" "beep3" "true"
|
|
test_config_cmd_set "--json" "beep3" "false"
|
|
test_config_cmd_set "--json" "Discovery" "$CONFIG_SET_JSON_TEST"
|
|
test_config_cmd_set "--json" "deep-not-defined.prop" "true"
|
|
test_config_cmd_set "--json" "deep-null" "null"
|
|
test_config_cmd_set "--json" "deep-null.prop" "true"
|
|
|
|
test_expect_success "'ipfs config show' works" '
|
|
ipfs config show >actual
|
|
'
|
|
|
|
test_expect_success "'ipfs config show' output looks good" '
|
|
grep "\"beep\": \"boop\"," actual &&
|
|
grep "\"beep1\": \"boop2\"," actual &&
|
|
grep "\"beep2\": false," actual &&
|
|
grep "\"beep3\": false," actual
|
|
'
|
|
|
|
test_expect_success "setup for config replace test" '
|
|
cp "$IPFS_PATH/config" newconfig.json &&
|
|
sed -i"~" -e /PrivKey/d -e s/10GB/11GB/ newconfig.json &&
|
|
sed -i"~" -e '"'"'/PeerID/ {'"'"' -e '"'"' s/,$// '"'"' -e '"'"' } '"'"' newconfig.json
|
|
'
|
|
|
|
test_expect_success "run 'ipfs config replace'" '
|
|
ipfs config replace - < newconfig.json
|
|
'
|
|
|
|
test_expect_success "check resulting config after 'ipfs config replace'" '
|
|
sed -e /PrivKey/d "$IPFS_PATH/config" > replconfig.json &&
|
|
sed -i"~" -e '"'"'/PeerID/ {'"'"' -e '"'"' s/,$// '"'"' -e '"'"' } '"'"' replconfig.json &&
|
|
test_cmp replconfig.json newconfig.json
|
|
'
|
|
|
|
# SECURITY
|
|
# Those tests are here to prevent exposing the PrivKey on the network
|
|
|
|
test_expect_success "'ipfs config Identity' fails" '
|
|
test_expect_code 1 ipfs config Identity 2> ident_out
|
|
'
|
|
|
|
test_expect_success "output looks good" '
|
|
echo "Error: cannot show or change private key through API" > ident_exp &&
|
|
test_cmp ident_exp ident_out
|
|
'
|
|
|
|
test_expect_success "'ipfs config Identity.PrivKey' fails" '
|
|
test_expect_code 1 ipfs config Identity.PrivKey 2> ident_out
|
|
'
|
|
|
|
test_expect_success "output looks good" '
|
|
test_cmp ident_exp ident_out
|
|
'
|
|
|
|
test_expect_success "lower cased PrivKey" '
|
|
sed -i"~" -e '\''s/PrivKey/privkey/'\'' "$IPFS_PATH/config" &&
|
|
test_expect_code 1 ipfs config Identity.privkey 2> ident_out
|
|
'
|
|
|
|
test_expect_success "output looks good" '
|
|
test_cmp ident_exp ident_out
|
|
'
|
|
|
|
test_expect_success "fix it back" '
|
|
sed -i"~" -e '\''s/privkey/PrivKey/'\'' "$IPFS_PATH/config"
|
|
'
|
|
|
|
test_expect_success "'ipfs config show' doesn't include privkey" '
|
|
ipfs config show > show_config &&
|
|
test_expect_code 1 grep PrivKey show_config
|
|
'
|
|
|
|
test_expect_success "'ipfs config replace' injects privkey back" '
|
|
ipfs config replace show_config &&
|
|
grep "\"PrivKey\":" "$IPFS_PATH/config" | grep -e ": \".\+\"" >/dev/null
|
|
'
|
|
|
|
test_expect_success "'ipfs config replace' with privkey errors out" '
|
|
cp "$IPFS_PATH/config" real_config &&
|
|
test_expect_code 1 ipfs config replace - < real_config 2> replace_out
|
|
'
|
|
|
|
test_expect_success "output looks good" '
|
|
echo "Error: setting private key with API is not supported" > replace_expected
|
|
test_cmp replace_out replace_expected
|
|
'
|
|
|
|
test_expect_success "'ipfs config replace' with lower case privkey errors out" '
|
|
cp "$IPFS_PATH/config" real_config &&
|
|
sed -i -e '\''s/PrivKey/privkey/'\'' real_config &&
|
|
test_expect_code 1 ipfs config replace - < real_config 2> replace_out
|
|
'
|
|
|
|
test_expect_success "output looks good" '
|
|
echo "Error: setting private key with API is not supported" > replace_expected
|
|
test_cmp replace_out replace_expected
|
|
'
|
|
|
|
test_expect_success "'ipfs config Swarm.AddrFilters' looks good" '
|
|
ipfs config Swarm.AddrFilters > actual_config &&
|
|
test $(cat actual_config | wc -l) = 1
|
|
'
|
|
|
|
test_expect_success "copy ipfs config" '
|
|
cp "$IPFS_PATH/config" before_patch
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply server' works" '
|
|
ipfs config profile apply server
|
|
'
|
|
|
|
test_expect_success "backup was created and looks good" '
|
|
test_cmp "$(find "$IPFS_PATH" -name "config-*")" before_patch
|
|
'
|
|
|
|
test_expect_success "'ipfs config Swarm.AddrFilters' looks good with server profile" '
|
|
ipfs config Swarm.AddrFilters > actual_config &&
|
|
test $(cat actual_config | wc -l) = 17
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply local-discovery' works" '
|
|
ipfs config profile apply local-discovery
|
|
'
|
|
|
|
test_expect_success "'ipfs config Swarm.AddrFilters' looks good with applied local-discovery profile" '
|
|
ipfs config Swarm.AddrFilters > actual_config &&
|
|
test $(cat actual_config | wc -l) = 1
|
|
'
|
|
|
|
test_profile_apply_revert server local-discovery
|
|
|
|
# tests above mess with values this profile changes, need to do that before testing test profile
|
|
test_expect_success "ensure test profile is applied fully" '
|
|
ipfs config profile apply test
|
|
'
|
|
|
|
# need to do this in reverse as the test profile is already applied in sharness
|
|
test_profile_apply_revert default-networking test
|
|
|
|
test_profile_apply_dry_run_not_alter server
|
|
|
|
test_profile_apply_dry_run_not_alter local-discovery
|
|
|
|
test_profile_apply_dry_run_not_alter test
|
|
|
|
test_expect_success "'ipfs config profile apply local-discovery --dry-run' looks good with different profile info" '
|
|
ipfs config profile apply local-discovery --dry-run > diff_info &&
|
|
test `grep "DisableNatPortMap" diff_info | wc -l` = 2
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply server --dry-run' looks good with same profile info" '
|
|
ipfs config profile apply server --dry-run > diff_info &&
|
|
test `grep "DisableNatPortMap" diff_info | wc -l` = 1
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply server' looks good with same profile info" '
|
|
ipfs config profile apply server > diff_info &&
|
|
test `grep "DisableNatPortMap" diff_info | wc -l` = 1
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply local-discovery' looks good with different profile info" '
|
|
ipfs config profile apply local-discovery > diff_info &&
|
|
test `grep "DisableNatPortMap" diff_info | wc -l` = 2
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply test' looks good with different profile info" '
|
|
ipfs config profile apply test > diff_info &&
|
|
test `grep "DisableNatPortMap" diff_info | wc -l` = 2
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply test --dry-run' doesn't include privkey" '
|
|
ipfs config profile apply test --dry-run > show_config &&
|
|
test_expect_code 1 grep PrivKey show_config
|
|
'
|
|
|
|
test_expect_success "'ipfs config profile apply test' doesn't include privkey" '
|
|
ipfs config profile apply test > show_config &&
|
|
test_expect_code 1 grep PrivKey show_config
|
|
'
|
|
|
|
# won't work as it changes datastore definition, which makes ipfs not launch
|
|
# without converting first
|
|
# test_profile_apply_revert badgerds
|
|
|
|
test_expect_success "cleanup config backups" '
|
|
find "$IPFS_PATH" -name "config-*" -exec rm {} \;
|
|
'
|
|
}
|
|
|
|
test_init_ipfs
|
|
|
|
# should work offline
|
|
test_config_cmd
|
|
|
|
# should work online
|
|
test_launch_ipfs_daemon
|
|
test_config_cmd
|
|
test_kill_ipfs_daemon
|
|
|
|
|
|
test_done
|