github.com/sacloud/libsacloud/v2@v2.32.3/helper/service/server/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 server 16 17 import ( 18 "context" 19 "testing" 20 21 diskService "github.com/sacloud/libsacloud/v2/helper/service/disk" 22 "github.com/sacloud/libsacloud/v2/pkg/size" 23 "github.com/sacloud/libsacloud/v2/sacloud" 24 "github.com/sacloud/libsacloud/v2/sacloud/pointer" 25 "github.com/sacloud/libsacloud/v2/sacloud/testutil" 26 "github.com/sacloud/libsacloud/v2/sacloud/types" 27 "github.com/stretchr/testify/require" 28 ) 29 30 func TestServerService_convertUpdateRequest(t *testing.T) { 31 ctx := context.Background() 32 zone := testutil.TestZone() 33 name := testutil.ResourceName("service-update-server") 34 caller := testutil.SingletonAPICaller() 35 36 // setup 37 diskOp := sacloud.NewDiskOp(caller) 38 disk, err := diskOp.Create(ctx, zone, &sacloud.DiskCreateRequest{ 39 DiskPlanID: types.DiskPlans.SSD, 40 Connection: types.DiskConnections.VirtIO, 41 SizeMB: 20 * size.GiB, 42 Name: name, 43 Description: "desc", 44 Tags: types.Tags{"tag1", "tag2"}, 45 }, []types.ID{}) 46 if err != nil { 47 t.Fatal(err) 48 } 49 50 svc := New(caller) 51 server, err := svc.CreateWithContext(ctx, &CreateRequest{ 52 Zone: zone, 53 Name: name, 54 Description: "desc", 55 Tags: types.Tags{"tag1", "tag2"}, 56 CPU: 1, 57 MemoryGB: 1, 58 Commitment: types.Commitments.Standard, 59 Generation: types.PlanGenerations.G100, 60 InterfaceDriver: types.InterfaceDrivers.VirtIO, 61 NetworkInterfaces: []*NetworkInterface{ 62 {Upstream: "shared"}, 63 }, 64 Disks: []*diskService.ApplyRequest{ 65 { 66 Zone: zone, 67 ID: disk.ID, 68 Name: name, 69 Description: "desc", 70 DiskPlanID: types.DiskPlans.SSD, 71 Connection: types.DiskConnections.VirtIO, 72 SizeGB: 20, 73 NoWait: false, 74 }, 75 }, 76 NoWait: false, 77 }) 78 if err != nil { 79 t.Fatal(err) 80 } 81 82 defer func() { 83 sacloud.NewServerOp(caller).Delete(ctx, zone, server.ID) // nolint 84 diskOp.Delete(ctx, zone, disk.ID) // nolint 85 }() 86 87 // test 88 cases := []struct { 89 in *UpdateRequest 90 expect *ApplyRequest 91 }{ 92 { 93 in: &UpdateRequest{ 94 Zone: zone, 95 ID: server.ID, 96 Name: &name, 97 Description: pointer.NewString("desc-upd"), 98 Tags: pointer.NewTags(types.Tags{"tag1-upd", "tag2-upd"}), 99 CPU: pointer.NewInt(2), 100 MemoryGB: pointer.NewInt(4), 101 Commitment: &types.Commitments.DedicatedCPU, 102 Generation: &types.PlanGenerations.G200, 103 InterfaceDriver: &types.InterfaceDrivers.E1000, 104 CDROMID: pointer.NewID(102), 105 PrivateHostID: pointer.NewID(103), 106 NetworkInterfaces: &[]*NetworkInterface{ 107 {Upstream: "shared"}, 108 {Upstream: "105"}, 109 }, 110 Disks: &[]*diskService.ApplyRequest{ 111 { 112 Zone: zone, 113 ID: disk.ID, 114 Name: name, 115 Description: "desc", 116 DiskPlanID: types.DiskPlans.SSD, 117 Connection: types.DiskConnections.VirtIO, 118 ServerID: server.ID, 119 SizeGB: 20, 120 NoWait: true, 121 }, 122 }, 123 NoWait: true, 124 ForceShutdown: true, 125 }, 126 expect: &ApplyRequest{ 127 Zone: zone, 128 ID: server.ID, 129 Name: name, 130 Description: "desc-upd", 131 Tags: types.Tags{"tag1-upd", "tag2-upd"}, 132 CPU: 2, 133 MemoryGB: 4, 134 GPU: 0, 135 Commitment: types.Commitments.DedicatedCPU, 136 Generation: types.PlanGenerations.G200, 137 InterfaceDriver: types.InterfaceDrivers.E1000, 138 BootAfterCreate: false, 139 CDROMID: 102, 140 PrivateHostID: 103, 141 NetworkInterfaces: []*NetworkInterface{ 142 {Upstream: "shared"}, 143 {Upstream: "105"}, 144 }, 145 Disks: []*diskService.ApplyRequest{ 146 { 147 Zone: zone, 148 ID: disk.ID, 149 Name: name, 150 Description: "desc", 151 DiskPlanID: types.DiskPlans.SSD, 152 Connection: types.DiskConnections.VirtIO, 153 ServerID: server.ID, 154 SizeGB: 20, 155 NoWait: true, 156 }, 157 }, 158 NoWait: true, 159 ForceShutdown: true, 160 }, 161 }, 162 } 163 164 for _, tc := range cases { 165 req, err := tc.in.ApplyRequest(ctx, caller) 166 require.NoError(t, err) 167 require.EqualValues(t, tc.expect, req) 168 } 169 }