github.com/sacloud/iaas-api-go@v1.12.0/test/auto_backup_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 "testing" 19 20 "github.com/sacloud/iaas-api-go" 21 "github.com/sacloud/iaas-api-go/testutil" 22 "github.com/sacloud/iaas-api-go/types" 23 "github.com/sacloud/packages-go/size" 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestAutoBackupOpCRUD(t *testing.T) { 28 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 29 Parallel: true, 30 31 SetupAPICallerFunc: singletonAPICaller, 32 33 Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 34 diskOp := iaas.NewDiskOp(caller) 35 disk, err := diskOp.Create(ctx, testZone, &iaas.DiskCreateRequest{ 36 Name: testutil.ResourceName("-disk-for-autobackup"), 37 SizeMB: 20 * size.GiB, 38 DiskPlanID: types.DiskPlans.SSD, 39 }, nil) 40 if !assert.NoError(t, err) { 41 return err 42 } 43 44 _, err = iaas.WaiterForReady(func() (interface{}, error) { 45 return diskOp.Read(ctx, testZone, disk.ID) 46 }).WaitForState(ctx) 47 if !assert.NoError(t, err) { 48 return err 49 } 50 51 ctx.Values["autobackup/disk"] = disk.ID 52 createAutoBackupParam.DiskID = disk.ID 53 createAutoBackupExpected.DiskID = disk.ID 54 updateAutoBackupExpected.DiskID = disk.ID 55 updateAutoBackupToMinExpected.DiskID = disk.ID 56 return err 57 }, 58 59 Create: &testutil.CRUDTestFunc{ 60 Func: testAutoBackupCreate, 61 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 62 ExpectValue: createAutoBackupExpected, 63 IgnoreFields: ignoreAutoBackupFields, 64 }), 65 }, 66 67 Read: &testutil.CRUDTestFunc{ 68 Func: testAutoBackupRead, 69 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 70 ExpectValue: createAutoBackupExpected, 71 IgnoreFields: ignoreAutoBackupFields, 72 }), 73 }, 74 75 Updates: []*testutil.CRUDTestFunc{ 76 { 77 Func: testAutoBackupUpdate, 78 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 79 ExpectValue: updateAutoBackupExpected, 80 IgnoreFields: ignoreAutoBackupFields, 81 }), 82 }, 83 { 84 Func: testAutoBackupUpdateSettings, 85 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 86 ExpectValue: updateAutoBackupSettingsExpected, 87 IgnoreFields: ignoreAutoBackupFields, 88 }), 89 }, 90 { 91 Func: testAutoBackupUpdateToMin, 92 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 93 ExpectValue: updateAutoBackupToMinExpected, 94 IgnoreFields: ignoreAutoBackupFields, 95 }), 96 }, 97 }, 98 99 Delete: &testutil.CRUDTestDeleteFunc{ 100 Func: testAutoBackupDelete, 101 }, 102 103 Cleanup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 104 diskID, ok := ctx.Values["autobackup/disk"] 105 if !ok { 106 return nil 107 } 108 109 diskOp := iaas.NewDiskOp(caller) 110 return diskOp.Delete(ctx, testZone, diskID.(types.ID)) 111 }, 112 }) 113 } 114 115 var ( 116 ignoreAutoBackupFields = []string{ 117 "ID", 118 "Class", 119 "SettingsHash", 120 "CreatedAt", 121 "ModifiedAt", 122 "DiskID", 123 "AccountID", 124 "ZoneID", 125 "ZoneName", 126 } 127 createAutoBackupParam = &iaas.AutoBackupCreateRequest{ 128 Name: testutil.ResourceName("auto-backup"), 129 Description: "desc", 130 Tags: []string{"tag1", "tag2"}, 131 BackupSpanWeekdays: []types.EDayOfTheWeek{ 132 types.DaysOfTheWeek.Monday, 133 types.DaysOfTheWeek.Tuesday, 134 }, 135 MaximumNumberOfArchives: 2, 136 } 137 createAutoBackupExpected = &iaas.AutoBackup{ 138 Name: createAutoBackupParam.Name, 139 Description: createAutoBackupParam.Description, 140 Tags: createAutoBackupParam.Tags, 141 Availability: types.Availabilities.Available, 142 BackupSpanWeekdays: createAutoBackupParam.BackupSpanWeekdays, 143 MaximumNumberOfArchives: createAutoBackupParam.MaximumNumberOfArchives, 144 } 145 updateAutoBackupParam = &iaas.AutoBackupUpdateRequest{ 146 Name: testutil.ResourceName("auto-backup-upd"), 147 Description: "desc-upd", 148 Tags: []string{"tag1-upd", "tag2-upd"}, 149 BackupSpanWeekdays: []types.EDayOfTheWeek{ 150 types.DaysOfTheWeek.Monday, 151 types.DaysOfTheWeek.Tuesday, 152 types.DaysOfTheWeek.Wednesday, 153 types.DaysOfTheWeek.Thursday, 154 }, 155 MaximumNumberOfArchives: 3, 156 IconID: testIconID, 157 } 158 updateAutoBackupExpected = &iaas.AutoBackup{ 159 Name: updateAutoBackupParam.Name, 160 Description: updateAutoBackupParam.Description, 161 Tags: updateAutoBackupParam.Tags, 162 Availability: types.Availabilities.Available, 163 BackupSpanWeekdays: updateAutoBackupParam.BackupSpanWeekdays, 164 MaximumNumberOfArchives: updateAutoBackupParam.MaximumNumberOfArchives, 165 IconID: testIconID, 166 } 167 168 updateAutoBackupSettingsParam = &iaas.AutoBackupUpdateSettingsRequest{ 169 BackupSpanWeekdays: []types.EDayOfTheWeek{ 170 types.DaysOfTheWeek.Monday, 171 types.DaysOfTheWeek.Tuesday, 172 types.DaysOfTheWeek.Wednesday, 173 }, 174 MaximumNumberOfArchives: 4, 175 } 176 updateAutoBackupSettingsExpected = &iaas.AutoBackup{ 177 Name: updateAutoBackupParam.Name, 178 Description: updateAutoBackupParam.Description, 179 Tags: updateAutoBackupParam.Tags, 180 Availability: types.Availabilities.Available, 181 BackupSpanWeekdays: updateAutoBackupSettingsParam.BackupSpanWeekdays, 182 MaximumNumberOfArchives: updateAutoBackupSettingsParam.MaximumNumberOfArchives, 183 IconID: testIconID, 184 } 185 186 updateAutoBackupToMinParam = &iaas.AutoBackupUpdateRequest{ 187 Name: testutil.ResourceName("auto-backup-to-min"), 188 BackupSpanWeekdays: []types.EDayOfTheWeek{ 189 types.DaysOfTheWeek.Sunday, 190 }, 191 MaximumNumberOfArchives: 1, 192 } 193 updateAutoBackupToMinExpected = &iaas.AutoBackup{ 194 Name: updateAutoBackupToMinParam.Name, 195 Availability: types.Availabilities.Available, 196 BackupSpanWeekdays: updateAutoBackupToMinParam.BackupSpanWeekdays, 197 MaximumNumberOfArchives: updateAutoBackupToMinParam.MaximumNumberOfArchives, 198 } 199 ) 200 201 func testAutoBackupCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 202 client := iaas.NewAutoBackupOp(caller) 203 return client.Create(ctx, testZone, createAutoBackupParam) 204 } 205 206 func testAutoBackupRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 207 client := iaas.NewAutoBackupOp(caller) 208 return client.Read(ctx, testZone, ctx.ID) 209 } 210 211 func testAutoBackupUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 212 client := iaas.NewAutoBackupOp(caller) 213 return client.Update(ctx, testZone, ctx.ID, updateAutoBackupParam) 214 } 215 216 func testAutoBackupUpdateSettings(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 217 client := iaas.NewAutoBackupOp(caller) 218 return client.UpdateSettings(ctx, testZone, ctx.ID, updateAutoBackupSettingsParam) 219 } 220 221 func testAutoBackupUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 222 client := iaas.NewAutoBackupOp(caller) 223 return client.Update(ctx, testZone, ctx.ID, updateAutoBackupToMinParam) 224 } 225 226 func testAutoBackupDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 227 client := iaas.NewAutoBackupOp(caller) 228 return client.Delete(ctx, testZone, ctx.ID) 229 }