github.com/sacloud/iaas-api-go@v1.12.0/test/archive_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/testutil" 23 "github.com/sacloud/iaas-api-go/types" 24 "github.com/sacloud/packages-go/size" 25 "github.com/stretchr/testify/assert" 26 ) 27 28 func TestArchiveOpCRUD(t *testing.T) { 29 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 30 Parallel: true, 31 32 SetupAPICallerFunc: singletonAPICaller, 33 34 Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 35 client := iaas.NewArchiveOp(caller) 36 findResult, err := client.Find(ctx, testZone, nil) 37 if err != nil { 38 return err 39 } 40 archives := findResult.Archives 41 for _, a := range archives { 42 if a.GetSizeGB() == 20 && a.Availability.IsAvailable() { 43 ctx.Values["archive"] = a.ID 44 createArchiveParam.SourceArchiveID = a.ID 45 createArchiveExpected.SourceArchiveID = a.ID 46 createArchiveExpected.SourceArchiveAvailability = a.Availability 47 updateArchiveExpected.SourceArchiveID = a.ID 48 updateArchiveExpected.SourceArchiveAvailability = a.Availability 49 updateArchiveToMinExpected.SourceArchiveID = a.ID 50 updateArchiveToMinExpected.SourceArchiveAvailability = a.Availability 51 52 return nil 53 } 54 } 55 return errors.New("valid archive is not found") 56 }, 57 58 Create: &testutil.CRUDTestFunc{ 59 Func: testArchiveCreate, 60 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 61 ExpectValue: createArchiveExpected, 62 IgnoreFields: ignoreArchiveFields, 63 }), 64 }, 65 66 Read: &testutil.CRUDTestFunc{ 67 Func: testArchiveRead, 68 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 69 ExpectValue: createArchiveExpected, 70 IgnoreFields: ignoreArchiveFields, 71 }), 72 }, 73 74 Updates: []*testutil.CRUDTestFunc{ 75 { 76 Func: testArchiveUpdate, 77 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 78 ExpectValue: updateArchiveExpected, 79 IgnoreFields: ignoreArchiveFields, 80 }), 81 }, 82 { 83 Func: testArchiveUpdateToMin, 84 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 85 ExpectValue: updateArchiveToMinExpected, 86 IgnoreFields: ignoreArchiveFields, 87 }), 88 }, 89 }, 90 91 Delete: &testutil.CRUDTestDeleteFunc{ 92 Func: testArchiveDelete, 93 }, 94 }) 95 } 96 97 var ( 98 ignoreArchiveFields = []string{ 99 "ID", 100 "DisplayOrder", 101 "Availability", 102 "DiskPlanName", 103 "SizeMB", 104 "MigratedMB", 105 "DiskPlanStorageClass", 106 "SourceDiskID", 107 "SourceDiskAvailability", 108 "BundleInfo", 109 "Storage", 110 "CreatedAt", 111 "ModifiedAt", 112 "OriginalArchiveID", 113 "SourceInfo", 114 } 115 116 createArchiveParam = &iaas.ArchiveCreateRequest{ 117 Name: testutil.ResourceName("archive"), 118 Description: "desc", 119 Tags: []string{"tag1", "tag2"}, 120 } 121 createArchiveExpected = &iaas.Archive{ 122 Name: createArchiveParam.Name, 123 Description: createArchiveParam.Description, 124 Tags: createArchiveParam.Tags, 125 Scope: types.Scopes.User, 126 DiskPlanID: types.DiskPlans.HDD, 127 } 128 129 updateArchiveParam = &iaas.ArchiveUpdateRequest{ 130 Name: testutil.ResourceName("archive-upd"), 131 Description: "desc-upd", 132 Tags: []string{"tag1-upd", "tag2-upd"}, 133 IconID: testIconID, 134 } 135 updateArchiveExpected = &iaas.Archive{ 136 Name: updateArchiveParam.Name, 137 Description: updateArchiveParam.Description, 138 Tags: updateArchiveParam.Tags, 139 Scope: types.Scopes.User, 140 DiskPlanID: types.DiskPlans.HDD, 141 IconID: updateArchiveParam.IconID, 142 } 143 updateArchiveToMinParam = &iaas.ArchiveUpdateRequest{ 144 Name: testutil.ResourceName("archive-min"), 145 Description: "", 146 } 147 updateArchiveToMinExpected = &iaas.Archive{ 148 Name: updateArchiveToMinParam.Name, 149 Description: updateArchiveToMinParam.Description, 150 Scope: types.Scopes.User, 151 DiskPlanID: types.DiskPlans.HDD, 152 } 153 ) 154 155 func testArchiveCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 156 client := iaas.NewArchiveOp(caller) 157 return client.Create(ctx, testZone, createArchiveParam) 158 } 159 160 func testArchiveRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 161 client := iaas.NewArchiveOp(caller) 162 return client.Read(ctx, testZone, ctx.ID) 163 } 164 165 func testArchiveUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 166 client := iaas.NewArchiveOp(caller) 167 return client.Update(ctx, testZone, ctx.ID, updateArchiveParam) 168 } 169 170 func testArchiveUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 171 client := iaas.NewArchiveOp(caller) 172 return client.Update(ctx, testZone, ctx.ID, updateArchiveToMinParam) 173 } 174 175 func testArchiveDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 176 client := iaas.NewArchiveOp(caller) 177 return client.Delete(ctx, testZone, ctx.ID) 178 } 179 180 func TestArchiveOp_CreateBlank(t *testing.T) { 181 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 182 Parallel: true, 183 IgnoreStartupWait: true, 184 SetupAPICallerFunc: singletonAPICaller, 185 Create: &testutil.CRUDTestFunc{ 186 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 187 client := iaas.NewArchiveOp(singletonAPICaller()) 188 archive, ftpServer, err := client.CreateBlank(ctx, testZone, &iaas.ArchiveCreateBlankRequest{ 189 SizeMB: 20 * size.GiB, 190 Name: testutil.ResourceName("archive-blank"), 191 }) 192 193 if err != nil { 194 return nil, err 195 } 196 197 assert.NotNil(t, archive) 198 assert.NotNil(t, ftpServer) 199 200 return archive, err 201 }, 202 }, 203 Delete: &testutil.CRUDTestDeleteFunc{ 204 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 205 client := iaas.NewArchiveOp(singletonAPICaller()) 206 return client.Delete(ctx, testZone, ctx.ID) 207 }, 208 }, 209 }) 210 }