mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 19:29:57 +00:00
TUN-6586: Change ICMP proxy to only build for Darwin and use echo ID to track flows
This commit is contained in:
91
ingress/icmp_darwin_test.go
Normal file
91
ingress/icmp_darwin_test.go
Normal file
@@ -0,0 +1,91 @@
|
||||
//go:build darwin
|
||||
|
||||
package ingress
|
||||
|
||||
import (
|
||||
"math"
|
||||
"net/netip"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSingleEchoIDTracker(t *testing.T) {
|
||||
tracker := newEchoIDTracker()
|
||||
srcIP := netip.MustParseAddr("127.0.0.1")
|
||||
echoID, ok := tracker.get(srcIP)
|
||||
require.False(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
|
||||
// not assigned yet, so nothing to release
|
||||
require.False(t, tracker.release(srcIP, echoID))
|
||||
|
||||
echoID, ok = tracker.assign(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
|
||||
echoID, ok = tracker.get(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
|
||||
// releasing a different ID returns false
|
||||
require.False(t, tracker.release(srcIP, 1999))
|
||||
require.True(t, tracker.release(srcIP, echoID))
|
||||
// releasing the second time returns false
|
||||
require.False(t, tracker.release(srcIP, echoID))
|
||||
|
||||
echoID, ok = tracker.get(srcIP)
|
||||
require.False(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
|
||||
// Move to the next IP
|
||||
echoID, ok = tracker.assign(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, uint16(1), echoID)
|
||||
}
|
||||
|
||||
func TestFullEchoIDTracker(t *testing.T) {
|
||||
tracker := newEchoIDTracker()
|
||||
firstIP := netip.MustParseAddr("172.16.0.1")
|
||||
srcIP := firstIP
|
||||
|
||||
for i := uint16(0); i < math.MaxUint16; i++ {
|
||||
echoID, ok := tracker.assign(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, i, echoID)
|
||||
|
||||
echoID, ok = tracker.get(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, i, echoID)
|
||||
srcIP = srcIP.Next()
|
||||
}
|
||||
|
||||
// All echo IDs are assigned
|
||||
echoID, ok := tracker.assign(srcIP.Next())
|
||||
require.False(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
|
||||
srcIP = firstIP
|
||||
for i := uint16(0); i < math.MaxUint16; i++ {
|
||||
ok := tracker.release(srcIP, i)
|
||||
require.True(t, ok)
|
||||
|
||||
echoID, ok = tracker.get(srcIP)
|
||||
require.False(t, ok)
|
||||
require.Equal(t, uint16(0), echoID)
|
||||
srcIP = srcIP.Next()
|
||||
}
|
||||
|
||||
// The IDs are assignable again
|
||||
srcIP = firstIP
|
||||
for i := uint16(0); i < math.MaxUint16; i++ {
|
||||
echoID, ok := tracker.assign(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, i, echoID)
|
||||
|
||||
echoID, ok = tracker.get(srcIP)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, i, echoID)
|
||||
srcIP = srcIP.Next()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user