github.com/sacloud/libsacloud/v2@v2.32.3/helper/service/vpcrouter/update_test.go (about) 1 // Copyright 2016-2022 The Libsacloud Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package vpcrouter 16 17 import ( 18 "context" 19 "testing" 20 21 "github.com/sacloud/libsacloud/v2/helper/cleanup" 22 "github.com/sacloud/libsacloud/v2/sacloud" 23 "github.com/sacloud/libsacloud/v2/sacloud/pointer" 24 "github.com/sacloud/libsacloud/v2/sacloud/testutil" 25 "github.com/sacloud/libsacloud/v2/sacloud/types" 26 "github.com/stretchr/testify/require" 27 ) 28 29 func TestVPCRouterService_convertUpdateRequest(t *testing.T) { 30 ctx := context.Background() 31 caller := testutil.SingletonAPICaller() 32 zone := testutil.TestZone() 33 name := testutil.ResourceName("vpc-router-service-update") 34 35 // setup 36 internetOp := sacloud.NewInternetOp(caller) 37 router, err := internetOp.Create(ctx, zone, &sacloud.InternetCreateRequest{ 38 Name: name, 39 NetworkMaskLen: 28, 40 BandWidthMbps: 100, 41 }) 42 if err != nil { 43 t.Fatal(err) 44 } 45 46 swOp := sacloud.NewSwitchOp(caller) 47 sw, err := swOp.Read(ctx, zone, router.Switch.ID) 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 additionalSwitch, err := swOp.Create(ctx, zone, &sacloud.SwitchCreateRequest{Name: name}) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 vpcRouter, err := New(caller).CreateWithContext(ctx, &CreateRequest{ 58 Zone: zone, 59 Name: name, 60 Description: "desc", 61 Tags: types.Tags{"tag1", "tag2"}, 62 PlanID: types.VPCRouterPlans.Premium, 63 NICSetting: &PremiumNICSetting{ 64 SwitchID: sw.ID, 65 IPAddresses: []string{sw.Subnets[0].GetAssignedIPAddresses()[0], sw.Subnets[0].GetAssignedIPAddresses()[1]}, 66 VirtualIPAddress: sw.Subnets[0].GetAssignedIPAddresses()[2], 67 IPAliases: []string{sw.Subnets[0].GetAssignedIPAddresses()[3]}, 68 }, 69 AdditionalNICSettings: []*AdditionalPremiumNICSetting{ 70 { 71 SwitchID: additionalSwitch.ID, 72 IPAddresses: []string{"192.168.0.101", "192.168.0.102"}, 73 VirtualIPAddress: "192.168.0.11", 74 NetworkMaskLen: 24, 75 Index: 1, 76 }, 77 }, 78 RouterSetting: &RouterSetting{ 79 VRID: 1, 80 InternetConnectionEnabled: true, 81 L2TPIPsecServer: &sacloud.VPCRouterL2TPIPsecServer{ 82 RangeStart: "192.168.0.250", 83 RangeStop: "192.168.0.254", 84 PreSharedSecret: "presharedsecret", 85 }, 86 RemoteAccessUsers: []*sacloud.VPCRouterRemoteAccessUser{ 87 { 88 UserName: "username", 89 Password: "password", 90 }, 91 }, 92 }, 93 NoWait: false, 94 }) 95 96 if err != nil { 97 t.Fatal(err) 98 } 99 100 defer func() { 101 sacloud.NewVPCRouterOp(caller).Delete(ctx, zone, vpcRouter.ID) // nolint 102 swOp.Delete(ctx, zone, additionalSwitch.ID) // nolint 103 cleanup.DeleteInternet(ctx, internetOp, zone, router.ID) // nolint 104 }() 105 106 // test 107 cases := []struct { 108 in *UpdateRequest 109 expect *ApplyRequest 110 }{ 111 { 112 in: &UpdateRequest{ 113 ID: vpcRouter.ID, 114 Zone: zone, 115 Name: pointer.NewString(name + "-upd"), 116 NoWait: true, 117 118 NICSetting: &PremiumNICSettingUpdate{ 119 IPAddresses: &[]string{sw.Subnets[0].GetAssignedIPAddresses()[1], sw.Subnets[0].GetAssignedIPAddresses()[2]}, 120 VirtualIPAddress: &sw.Subnets[0].GetAssignedIPAddresses()[3], 121 IPAliases: &[]string{sw.Subnets[0].GetAssignedIPAddresses()[4]}, 122 }, 123 AdditionalNICSettings: &[]*AdditionalPremiumNICSettingUpdate{ 124 { 125 SwitchID: &additionalSwitch.ID, 126 IPAddresses: &[]string{"192.168.0.101", "192.168.0.102"}, 127 VirtualIPAddress: pointer.NewString("192.168.0.11"), 128 NetworkMaskLen: pointer.NewInt(24), 129 Index: 2, 130 }, 131 }, 132 }, 133 expect: &ApplyRequest{ 134 ID: vpcRouter.ID, 135 Zone: zone, 136 Name: name + "-upd", 137 Description: "desc", 138 Tags: types.Tags{"tag1", "tag2"}, 139 PlanID: types.VPCRouterPlans.Premium, 140 NICSetting: &PremiumNICSetting{ 141 SwitchID: sw.ID, 142 IPAddresses: []string{sw.Subnets[0].GetAssignedIPAddresses()[1], sw.Subnets[0].GetAssignedIPAddresses()[2]}, 143 VirtualIPAddress: sw.Subnets[0].GetAssignedIPAddresses()[3], 144 IPAliases: []string{sw.Subnets[0].GetAssignedIPAddresses()[4]}, 145 }, 146 AdditionalNICSettings: []AdditionalNICSettingHolder{ 147 &AdditionalPremiumNICSetting{ 148 SwitchID: additionalSwitch.ID, 149 IPAddresses: []string{"192.168.0.101", "192.168.0.102"}, 150 VirtualIPAddress: "192.168.0.11", 151 NetworkMaskLen: 24, 152 Index: 2, 153 }, 154 }, 155 RouterSetting: &RouterSetting{ 156 VRID: 1, 157 InternetConnectionEnabled: true, 158 L2TPIPsecServer: &sacloud.VPCRouterL2TPIPsecServer{ 159 RangeStart: "192.168.0.250", 160 RangeStop: "192.168.0.254", 161 PreSharedSecret: "presharedsecret", 162 }, 163 RemoteAccessUsers: []*sacloud.VPCRouterRemoteAccessUser{ 164 { 165 UserName: "username", 166 Password: "password", 167 }, 168 }, 169 }, 170 NoWait: true, 171 }, 172 }, 173 } 174 175 for _, tc := range cases { 176 req, err := tc.in.ApplyRequest(ctx, caller) 177 require.NoError(t, err) 178 require.EqualValues(t, tc.expect, req) 179 } 180 }