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 }