github.com/sacloud/iaas-api-go@v1.12.0/test/internet_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/stretchr/testify/assert" 25 ) 26 27 func TestInternetOp_CRUD(t *testing.T) { 28 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 29 Parallel: true, 30 31 SetupAPICallerFunc: singletonAPICaller, 32 Create: &testutil.CRUDTestFunc{ 33 Func: testInternetCreate, 34 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 35 ExpectValue: createInternetExpected, 36 IgnoreFields: ignoreInternetFields, 37 }), 38 }, 39 Read: &testutil.CRUDTestFunc{ 40 Func: testInternetRead, 41 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 42 ExpectValue: createInternetExpected, 43 IgnoreFields: ignoreInternetFields, 44 }), 45 }, 46 Updates: []*testutil.CRUDTestFunc{ 47 { 48 Func: testInternetUpdate, 49 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 50 ExpectValue: updateInternetExpected, 51 IgnoreFields: ignoreInternetFields, 52 }), 53 }, 54 { 55 Func: testInternetUpdateToMin, 56 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 57 ExpectValue: updateInternetToMinExpected, 58 IgnoreFields: ignoreInternetFields, 59 }), 60 }, 61 }, 62 Delete: &testutil.CRUDTestDeleteFunc{ 63 Func: testInternetDelete, 64 }, 65 }) 66 } 67 68 var ( 69 ignoreInternetFields = []string{ 70 "ID", 71 "CreatedAt", 72 "Switch", 73 } 74 createInternetParam = &iaas.InternetCreateRequest{ 75 Name: testutil.ResourceName("internet"), 76 Description: "desc", 77 Tags: []string{"tag1", "tag2"}, 78 NetworkMaskLen: 28, 79 BandWidthMbps: 100, 80 } 81 createInternetExpected = &iaas.Internet{ 82 Name: createInternetParam.Name, 83 Description: createInternetParam.Description, 84 Tags: createInternetParam.Tags, 85 NetworkMaskLen: createInternetParam.NetworkMaskLen, 86 BandWidthMbps: createInternetParam.BandWidthMbps, 87 } 88 updateInternetParam = &iaas.InternetUpdateRequest{ 89 Name: testutil.ResourceName("internet-upd"), 90 Tags: []string{"tag1-upd", "tag2-upd"}, 91 Description: "desc-upd", 92 IconID: testIconID, 93 } 94 updateInternetExpected = &iaas.Internet{ 95 Name: updateInternetParam.Name, 96 Description: updateInternetParam.Description, 97 Tags: updateInternetParam.Tags, 98 NetworkMaskLen: createInternetParam.NetworkMaskLen, 99 BandWidthMbps: createInternetParam.BandWidthMbps, 100 IconID: testIconID, 101 } 102 updateInternetToMinParam = &iaas.InternetUpdateRequest{ 103 Name: testutil.ResourceName("internet-to-min"), 104 } 105 updateInternetToMinExpected = &iaas.Internet{ 106 Name: updateInternetToMinParam.Name, 107 NetworkMaskLen: createInternetParam.NetworkMaskLen, 108 BandWidthMbps: createInternetParam.BandWidthMbps, 109 } 110 ) 111 112 func testInternetCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 113 client := iaas.NewInternetOp(caller) 114 return client.Create(ctx, testZone, createInternetParam) 115 } 116 117 func testInternetRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 118 client := iaas.NewInternetOp(caller) 119 return client.Read(ctx, testZone, ctx.ID) 120 } 121 122 func testInternetUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 123 client := iaas.NewInternetOp(caller) 124 return client.Update(ctx, testZone, ctx.ID, updateInternetParam) 125 } 126 127 func testInternetUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 128 client := iaas.NewInternetOp(caller) 129 return client.Update(ctx, testZone, ctx.ID, updateInternetToMinParam) 130 } 131 132 func testInternetDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 133 client := iaas.NewInternetOp(caller) 134 return client.Delete(ctx, testZone, ctx.ID) 135 } 136 137 func TestInternetOp_Subnet(t *testing.T) { 138 client := iaas.NewInternetOp(singletonAPICaller()) 139 var minIP, maxIP string 140 var subnetID types.ID 141 142 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 143 Parallel: true, 144 IgnoreStartupWait: true, 145 SetupAPICallerFunc: singletonAPICaller, 146 Create: &testutil.CRUDTestFunc{ 147 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 148 var internet *iaas.Internet 149 internet, err := client.Create(ctx, testZone, createInternetParam) 150 if err != nil { 151 return nil, err 152 } 153 waiter := iaas.WaiterForApplianceUp(func() (interface{}, error) { 154 return client.Read(ctx, testZone, internet.ID) 155 }, 100) 156 if _, err := waiter.WaitForState(ctx); err != nil { 157 t.Error("WaitForUp is failed: ", err) 158 return nil, err 159 } 160 161 internet, err = client.Read(ctx, testZone, internet.ID) 162 if err != nil { 163 return nil, err 164 } 165 166 swOp := iaas.NewSwitchOp(singletonAPICaller()) 167 sw, err := swOp.Read(ctx, testZone, internet.Switch.ID) 168 if err != nil { 169 return nil, err 170 } 171 minIP = sw.Subnets[0].AssignedIPAddressMin 172 maxIP = sw.Subnets[0].AssignedIPAddressMax 173 174 return internet, nil 175 }, 176 }, 177 Read: &testutil.CRUDTestFunc{ 178 Func: testInternetRead, 179 }, 180 Updates: []*testutil.CRUDTestFunc{ 181 // add subnet 182 { 183 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 184 // add subnet 185 subnet, err := client.AddSubnet(ctx, testZone, ctx.ID, &iaas.InternetAddSubnetRequest{ 186 NetworkMaskLen: 28, 187 NextHop: minIP, 188 }) 189 if err != nil { 190 return nil, err 191 } 192 193 if !assert.Len(t, subnet.IPAddresses, 16) { 194 return nil, errors.New("unexpected state: Subnet.IPAddresses") 195 } 196 if !assert.Equal(t, minIP, subnet.NextHop) { 197 return nil, errors.New("unexpected state: Subnet.NextHop") 198 } 199 subnetID = subnet.ID 200 return subnet, nil 201 }, 202 SkipExtractID: true, 203 }, 204 // update subnet 205 { 206 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 207 subnet, err := client.UpdateSubnet(ctx, testZone, ctx.ID, subnetID, &iaas.InternetUpdateSubnetRequest{ 208 NextHop: maxIP, 209 }) 210 if err != nil { 211 return nil, err 212 } 213 214 if !assert.Len(t, subnet.IPAddresses, 16) { 215 return nil, errors.New("unexpected state: Subnet.IPAddresses") 216 } 217 if !assert.Equal(t, maxIP, subnet.NextHop) { 218 return nil, errors.New("unexpected state: Subnet.NextHop") 219 } 220 return subnet, nil 221 }, 222 SkipExtractID: true, 223 }, 224 // delete subnet 225 { 226 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 227 return nil, client.DeleteSubnet(ctx, testZone, ctx.ID, subnetID) 228 }, 229 SkipExtractID: true, 230 }, 231 }, 232 Delete: &testutil.CRUDTestDeleteFunc{ 233 Func: testInternetDelete, 234 }, 235 }) 236 }