storj.io/uplink@v1.13.0/edge/share_test.go (about) 1 // Copyright (C) 2021 Storj Labs, Inc. 2 // See LICENSE for copying information. 3 4 package edge_test 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "storj.io/uplink/edge" 12 ) 13 14 func TestCreateURL(t *testing.T) { 15 testValidCase := func(description, baseURL, accessID, bucket, key string, options *edge.ShareURLOptions, expected string) { 16 t.Run(description, func(t *testing.T) { 17 url, err := edge.JoinShareURL(baseURL, accessID, bucket, key, options) 18 require.Nil(t, err) 19 require.Equal(t, expected, url) 20 }) 21 } 22 23 testInvalidCase := func(description, baseURL, accessID, bucket, key string, options *edge.ShareURLOptions, expectedErr string) { 24 t.Run(description, func(t *testing.T) { 25 url, err := edge.JoinShareURL(baseURL, accessID, bucket, key, options) 26 require.NotNil(t, err) 27 require.Equal(t, expectedErr, err.Error()) 28 require.Equal(t, "", url) 29 }) 30 } 31 32 testValidCase( 33 "share entire project", 34 "https://linksharing.test", 35 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 36 "", 37 "", 38 nil, 39 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 40 ) 41 42 testValidCase( 43 "share entire bucket", 44 "https://linksharing.test", 45 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 46 "mybucket", 47 "", 48 nil, 49 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/mybucket", 50 ) 51 52 testValidCase( 53 "share entire prefix", 54 "https://linksharing.test", 55 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 56 "mybucket", 57 "my/prefix/", 58 nil, 59 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/mybucket/my/prefix/", 60 ) 61 62 testValidCase( 63 "share object nested in prefix", 64 "https://linksharing.test", 65 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 66 "mybucket", 67 "my/object", 68 nil, 69 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/mybucket/my/object", 70 ) 71 72 testValidCase( 73 "base url ends in slash", 74 "https://linksharing.test/", 75 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 76 "", 77 "", 78 nil, 79 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 80 ) 81 82 testValidCase( 83 "escaping of binary object key", 84 "https://linksharing.test", 85 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 86 "mybucket", 87 "a\x00a", 88 nil, 89 "https://linksharing.test/s/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/mybucket/a%00a", 90 ) 91 92 testValidCase( 93 "raw download link", 94 "https://linksharing.test", 95 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 96 "mybucket", 97 "myobject", 98 &edge.ShareURLOptions{ 99 Raw: true, 100 }, 101 "https://linksharing.test/raw/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/mybucket/myobject", 102 ) 103 104 testInvalidCase( 105 "base url missing", 106 "", 107 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 108 "", 109 "", 110 nil, 111 "uplink: invalid base url: \"\"", 112 ) 113 114 testInvalidCase( 115 "base url has no protocol", 116 "linksharing.test", 117 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 118 "", 119 "", 120 nil, 121 "uplink: invalid base url: \"linksharing.test\"", 122 ) 123 124 testInvalidCase( 125 "bucket missing", 126 "https://linksharing.test", 127 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 128 "", 129 "myobject", 130 nil, 131 "uplink: bucket is required if key is specified", 132 ) 133 134 testInvalidCase( 135 "access key ID missing", 136 "https://linksharing.test", 137 "", 138 "", 139 "", 140 nil, 141 "uplink: accessKeyID is required", 142 ) 143 144 testInvalidCase( 145 "missing key for raw download link", 146 "https://linksharing.test", 147 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 148 "mybucket", 149 "", 150 &edge.ShareURLOptions{ 151 Raw: true, 152 }, 153 "uplink: key is required for a raw download link", 154 ) 155 156 testInvalidCase( 157 "prefix instead of object for raw download link", 158 "https://linksharing.test", 159 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", 160 "mybucket", 161 "myprefix/", 162 &edge.ShareURLOptions{ 163 Raw: true, 164 }, 165 "uplink: a raw download link can not be a prefix", 166 ) 167 }