@@ -2,58 +2,74 @@ package cre
22
33import (
44 "context"
5+ "net/http"
6+ "net/http/httptest"
7+ "sync/atomic"
58 "testing"
69
10+ "github.com/go-resty/resty/v2"
711 "github.com/stretchr/testify/require"
812
13+ "github.com/smartcontractkit/chainlink-testing-framework/framework/clclient"
914 "github.com/smartcontractkit/chainlink/system-tests/lib/cre/don/secrets"
10- "github.com/smartcontractkit/chainlink/system-tests/lib/crypto"
15+ crecrypto "github.com/smartcontractkit/chainlink/system-tests/lib/crypto"
1116)
1217
13- func TestAptosAccountsForNode_ReturnsCachedAddresses (t * testing.T ) {
18+ func TestAptosAccountForNode_UsesMetadataKeyWithoutCallingNodeAPI (t * testing.T ) {
1419 t .Parallel ()
1520
16- node := & Node {
17- Name : "node-1" ,
18- Addresses : Addresses {
19- AptosAddresses : [] string { "0x1" , "0x2" },
20- },
21- }
21+ var hits atomic. Int32
22+ server := httptest . NewServer ( http . HandlerFunc ( func ( w http. ResponseWriter , r * http. Request ) {
23+ hits . Add ( 1 )
24+ http . NotFound ( w , r )
25+ }))
26+ t . Cleanup ( server . Close )
2227
23- addresses , err := AptosAccountsForNode ( context . Background (), node )
28+ expected , err := crecrypto . NormalizeAptosAccount ( "0x1" )
2429 require .NoError (t , err )
25- require .Equal (t , []string {"0x1" , "0x2" }, addresses )
26-
27- addresses [0 ] = "0xdead"
28- require .Equal (t , []string {"0x1" , "0x2" }, node .Addresses .AptosAddresses )
29- }
30-
31- func TestAptosAccountsForNode_RequiresCachedMetadataWhenCacheMissing (t * testing.T ) {
32- t .Parallel ()
3330
3431 node := & Node {
3532 Name : "node-1" ,
33+ Keys : & secrets.NodeKeys {
34+ Aptos : & crecrypto.AptosKey {Account : expected },
35+ },
36+ Clients : NodeClients {
37+ RestClient : & clclient.ChainlinkClient {APIClient : resty .New ().SetBaseURL (server .URL )},
38+ },
3639 }
3740
38- _ , err := AptosAccountsForNode (context .Background (), node )
39- require .Error (t , err )
40- require .ErrorContains (t , err , "missing cached aptos addresses for node node-1" )
41+ account , err := aptosAccountForNode (context .Background (), node )
42+ require .NoError (t , err )
43+ require .Equal (t , expected , account )
44+ require .Zero (t , hits .Load (), "node API must not be called when metadata already has the Aptos key" )
4145}
4246
43- func TestAptosAccountsForNode_ReturnsMetadataKeyWhenCacheMissing (t * testing.T ) {
47+ func TestAptosAccountForNode_FallsBackToNodeAPIAndCachesKey (t * testing.T ) {
4448 t .Parallel ()
4549
50+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
51+ require .Equal (t , "/v2/keys/aptos" , r .URL .Path )
52+ w .Header ().Set ("Content-Type" , "application/json" )
53+ _ , err := w .Write ([]byte (`{"data":[{"attributes":{"account":"0x1","publicKey":"0xabc123"}}]}` ))
54+ require .NoError (t , err )
55+ }))
56+ t .Cleanup (server .Close )
57+
4658 node := & Node {
4759 Name : "node-1" ,
48- Keys : & secrets.NodeKeys {
49- Aptos : & crypto.AptosKey {
50- Account : "0x1" ,
51- },
60+ Keys : & secrets.NodeKeys {},
61+ Clients : NodeClients {
62+ RestClient : & clclient.ChainlinkClient {APIClient : resty .New ().SetBaseURL (server .URL )},
5263 },
5364 }
5465
55- addresses , err := AptosAccountsForNode (context .Background (), node )
66+ account , err := aptosAccountForNode (context .Background (), node )
67+ require .NoError (t , err )
68+
69+ expected , err := crecrypto .NormalizeAptosAccount ("0x1" )
5670 require .NoError (t , err )
57- require .Equal (t , []string {"0x1" }, addresses )
58- require .Equal (t , []string {"0x1" }, node .Addresses .AptosAddresses )
71+ require .Equal (t , expected , account )
72+ require .NotNil (t , node .Keys .Aptos )
73+ require .Equal (t , expected , node .Keys .Aptos .Account )
74+ require .Equal (t , "0xabc123" , node .Keys .Aptos .PublicKey )
5975}
0 commit comments