| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 
							- package nebula
 
- import (
 
- 	"net/netip"
 
- 	"testing"
 
- 	"time"
 
- 	"github.com/slackhq/nebula/header"
 
- 	"github.com/slackhq/nebula/test"
 
- 	"github.com/slackhq/nebula/udp"
 
- 	"github.com/stretchr/testify/assert"
 
- )
 
- func Test_NewHandshakeManagerVpnIp(t *testing.T) {
 
- 	l := test.NewLogger()
 
- 	vpncidr := netip.MustParsePrefix("172.1.1.1/24")
 
- 	localrange := netip.MustParsePrefix("10.1.1.1/24")
 
- 	ip := netip.MustParseAddr("172.1.1.2")
 
- 	preferredRanges := []netip.Prefix{localrange}
 
- 	mainHM := newHostMap(l, vpncidr)
 
- 	mainHM.preferredRanges.Store(&preferredRanges)
 
- 	lh := newTestLighthouse()
 
- 	cs := &CertState{
 
- 		RawCertificate:      []byte{},
 
- 		PrivateKey:          []byte{},
 
- 		Certificate:         &dummyCert{},
 
- 		RawCertificateNoKey: []byte{},
 
- 	}
 
- 	blah := NewHandshakeManager(l, mainHM, lh, &udp.NoopConn{}, defaultHandshakeConfig)
 
- 	blah.f = &Interface{handshakeManager: blah, pki: &PKI{}, l: l}
 
- 	blah.f.pki.cs.Store(cs)
 
- 	now := time.Now()
 
- 	blah.NextOutboundHandshakeTimerTick(now)
 
- 	i := blah.StartHandshake(ip, nil)
 
- 	i2 := blah.StartHandshake(ip, nil)
 
- 	assert.Same(t, i, i2)
 
- 	i.remotes = NewRemoteList(nil)
 
- 	// Adding something to pending should not affect the main hostmap
 
- 	assert.Len(t, mainHM.Hosts, 0)
 
- 	// Confirm they are in the pending index list
 
- 	assert.Contains(t, blah.vpnIps, ip)
 
- 	// Jump ahead `HandshakeRetries` ticks, offset by one to get the sleep logic right
 
- 	for i := 1; i <= DefaultHandshakeRetries+1; i++ {
 
- 		now = now.Add(time.Duration(i) * DefaultHandshakeTryInterval)
 
- 		blah.NextOutboundHandshakeTimerTick(now)
 
- 	}
 
- 	// Confirm they are still in the pending index list
 
- 	assert.Contains(t, blah.vpnIps, ip)
 
- 	// Tick 1 more time, a minute will certainly flush it out
 
- 	blah.NextOutboundHandshakeTimerTick(now.Add(time.Minute))
 
- 	// Confirm they have been removed
 
- 	assert.NotContains(t, blah.vpnIps, ip)
 
- }
 
- func testCountTimerWheelEntries(tw *LockingTimerWheel[netip.Addr]) (c int) {
 
- 	for _, i := range tw.t.wheel {
 
- 		n := i.Head
 
- 		for n != nil {
 
- 			c++
 
- 			n = n.Next
 
- 		}
 
- 	}
 
- 	return c
 
- }
 
- type mockEncWriter struct {
 
- }
 
- func (mw *mockEncWriter) SendMessageToVpnIp(t header.MessageType, st header.MessageSubType, vpnIp netip.Addr, p, nb, out []byte) {
 
- 	return
 
- }
 
- func (mw *mockEncWriter) SendVia(via *HostInfo, relay *Relay, ad, nb, out []byte, nocopy bool) {
 
- 	return
 
- }
 
- func (mw *mockEncWriter) SendMessageToHostInfo(t header.MessageType, st header.MessageSubType, hostinfo *HostInfo, p, nb, out []byte) {
 
- 	return
 
- }
 
- func (mw *mockEncWriter) Handshake(vpnIP netip.Addr) {}
 
 
  |