github.com/cilium/cilium@v1.16.2/pkg/azure/api/mock/mock_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package mock
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/cilium/cilium/pkg/azure/types"
    14  	"github.com/cilium/cilium/pkg/cidr"
    15  	ipamTypes "github.com/cilium/cilium/pkg/ipam/types"
    16  )
    17  
    18  func TestMock(t *testing.T) {
    19  	subnet := &ipamTypes.Subnet{ID: "s-1", CIDR: cidr.MustParseCIDR("10.0.0.0/16"), AvailableAddresses: 65534}
    20  	api := NewAPI([]*ipamTypes.Subnet{subnet}, []*ipamTypes.VirtualNetwork{{ID: "v-1"}})
    21  	require.NotNil(t, api)
    22  
    23  	instances, err := api.GetInstances(context.Background(), ipamTypes.SubnetMap{})
    24  	require.NoError(t, err)
    25  	require.Equal(t, 0, instances.NumInstances())
    26  
    27  	vnets, subnets, err := api.GetVpcsAndSubnets(context.Background())
    28  	require.NoError(t, err)
    29  	require.Equal(t, 1, len(vnets))
    30  	require.Equal(t, &ipamTypes.VirtualNetwork{ID: "v-1"}, vnets["v-1"])
    31  	require.Equal(t, 1, len(subnets))
    32  	require.Equal(t, subnet, subnets["s-1"])
    33  
    34  	ifaceID := "/subscriptions/xxx/resourceGroups/g1/providers/Microsoft.Compute/virtualMachineScaleSets/vmss11/virtualMachines/vm1/networkInterfaces/vmss11"
    35  	instances = ipamTypes.NewInstanceMap()
    36  	resource := &types.AzureInterface{Name: "eth0"}
    37  	resource.SetID(ifaceID)
    38  	instances.Update("vm1", ipamTypes.InterfaceRevision{
    39  		Resource: resource.DeepCopy(),
    40  	})
    41  	api.UpdateInstances(instances)
    42  	instances, err = api.GetInstances(context.Background(), ipamTypes.SubnetMap{})
    43  	require.NoError(t, err)
    44  	require.Equal(t, 1, instances.NumInstances())
    45  	instances.ForeachInterface("", func(instanceID, interfaceID string, iface ipamTypes.InterfaceRevision) error {
    46  		require.Equal(t, "vm1", instanceID)
    47  		require.Equal(t, ifaceID, interfaceID)
    48  		return nil
    49  	})
    50  
    51  	err = api.AssignPrivateIpAddressesVMSS(context.Background(), "vm1", "vmss1", "s-1", "eth0", 2)
    52  	require.NoError(t, err)
    53  	instances, err = api.GetInstances(context.Background(), ipamTypes.SubnetMap{})
    54  	require.NoError(t, err)
    55  	require.Equal(t, 1, instances.NumInstances())
    56  	instances.ForeachInterface("", func(instanceID, interfaceID string, revision ipamTypes.InterfaceRevision) error {
    57  		require.Equal(t, "vm1", instanceID)
    58  		require.Equal(t, ifaceID, interfaceID)
    59  
    60  		iface, ok := revision.Resource.(*types.AzureInterface)
    61  		require.True(t, ok)
    62  		require.Equal(t, 2, len(iface.Addresses))
    63  		return nil
    64  	})
    65  
    66  	vmIfaceID := "/subscriptions/xxx/resourceGroups/g1/providers/Microsoft.Network/networkInterfaces/vm22-if"
    67  	vmInstances := ipamTypes.NewInstanceMap()
    68  	resource = &types.AzureInterface{Name: "eth0"}
    69  	resource.SetID(vmIfaceID)
    70  	vmInstances.Update("vm2", ipamTypes.InterfaceRevision{
    71  		Resource: resource.DeepCopy(),
    72  	})
    73  	require.NoError(t, err)
    74  	require.Equal(t, 1, vmInstances.NumInstances())
    75  	vmInstances.ForeachInterface("", func(instanceID, interfaceID string, iface ipamTypes.InterfaceRevision) error {
    76  		require.Equal(t, "vm2", instanceID)
    77  		require.Equal(t, vmIfaceID, interfaceID)
    78  		return nil
    79  	})
    80  
    81  }
    82  
    83  func TestSetMockError(t *testing.T) {
    84  	api := NewAPI([]*ipamTypes.Subnet{}, []*ipamTypes.VirtualNetwork{})
    85  	require.NotNil(t, api)
    86  
    87  	mockError := errors.New("error")
    88  
    89  	api.SetMockError(GetInstances, mockError)
    90  	_, err := api.GetInstances(context.Background(), ipamTypes.SubnetMap{})
    91  	require.ErrorIs(t, err, mockError)
    92  
    93  	api.SetMockError(GetVpcsAndSubnets, mockError)
    94  	_, _, err = api.GetVpcsAndSubnets(context.Background())
    95  	require.ErrorIs(t, err, mockError)
    96  
    97  	api.SetMockError(AssignPrivateIpAddressesVMSS, mockError)
    98  	err = api.AssignPrivateIpAddressesVMSS(context.Background(), "vmss1", "i-1", "s-1", "eth0", 0)
    99  	require.ErrorIs(t, err, mockError)
   100  }
   101  
   102  func TestSetLimiter(t *testing.T) {
   103  	subnet := &ipamTypes.Subnet{ID: "s-1", CIDR: cidr.MustParseCIDR("10.0.0.0/16"), AvailableAddresses: 100}
   104  	api := NewAPI([]*ipamTypes.Subnet{subnet}, []*ipamTypes.VirtualNetwork{{ID: "v-1"}})
   105  	require.NotNil(t, api)
   106  
   107  	api.SetLimiter(10.0, 2)
   108  	_, err := api.GetInstances(context.Background(), ipamTypes.SubnetMap{})
   109  	require.NoError(t, err)
   110  }