storj.io/uplink@v1.13.0/access_test.go (about)

     1  // Copyright (C) 2020 Storj Labs, Inc.
     2  // See LICENSE for copying information.
     3  
     4  package uplink_test
     5  
     6  import (
     7  	"context"
     8  	"net"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  	"github.com/zeebo/errs"
    13  
    14  	"storj.io/uplink"
    15  )
    16  
    17  func TestRequestAccessWithPassphraseAndConcurrency_KnownAddress(t *testing.T) {
    18  	const apiKey = "13Yqe3oHi5dcnGhMu2ru3cmePC9iEYv6nDrYMbLRh4wre1KtVA9SFwLNAuuvWwc43b9swRsrfsnrbuTHQ6TJKVt4LjGnaARN9PhxJEu"
    19  
    20  	ctx := context.Background()
    21  	sentinelError := errs.Class("test sentinel")
    22  	knownAddresses := []string{
    23  		"us-central-1.tardigrade.io:7777",
    24  		"mars.tardigrade.io:7777",
    25  		"asia-east-1.tardigrade.io:7777",
    26  		"saturn.tardigrade.io:7777",
    27  		"europe-west-1.tardigrade.io:7777",
    28  		"jupiter.tardigrade.io:7777",
    29  		"satellite.stefan-benten.de:7777",
    30  		"saltlake.tardigrade.io:7777",
    31  	}
    32  
    33  	{ // check that known addresses gain ids and make it to dialing
    34  		config := uplink.Config{
    35  			DialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
    36  				return nil, sentinelError.New("%s", address)
    37  			},
    38  		}
    39  
    40  		for _, address := range knownAddresses {
    41  			_, err := config.RequestAccessWithPassphrase(ctx, address, apiKey, "password")
    42  			require.Error(t, err)
    43  			require.Contains(t, err.Error(), address)
    44  			require.True(t, sentinelError.Has(err))
    45  		}
    46  	}
    47  
    48  	{ // check that unknown addresses do not gain an id
    49  		config := uplink.Config{
    50  			DialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
    51  				t.Fail()
    52  				return nil, errs.New("should not be called")
    53  			},
    54  		}
    55  
    56  		_, err := config.RequestAccessWithPassphrase(ctx, "someaddr.example:7777", apiKey, "password")
    57  		require.Error(t, err)
    58  		require.Contains(t, err.Error(), "node id is required")
    59  	}
    60  }