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  }