...

Source file src/edge-infra.dev/pkg/sds/remoteaccess/wireguard/vpn/integration/subnet_test.go

Documentation: edge-infra.dev/pkg/sds/remoteaccess/wireguard/vpn/integration

     1  package integration
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	v "edge-infra.dev/pkg/sds/remoteaccess/wireguard/vpn"
    11  	"edge-infra.dev/test/f2"
    12  )
    13  
    14  func TestIPAddressIsInSubnet(t *testing.T) {
    15  	var (
    16  		vpn *v.VPN
    17  		err error
    18  	)
    19  	feature := f2.NewFeature("IPAddressIsInSubnet").
    20  		Setup("create VPN", func(ctx f2.Context, t *testing.T) f2.Context {
    21  			vpn, err = v.New()
    22  			require.NoError(t, err)
    23  			return ctx
    24  		}).
    25  		Test("error when IP is nil", func(ctx f2.Context, t *testing.T) f2.Context {
    26  			in, err := vpn.IPAddressIsInSubnet(net.ParseIP("0.0.0.0"))
    27  			assert.Error(t, err)
    28  			assert.False(t, in)
    29  			return ctx
    30  		}).
    31  		Test("error when unable to parse subnet prefix", func(ctx f2.Context, t *testing.T) f2.Context {
    32  			vpn.SubnetCIDR = "1.2.3.0"
    33  			in, err := vpn.IPAddressIsInSubnet(net.ParseIP("0.0.0.0"))
    34  			assert.Error(t, err)
    35  			assert.False(t, in)
    36  			return ctx
    37  		}).
    38  		Test("error when unable to parse subnet address", func(ctx f2.Context, t *testing.T) f2.Context {
    39  			vpn.SubnetCIDR = "/24"
    40  			in, err := vpn.IPAddressIsInSubnet(net.ParseIP("0.0.0.0"))
    41  			assert.Error(t, err)
    42  			assert.False(t, in)
    43  			return ctx
    44  		}).
    45  		Test("return false if IP is not in subnet", func(ctx f2.Context, t *testing.T) f2.Context {
    46  			vpn.SubnetCIDR = "1.2.3.0/24"
    47  			in, err := vpn.IPAddressIsInSubnet(net.ParseIP("0.0.0.0"))
    48  			assert.NoError(t, err)
    49  			assert.False(t, in)
    50  			return ctx
    51  		}).
    52  		Test("return true if IP is in subnet", func(ctx f2.Context, t *testing.T) f2.Context {
    53  			vpn.SubnetCIDR = "1.2.3.0/24"
    54  			in, err := vpn.IPAddressIsInSubnet(net.ParseIP("1.2.3.4"))
    55  			assert.NoError(t, err)
    56  			assert.True(t, in)
    57  			return ctx
    58  		}).Feature()
    59  	f.Test(t, feature)
    60  }
    61  
    62  func TestRequestAvailableIPAddress(t *testing.T) {
    63  	var (
    64  		vpn *v.VPN
    65  		err error
    66  	)
    67  	feature := f2.NewFeature("RequestAvailableIPAddress").
    68  		Setup("create VPN", func(ctx f2.Context, t *testing.T) f2.Context {
    69  			vpn, err = v.New()
    70  			require.NoError(t, err)
    71  			return ctx
    72  		}).
    73  		Test("error and do not return IP when IP address pool is nil", func(ctx f2.Context, t *testing.T) f2.Context {
    74  			ip, err := vpn.RequestAvailableIPAddress("test-clusterEdgeID")
    75  			assert.Nil(t, ip)
    76  			assert.Error(t, err)
    77  			assert.ErrorIs(t, err, v.ErrSubnetNotConfigured)
    78  			return ctx
    79  		}).
    80  		Test("error and do not return IP when IP address pool is empty", func(ctx f2.Context, t *testing.T) f2.Context {
    81  			vpn.AvailableIPAddressPool = v.IPAddressPool{}
    82  			ip, err := vpn.RequestAvailableIPAddress("test-clusterEdgeID")
    83  			assert.Nil(t, ip)
    84  			assert.Error(t, err)
    85  			assert.ErrorIs(t, err, v.ErrNoIPAddressesAvailable)
    86  			return ctx
    87  		}).
    88  		Test("error and do not return IP when all IP addresses are unavailable", func(ctx f2.Context, t *testing.T) f2.Context {
    89  			vpn.AvailableIPAddressPool = v.IPAddressPool{"1.2.3.4": "another-cluster"}
    90  			ip, err := vpn.RequestAvailableIPAddress("test-clusterEdgeID")
    91  			assert.Nil(t, ip)
    92  			assert.Error(t, err)
    93  			assert.ErrorIs(t, err, v.ErrNoIPAddressesAvailable)
    94  			return ctx
    95  		}).
    96  		Test("successfully return IP when IPs address are available", func(ctx f2.Context, t *testing.T) f2.Context {
    97  			vpn.AvailableIPAddressPool = v.IPAddressPool{"1.2.3.4": ""}
    98  			ip, err := vpn.RequestAvailableIPAddress("test-clusterEdgeID")
    99  			assert.NoError(t, err)
   100  			assert.Equal(t, net.ParseIP("1.2.3.4"), ip)
   101  			return ctx
   102  		}).Feature()
   103  	f.Test(t, feature)
   104  }
   105  

View as plain text