github.com/MetalBlockchain/metalgo@v1.11.9/network/peer/ip_signer_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 peer 5 6 import ( 7 "crypto" 8 "net/netip" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/MetalBlockchain/metalgo/staking" 15 "github.com/MetalBlockchain/metalgo/utils" 16 "github.com/MetalBlockchain/metalgo/utils/crypto/bls" 17 ) 18 19 func TestIPSigner(t *testing.T) { 20 require := require.New(t) 21 22 dynIP := utils.NewAtomic(netip.AddrPortFrom( 23 netip.IPv6Loopback(), 24 0, 25 )) 26 27 tlsCert, err := staking.NewTLSCert() 28 require.NoError(err) 29 30 tlsKey := tlsCert.PrivateKey.(crypto.Signer) 31 blsKey, err := bls.NewSecretKey() 32 require.NoError(err) 33 34 s := NewIPSigner(dynIP, tlsKey, blsKey) 35 36 s.clock.Set(time.Unix(10, 0)) 37 38 signedIP1, err := s.GetSignedIP() 39 require.NoError(err) 40 require.Equal(dynIP.Get(), signedIP1.AddrPort) 41 require.Equal(uint64(10), signedIP1.Timestamp) 42 43 s.clock.Set(time.Unix(11, 0)) 44 45 signedIP2, err := s.GetSignedIP() 46 require.NoError(err) 47 require.Equal(dynIP.Get(), signedIP2.AddrPort) 48 require.Equal(uint64(10), signedIP2.Timestamp) 49 require.Equal(signedIP1.TLSSignature, signedIP2.TLSSignature) 50 51 dynIP.Set(netip.AddrPortFrom( 52 netip.AddrFrom4([4]byte{1, 2, 3, 4}), 53 dynIP.Get().Port(), 54 )) 55 56 signedIP3, err := s.GetSignedIP() 57 require.NoError(err) 58 require.Equal(dynIP.Get(), signedIP3.AddrPort) 59 require.Equal(uint64(11), signedIP3.Timestamp) 60 require.NotEqual(signedIP2.TLSSignature, signedIP3.TLSSignature) 61 }