repo_description: A scalable overlay networking tool with a focus on performance, simplicity and security
code: package nebula
  
  import (
  	"net/netip"
  	"testing"
  
  	"github.com/stretchr/testify/assert"
  	"github.com/stretchr/testify/require"
  )
  
  func TestCalculatedRemoteApply(t *testing.T) {
  	// Test v4 addresses
  	ipNet := netip.MustParsePrefix("192.168.1.0/24")
  	c, err := newCalculatedRemote(ipNet, ipNet, 4242)
  	require.NoError(t, err)
  
  	input, err := netip.ParseAddr("10.0.10.182")
  	require.NoError(t, err)
  
  	expected, err := netip.ParseAddr("192.168.1.182")
  	require.NoError(t, err)
  
  	assert.Equal(t, netAddrToProtoV4AddrPort(expected, 4242), c.ApplyV4(input))
  
  	// Test v6 addresses
  	ipNet = netip.MustParsePrefix("ffff:ffff:ffff:ffff::0/64")
  	c, err = newCalculatedRemote(ipNet, ipNet, 4242)
  	require.NoError(t, err)
  
  	input, err = netip.ParseAddr("beef:beef:beef:beef:beef:beef:beef:beef")
  	require.NoError(t, err)
  
  	expected, err = netip.ParseAddr("ffff:ffff:ffff:ffff:beef:beef:beef:beef")
  	require.NoError(t, err)
  
  	assert.Equal(t, netAddrToProtoV6AddrPort(expected, 4242), c.ApplyV6(input))
  
  	// Test v6 addresses part 2
  	ipNet = netip.MustParsePrefix("ffff:ffff:ffff:ffff:ffff::0/80")
  	c, err = newCalculatedRemote(ipNet, ipNet, 4242)
  	require.NoError(t, err)
  
  	input, err = netip.ParseAddr("beef:beef:beef:beef:beef:beef:beef:beef")
  	require.NoError(t, err)
  
  	expected, err = netip.ParseAddr("ffff:ffff:ffff:ffff:ffff:beef:beef:beef")
  	require.NoError(t, err)
  
  	assert.Equal(t, netAddrToProtoV6AddrPort(expected, 4242), c.ApplyV6(input))
  
  	// Test v6 addresses part 2
  	ipNet = netip.MustParsePrefix("ffff:ffff:ffff::0/48")
  	c, err = newCalculatedRemote(ipNet, ipNet, 4242)
  	require.NoError(t, err)
  
  	input, err = netip.ParseAddr("beef:beef:beef:beef:beef:beef:beef:beef")
  	require.NoError(t, err)
  
  	expected, err = netip.ParseAddr("ffff:ffff:ffff:beef:beef:beef:beef:beef")
  	require.NoError(t, err)
  
  	assert.Equal(t, netAddrToProtoV6AddrPort(expected, 4242), c.ApplyV6(input))
  }
  
  func Test_newCalculatedRemote(t *testing.T) {
  	c, err := newCalculatedRemote(netip.MustParsePrefix("1::1/128"), netip.MustParsePrefix("[REDACTED_IP]/32"), 4242)
  	require.EqualError(t, err, "invalid mask: [REDACTED_IP]/32 for cidr: 1::1/128")
  	require.Nil(t, c)
  
  	c, err = newCalculatedRemote(netip.MustParsePrefix("[REDACTED_IP]/32"), netip.MustParsePrefix("1::1/128"), 4242)
  	require.EqualError(t, err, "invalid mask: 1::1/128 for cidr: [REDACTED_IP]/32")
  	require.Nil(t, c)
  
  	c, err = newCalculatedRemote(netip.MustParsePrefix("[REDACTED_IP]/32"), netip.MustParsePrefix("[REDACTED_IP]/32"), 4242)
  	require.NoError(t, err)
  	require.NotNil(t, c)
  
  	c, err = newCalculatedRemote(netip.MustParsePrefix("1::1/128"), netip.MustParsePrefix("1::1/128"), 4242)
  	require.NoError(t, err)
  	require.NotNil(t, c)
  }
  