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  }