github.com/MetalBlockchain/metalgo@v1.11.9/tests/fixture/test_data_server_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package fixture
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/ids"
    12  	"github.com/MetalBlockchain/metalgo/utils/crypto/secp256k1"
    13  )
    14  
    15  // Check that funded test keys can be served from an http server to
    16  // ensure at-most-once allocation when tests are executed in parallel.
    17  func TestAllocatePreFundedKeys(t *testing.T) {
    18  	keys := make([]*secp256k1.PrivateKey, 5)
    19  	for i := range keys {
    20  		key, err := secp256k1.NewPrivateKey()
    21  		require.NoError(t, err)
    22  		keys[i] = key
    23  	}
    24  
    25  	uri, err := ServeTestData(TestData{
    26  		PreFundedKeys: keys,
    27  	})
    28  	require.NoError(t, err)
    29  
    30  	testCases := []struct {
    31  		name              string
    32  		count             int
    33  		expectedAddresses []ids.ShortID
    34  		expectedError     error
    35  	}{
    36  		{
    37  			name:  "single key",
    38  			count: 1,
    39  			expectedAddresses: []ids.ShortID{
    40  				keys[4].Address(),
    41  			},
    42  			expectedError: nil,
    43  		},
    44  		{
    45  			name:  "multiple keys",
    46  			count: 4,
    47  			expectedAddresses: []ids.ShortID{
    48  				keys[0].Address(),
    49  				keys[1].Address(),
    50  				keys[2].Address(),
    51  				keys[3].Address(),
    52  			},
    53  			expectedError: nil,
    54  		},
    55  		{
    56  			name:              "insufficient keys available",
    57  			count:             1,
    58  			expectedAddresses: []ids.ShortID{},
    59  			expectedError:     errRequestedKeyCountExceedsAvailable,
    60  		},
    61  	}
    62  	for _, tc := range testCases {
    63  		t.Run(tc.name, func(t *testing.T) {
    64  			require := require.New(t)
    65  
    66  			keys, err := AllocatePreFundedKeys(uri, tc.count)
    67  			require.ErrorIs(err, tc.expectedError)
    68  
    69  			addresses := make([]ids.ShortID, len(keys))
    70  			for i, key := range keys {
    71  				addresses[i] = key.Address()
    72  			}
    73  			require.Equal(tc.expectedAddresses, addresses)
    74  		})
    75  	}
    76  }