github.com/sacloud/iaas-api-go@v1.12.0/test/disk_op_test.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go 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 test 16 17 import ( 18 "errors" 19 "testing" 20 21 "github.com/sacloud/iaas-api-go" 22 "github.com/sacloud/iaas-api-go/search" 23 "github.com/sacloud/iaas-api-go/testutil" 24 "github.com/sacloud/iaas-api-go/types" 25 "github.com/sacloud/packages-go/size" 26 "github.com/stretchr/testify/assert" 27 ) 28 29 func TestDiskOp_BlankDiskCRUD(t *testing.T) { 30 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 31 Parallel: true, 32 33 SetupAPICallerFunc: singletonAPICaller, 34 35 Create: &testutil.CRUDTestFunc{ 36 Func: testDiskCreate, 37 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 38 ExpectValue: createDiskExpected, 39 IgnoreFields: ignoreDiskFields, 40 }), 41 }, 42 43 Read: &testutil.CRUDTestFunc{ 44 Func: testDiskRead, 45 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 46 ExpectValue: createDiskExpected, 47 IgnoreFields: ignoreDiskFields, 48 }), 49 }, 50 51 Updates: []*testutil.CRUDTestFunc{ 52 { 53 Func: testDiskUpdate, 54 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 55 ExpectValue: updateDiskExpected, 56 IgnoreFields: ignoreDiskFields, 57 }), 58 }, 59 { 60 Func: testDiskUpdateToMin, 61 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 62 ExpectValue: updateDiskToMinExpected, 63 IgnoreFields: ignoreDiskFields, 64 }), 65 }, 66 }, 67 68 Delete: &testutil.CRUDTestDeleteFunc{ 69 Func: testDiskDelete, 70 }, 71 }) 72 } 73 74 var ( 75 ignoreDiskFields = []string{ 76 "ID", 77 "DisplayOrder", 78 "Availability", 79 "DiskPlanName", 80 "DiskPlanStorageClass", 81 "SizeMB", 82 "MigratedMB", 83 "SourceDiskID", 84 "SourceDiskAvailability", 85 "SourceArchiveID", 86 "SourceArchiveAvailability", 87 "BundleInfo", 88 "Server", 89 "Storage", 90 "CreatedAt", 91 "ModifiedAt", 92 } 93 94 createDiskParam = &iaas.DiskCreateRequest{ 95 DiskPlanID: types.DiskPlans.SSD, 96 Connection: types.DiskConnections.VirtIO, 97 EncryptionAlgorithm: types.DiskEncryptionAlgorithms.AES256XTS, 98 Name: testutil.ResourceName("disk"), 99 Description: "desc", 100 Tags: []string{"tag1", "tag2"}, 101 SizeMB: 20 * size.GiB, 102 } 103 createDiskExpected = &iaas.Disk{ 104 Name: createDiskParam.Name, 105 Description: createDiskParam.Description, 106 Tags: createDiskParam.Tags, 107 DiskPlanID: createDiskParam.DiskPlanID, 108 Connection: createDiskParam.Connection, 109 EncryptionAlgorithm: createDiskParam.EncryptionAlgorithm, 110 } 111 updateDiskParam = &iaas.DiskUpdateRequest{ 112 Name: testutil.ResourceName("disk-upd"), 113 Description: "desc-upd", 114 Tags: []string{"tag1-upd", "tag2-upd"}, 115 IconID: testIconID, 116 } 117 updateDiskExpected = &iaas.Disk{ 118 Name: updateDiskParam.Name, 119 Description: updateDiskParam.Description, 120 Tags: updateDiskParam.Tags, 121 DiskPlanID: createDiskParam.DiskPlanID, 122 Connection: createDiskParam.Connection, 123 EncryptionAlgorithm: createDiskParam.EncryptionAlgorithm, 124 IconID: updateDiskParam.IconID, 125 } 126 updateDiskToMinParam = &iaas.DiskUpdateRequest{ 127 Name: testutil.ResourceName("disk-to-min"), 128 } 129 updateDiskToMinExpected = &iaas.Disk{ 130 Name: updateDiskToMinParam.Name, 131 DiskPlanID: createDiskParam.DiskPlanID, 132 Connection: createDiskParam.Connection, 133 EncryptionAlgorithm: createDiskParam.EncryptionAlgorithm, 134 } 135 ) 136 137 func testDiskCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 138 client := iaas.NewDiskOp(caller) 139 return client.Create(ctx, testZone, createDiskParam, nil) 140 } 141 142 func testDiskRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 143 client := iaas.NewDiskOp(caller) 144 return client.Read(ctx, testZone, ctx.ID) 145 } 146 147 func testDiskUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 148 client := iaas.NewDiskOp(caller) 149 return client.Update(ctx, testZone, ctx.ID, updateDiskParam) 150 } 151 152 func testDiskUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 153 client := iaas.NewDiskOp(caller) 154 return client.Update(ctx, testZone, ctx.ID, updateDiskToMinParam) 155 } 156 157 func testDiskDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 158 client := iaas.NewDiskOp(caller) 159 return client.Delete(ctx, testZone, ctx.ID) 160 } 161 162 func TestDiskOp_Config(t *testing.T) { 163 // source archive 164 var archiveID types.ID 165 166 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 167 Parallel: true, 168 SetupAPICallerFunc: singletonAPICaller, 169 Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 170 client := iaas.NewArchiveOp(singletonAPICaller()) 171 searched, err := client.Find(ctx, testZone, &iaas.FindCondition{ 172 Filter: search.Filter{ 173 search.Key("Tags.Name"): search.TagsAndEqual("current-stable", "distro-ubuntu"), 174 }, 175 }) 176 if !assert.NoError(t, err) { 177 return err 178 } 179 if searched.Count == 0 { 180 return errors.New("archive is not found") 181 } 182 archiveID = searched.Archives[0].ID 183 return nil 184 }, 185 Create: &testutil.CRUDTestFunc{ 186 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 187 client := iaas.NewDiskOp(singletonAPICaller()) 188 disk, err := client.Create(ctx, testZone, &iaas.DiskCreateRequest{ 189 Name: testutil.ResourceName("disk-edit"), 190 DiskPlanID: types.DiskPlans.SSD, 191 SizeMB: 20 * size.GiB, 192 SourceArchiveID: archiveID, 193 }, nil) 194 if err != nil { 195 return nil, err 196 } 197 if _, err = iaas.WaiterForReady(func() (interface{}, error) { 198 return client.Read(ctx, testZone, disk.ID) 199 }).WaitForState(ctx); err != nil { 200 return disk, err 201 } 202 203 return disk, nil 204 }, 205 }, 206 Read: &testutil.CRUDTestFunc{ 207 Func: testDiskRead, 208 }, 209 Updates: []*testutil.CRUDTestFunc{ 210 { 211 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 212 // edit disk 213 client := iaas.NewDiskOp(singletonAPICaller()) 214 err := client.Config(ctx, testZone, ctx.ID, &iaas.DiskEditRequest{ 215 Background: true, 216 Password: "password", 217 SSHKeys: []*iaas.DiskEditSSHKey{ 218 { 219 PublicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4LDQuDiKecOJDPY9InS7EswZ2fPnoRZXc48T1EqyRLyJhgEYGSDWaBiMDs2R/lWgA81Hp37qhrNqZPjFHUkBr93FOXxt9W0m1TNlkNepK0Uyi+14B2n0pdoeqsKEkb3sTevWF0ztxxWrwUd7Mems2hf+wFODITHYye9RlDAKLKPCFRvlQ9xQj4bBWOogQwoaXMSK1znMPjudcm1tRry4KIifLdXmwVKU4qDPGxoXfqs44Dgsikk43UVBStQ7IFoqPgAqcJFSGHLoMS7tPKdTvY9+GME5QidWK84gl69piAkgIdwd+JTMUOc/J+9DXAt220HqZ6l3yhWG5nIgi0x8n", 220 }, 221 }, 222 DisablePWAuth: true, 223 EnableDHCP: true, 224 HostName: "hostname", 225 UserIPAddress: "192.2.0.11", 226 UserSubnet: &iaas.DiskEditUserSubnet{ 227 DefaultRoute: "192.2.0.1", 228 NetworkMaskLen: 24, 229 }, 230 }) 231 if err != nil { 232 return nil, err 233 } 234 // wait 235 _, err = iaas.WaiterForReady(func() (interface{}, error) { 236 return client.Read(ctx, testZone, ctx.ID) 237 }).WaitForState(ctx) 238 return nil, err 239 }, 240 }, 241 }, 242 Delete: &testutil.CRUDTestDeleteFunc{ 243 Func: testDiskDelete, 244 }, 245 }) 246 }