t0090-get.sh 4 KB
Newer Older
Matt Bell's avatar
Matt Bell committed
1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/sh
#
# Copyright (c) 2015 Matt Bell
# MIT Licensed; see the LICENSE file in this repository.
#

test_description="Test get command"

. lib/test-lib.sh

test_init_ipfs

rht's avatar
rht committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
test_ipfs_get_flag() {
    ext="$1"; shift
    tar_flag="$1"; shift
    flag="$@"

    test_expect_success "ipfs get $flag succeeds" '
        ipfs get "$HASH" '"$flag"' >actual
    '

    test_expect_success "ipfs get $flag output looks good" '
		printf "%s\n\n" "Saving archive to $HASH$ext" >expected &&
		test_cmp expected actual
	'

    test_expect_success "ipfs get $flag archive output is valid" '
		tar "$tar_flag" "$HASH$ext" &&
		test_cmp "$HASH" data &&
		rm "$HASH$ext" &&
		rm "$HASH"
	'
}

35 36 37 38
# we use a function so that we can run it both offline + online
test_get_cmd() {

	test_expect_success "'ipfs get --help' succeeds" '
39
		ipfs get --help >actual
40
	'
41

42
	test_expect_success "'ipfs get --help' output looks good" '
43 44
		egrep "ipfs get.*<ipfs-path>" actual >/dev/null ||
		test_fsh cat actual
45
	'
46

47
	test_expect_success "ipfs get succeeds" '
48 49 50
		echo "Hello Worlds!" >data &&
		HASH=`ipfs add -q data` &&
		ipfs get "$HASH" >actual
51
	'
52

53
	test_expect_success "ipfs get output looks good" '
54 55
		printf "%s\n\n" "Saving file(s) to $HASH" >expected &&
		test_cmp expected actual
56
	'
57

58
	test_expect_success "ipfs get file output looks good" '
59
		test_cmp "$HASH" data
60
	'
61

Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
62 63
	test_expect_success "ipfs get DOES NOT error when trying to overwrite a file" '
		ipfs get "$HASH" >actual &&
64
		rm "$HASH"
65
	'
66

Jeromy's avatar
Jeromy committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80
	test_expect_success "ipfs get works with raw leaves" '
	HASH2=$(ipfs add --raw-leaves -q data) &&
		ipfs get "$HASH2" >actual2
	'

	test_expect_success "ipfs get output looks good" '
		printf "%s\n\n" "Saving file(s) to $HASH2" >expected2 &&
		test_cmp expected2 actual2
	'

	test_expect_success "ipfs get file output looks good" '
		test_cmp "$HASH2" data
	'

rht's avatar
rht committed
81
    test_ipfs_get_flag ".tar" "-xf" -a
82

rht's avatar
rht committed
83
    test_ipfs_get_flag ".tar.gz" "-zxf" -a -C
84

rht's avatar
rht committed
85
    test_ipfs_get_flag ".tar.gz" "-zxf" -a -C -l 9
86

87
	test_expect_success "ipfs get succeeds (directory)" '
88 89 90 91 92 93 94 95
		mkdir -p dir &&
		touch dir/a &&
		mkdir -p dir/b &&
		echo "Hello, Worlds!" >dir/b/c &&
		HASH2=`ipfs add -r -q dir | tail -n 1` &&
		ipfs get "$HASH2" >actual
	'

96
	test_expect_success "ipfs get output looks good (directory)" '
97 98
		printf "%s\n\n" "Saving file(s) to $HASH2" >expected &&
		test_cmp expected actual
99
	'
100

101
	test_expect_success "ipfs get output is valid (directory)" '
102 103 104
		test_cmp dir/a "$HASH2"/a &&
		test_cmp dir/b/c "$HASH2"/b/c &&
		rm -r "$HASH2"
105
	'
106

107
	test_expect_success "ipfs get -a -C succeeds (directory)" '
108
		ipfs get "$HASH2" -a -C >actual
109
	'
110

111
	test_expect_success "ipfs get -a -C output looks good (directory)" '
112 113
		printf "%s\n\n" "Saving archive to $HASH2.tar.gz" >expected &&
		test_cmp expected actual
114
	'
115

rht's avatar
rht committed
116
	test_expect_success "gzipped tar archive output is valid (directory)" '
117 118 119 120
		tar -zxf "$HASH2".tar.gz &&
		test_cmp dir/a "$HASH2"/a &&
		test_cmp dir/b/c "$HASH2"/b/c &&
		rm -r "$HASH2"
121
	'
rht's avatar
rht committed
122

123
	test_expect_success "ipfs get ../.. should fail" '
124
		echo "Error: invalid 'ipfs ref' path" >expected &&
125 126 127
		test_must_fail ipfs get ../.. 2>actual &&
		test_cmp expected actual
	'
128 129
}

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
test_get_fail() {
	test_expect_success "create an object that has unresolveable links" '
		cat <<-\EOF >bad_object &&
{ "Links": [ { "Name": "foo", "Hash": "QmZzaC6ydNXiR65W8VjGA73ET9MZ6VFAqUT1ngYMXcpihn", "Size": 1897 }, { "Name": "bar", "Hash": "Qmd4mG6pDFDmDTn6p3hX1srP8qTbkyXKj5yjpEsiHDX3u8", "Size": 56 }, { "Name": "baz", "Hash": "QmUTjwRnG28dSrFFVTYgbr6LiDLsBmRr2SaUSTGheK2YqG", "Size": 24266 } ], "Data": "\b\u0001" }
		EOF
		cat bad_object | ipfs object put > put_out
	'

	test_expect_success "output looks good" '
		echo "added QmaGidyrnX8FMbWJoxp8HVwZ1uRKwCyxBJzABnR1S2FVUr" > put_exp &&
		test_cmp put_exp put_out
	'

	test_expect_success "ipfs get fails" '
		test_expect_code 1 ipfs get QmaGidyrnX8FMbWJoxp8HVwZ1uRKwCyxBJzABnR1S2FVUr 
	'
}

148 149 150
# should work offline
test_get_cmd

151 152 153
# only really works offline, will try and search network when online
test_get_fail

154 155 156
# should work online
test_launch_ipfs_daemon
test_get_cmd
Matt Bell's avatar
Matt Bell committed
157 158 159
test_kill_ipfs_daemon

test_done