ipfs-cluster/sharness/t0030-ctl-pin.sh
Hector Sanjuan a97ed10d0b Adopt api.Cid type - replaces cid.Cid everwhere.
This commit introduces an api.Cid type and replaces the usage of cid.Cid
everywhere.

The main motivation here is to override MarshalJSON so that Cids are
JSON-ified as '"Qm...."' instead of '{ "/": "Qm....." }', as this "ipld"
representation of IDs is horrible to work with, and our APIs are not issuing
IPLD objects to start with.

Unfortunately, there is no way to do this cleanly, and the best way is to just
switch everything to our own type.
2022-04-07 14:27:39 +02:00

125 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
test_description="Test cluster-ctl's pinning and unpinning functionality"
. lib/test-lib.sh
test_ipfs_init
test_cluster_init
test_expect_success IPFS,CLUSTER "pin data to cluster with ctl" '
cid=`docker exec ipfs sh -c "echo test | ipfs add -q"`
ipfs-cluster-ctl pin add "$cid" &&
ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid" &&
ipfs-cluster-ctl status "$cid" | grep -q -i "PINNED"
'
test_expect_success IPFS,CLUSTER "unpin data from cluster with ctl" '
cid=`ipfs-cluster-ctl --enc=json pin ls | jq -r ".cid" | head -1`
ipfs-cluster-ctl pin rm "$cid" &&
!(ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid") &&
ipfs-cluster-ctl status "$cid" | grep -q -i "UNPINNED"
'
test_expect_success IPFS,CLUSTER "wait for data to pin to cluster with ctl" '
cid=`docker exec ipfs sh -c "dd if=/dev/urandom bs=1024 count=2048 | ipfs add -q"`
ipfs-cluster-ctl pin add --wait "$cid" | grep -q -i "PINNED" &&
ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid" &&
ipfs-cluster-ctl status "$cid" | grep -q -i "PINNED"
'
test_expect_success IPFS,CLUSTER "wait for data to unpin from cluster with ctl" '
cid=`ipfs-cluster-ctl --enc=json pin ls | jq -r ".cid" | head -1`
ipfs-cluster-ctl pin rm --wait "$cid" | grep -q -i "UNPINNED" &&
!(ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid") &&
ipfs-cluster-ctl status "$cid" | grep -q -i "UNPINNED"
'
test_expect_success IPFS,CLUSTER "wait for data to pin to cluster with ctl with timeout" '
cid=`docker exec ipfs sh -c "dd if=/dev/urandom bs=1024 count=2048 | ipfs add -q"`
ipfs-cluster-ctl pin add --wait --wait-timeout 2s "$cid" | grep -q -i "PINNED" &&
ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid" &&
ipfs-cluster-ctl status "$cid" | grep -q -i "PINNED"
'
test_expect_success IPFS,CLUSTER "wait for data to unpin from cluster with ctl with timeout" '
cid=`ipfs-cluster-ctl --enc=json pin ls | jq -r ".cid" | head -1`
ipfs-cluster-ctl pin rm --wait --wait-timeout 2s "$cid" | grep -q -i "UNPINNED" &&
!(ipfs-cluster-ctl pin ls "$cid" | grep -q "$cid") &&
ipfs-cluster-ctl status "$cid" | grep -q -i "UNPINNED"
'
cid=(`docker exec ipfs sh -c "mkdir -p /tmp/test1/test2 && touch /tmp/test1/test2/test3.txt && ipfs add -qr /tmp/test1"`)
test_expect_success IPFS,CLUSTER "pin data to cluster with ctl using ipfs paths" '
ipfs-cluster-ctl pin add "/ipfs/${cid[2]}/test2/test3.txt" &&
ipfs-cluster-ctl pin ls "${cid[0]}" | grep -q "${cid[0]}" &&
ipfs-cluster-ctl status "${cid[0]}" | grep -q -i "PINNED"
'
test_expect_success IPFS,CLUSTER "unpin data to cluster with ctl using ipfs paths" '
removed=(`ipfs-cluster-ctl pin rm "/ipfs/${cid[2]}/test2/test3.txt"`) &&
echo "${removed[0]}" | grep -q "${cid[0]}" &&
!(ipfs-cluster-ctl pin ls "${cid[0]}" | grep -q "${cid[0]}") &&
ipfs-cluster-ctl status "${cid[0]}" | grep -q -i "UNPINNED"
'
test_expect_failure IPFS,CLUSTER "pin data to cluster with ctl using ipns paths" '
name=`docker exec ipfs sh -c "ipfs name publish -Q ${cid[0]}"`
ipfs-cluster-ctl pin add --wait --wait-timeout 2s "/ipns/$name" &&
ipfs-cluster-ctl pin ls "${cid[0]}" | grep -q "${cid[0]}" &&
ipfs-cluster-ctl status "${cid[0]}" | grep -q -i "PINNED"
'
test_expect_failure IPFS,CLUSTER "unpin data to cluster with ctl using ipns paths" '
removed=(`ipfs-cluster-ctl pin rm --wait --wait-timeout 2s "/ipns/$name"`) &&
echo "${removed[0]}" | grep -q "${cid[0]}" &&
!(ipfs-cluster-ctl pin ls "${cid[0]}" | grep -q "${cid[0]}") &&
ipfs-cluster-ctl status "${cid[0]}" | grep -q -i "UNPINNED"
'
test_expect_success IPFS,CLUSTER "pin data to cluster with user allocations" '
pid=`ipfs-cluster-ctl --enc=json id | jq -r ".id"`
ipfs-cluster-ctl pin add --allocations ${pid} -r 1 "${cid[0]}"
ipfs-cluster-ctl pin ls "${cid[0]}" | grep -q "${cid[0]}" &&
ipfs-cluster-ctl status "${cid[0]}" | grep -q -i "PINNED"
allocations=`ipfs-cluster-ctl --enc=json pin ls | jq -r .allocations[]`
echo $allocations | wc -w | grep -q 1 &&
echo $allocations | grep -q ${pid}
'
test_expect_success IPFS,CLUSTER "pin update a pin" '
cid1=`docker exec ipfs sh -c "echo test | ipfs add -q"`
ipfs-cluster-ctl pin add "$cid1"
cid2=`docker exec ipfs sh -c "echo test2 | ipfs add -q"`
ipfs-cluster-ctl pin update $cid1 $cid2 &&
ipfs-cluster-ctl pin ls $cid2
'
test_expect_success IPFS,CLUSTER "pin with metadata" '
cid3=`docker exec ipfs sh -c "echo test3 | ipfs add -q"`
ipfs-cluster-ctl pin add --metadata kind=text "$cid3"
cid4=`docker exec ipfs sh -c "echo test4 | ipfs add -q"`
ipfs-cluster-ctl pin add "$cid4"
ipfs-cluster-ctl pin ls "$cid3" | grep -q "Metadata: yes" &&
ipfs-cluster-ctl --enc=json pin ls "$cid3" | jq .metadata | grep -q "\"kind\": \"text\"" &&
ipfs-cluster-ctl pin ls "$cid4" | grep -q "Metadata: no"
'
test_expect_success IPFS,CLUSTER "pin in direct mode" '
echo "direct" > expected_mode &&
cid=`docker exec ipfs sh -c "echo test-pin-direct | ipfs add -q -pin=false"` &&
echo "$cid direct" > expected_pin_ls &&
ipfs-cluster-ctl pin add --mode direct "$cid" &&
ipfs-cluster-ctl pin ls "$cid" | grep -q "PIN-DIRECT" &&
docker exec ipfs sh -c "ipfs pin ls --type direct $cid" > actual_pin_ls &&
ipfs-cluster-ctl --enc=json pin ls "$cid" | jq -r .mode > actual_mode &&
test_cmp expected_mode actual_mode &&
test_cmp expected_pin_ls actual_pin_ls
'
test_clean_ipfs
test_clean_cluster
test_done