#!/bin/sh # # Copyright (c) 2014 Jeromy Johnson # MIT Licensed; see the LICENSE file in this repository. # test_description="Test ipfs repo operations" . lib/test-lib.sh export DEBUG=true setup_iptb() { num_nodes="$1" bound=$(expr "$num_nodes" - 1) test_expect_success "iptb init" ' iptb init -n $num_nodes --bootstrap none --port 0 ' for i in $(test_seq 0 "$bound") do test_expect_success "set configs up for node $i" ' ipfsi "$i" config Ipns.RepublishPeriod 20s && ipfsi "$i" config --json Ipns.ResolveCacheSize 0 ' done startup_cluster "$num_nodes" } teardown_iptb() { test_expect_success "shut down nodes" ' iptb kill ' } verify_can_resolve() { num_nodes="$1" bound=$(expr "$num_nodes" - 1) name="$2" expected="$3" msg="$4" for node in $(test_seq 0 "$bound") do test_expect_success "$msg: node $node can resolve entry" ' ipfsi "$node" name resolve "$name" > resolve ' test_expect_success "$msg: output for node $node looks right" ' printf "/ipfs/$expected\n" > expected && test_cmp expected resolve ' done } verify_cannot_resolve() { num_nodes="$1" bound=$(expr "$num_nodes" - 1) name="$2" msg="$3" for node in $(test_seq 0 "$bound") do test_expect_success "$msg: resolution fails on node $node" ' # TODO: this should work without the timeout option # but it currently hangs for some reason every so often test_expect_code 1 ipfsi "$node" name resolve --timeout=300ms "$name" ' done } num_test_nodes=4 setup_iptb "$num_test_nodes" test_expect_success "publish succeeds" ' HASH=$(echo "foobar" | ipfsi 1 add -q) && ipfsi 1 name publish -t 5s $HASH ' test_expect_success "get id succeeds" ' id=$(ipfsi 1 id -f "") ' verify_can_resolve "$num_test_nodes" "$id" "$HASH" "just after publishing" go-sleep 5s verify_cannot_resolve "$num_test_nodes" "$id" "after five seconds, records are invalid" go-sleep 15s verify_can_resolve "$num_test_nodes" "$id" "$HASH" "republisher fires after twenty seconds" # test_expect_success "generate new key" ' KEY2=`ipfsi 1 key gen beepboop --type ed25519` ' test_expect_success "publish with new key succeeds" ' HASH=$(echo "barfoo" | ipfsi 1 add -q) && ipfsi 1 name publish -t 5s -k "$KEY2" $HASH ' verify_can_resolve "$num_test_nodes" "$KEY2" "$HASH" "new key just after publishing" go-sleep 5s verify_cannot_resolve "$num_test_nodes" "$KEY2" "new key cannot resolve after 5 seconds" go-sleep 15s verify_can_resolve "$num_test_nodes" "$KEY2" "$HASH" "new key can resolve again after republish" # teardown_iptb test_done