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 }