github.com/sacloud/iaas-api-go@v1.12.0/test/switch_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 ) 24 25 func TestSwitchOp_CRUD(t *testing.T) { 26 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 27 Parallel: true, 28 29 SetupAPICallerFunc: singletonAPICaller, 30 Create: &testutil.CRUDTestFunc{ 31 Func: testSwitchCreate, 32 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 33 ExpectValue: createSwitchExpected, 34 IgnoreFields: ignoreSwitchFields, 35 }), 36 }, 37 Read: &testutil.CRUDTestFunc{ 38 Func: testSwitchRead, 39 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 40 ExpectValue: createSwitchExpected, 41 IgnoreFields: ignoreSwitchFields, 42 }), 43 }, 44 Updates: []*testutil.CRUDTestFunc{ 45 { 46 Func: testSwitchUpdate, 47 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 48 ExpectValue: updateSwitchExpected, 49 IgnoreFields: ignoreSwitchFields, 50 }), 51 }, 52 { 53 Func: testSwitchUpdateToMin, 54 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 55 ExpectValue: updateSwitchToMinExpected, 56 IgnoreFields: ignoreSwitchFields, 57 }), 58 }, 59 }, 60 Delete: &testutil.CRUDTestDeleteFunc{ 61 Func: testSwitchDelete, 62 }, 63 }) 64 } 65 66 var ( 67 ignoreSwitchFields = []string{ 68 "ID", 69 "CreatedAt", 70 "ModifiedAt", 71 } 72 createSwitchParam = &iaas.SwitchCreateRequest{ 73 Name: testutil.ResourceName("switch"), 74 Description: "desc", 75 Tags: []string{"tag1", "tag2"}, 76 DefaultRoute: "192.168.0.1", 77 NetworkMaskLen: 24, 78 } 79 createSwitchExpected = &iaas.Switch{ 80 Name: createSwitchParam.Name, 81 Description: createSwitchParam.Description, 82 Tags: createSwitchParam.Tags, 83 DefaultRoute: createSwitchParam.DefaultRoute, 84 NetworkMaskLen: createSwitchParam.NetworkMaskLen, 85 Scope: types.Scopes.User, 86 } 87 updateSwitchParam = &iaas.SwitchUpdateRequest{ 88 Name: testutil.ResourceName("switch-upd"), 89 Tags: []string{"tag1-upd", "tag2-upd"}, 90 Description: "desc-upd", 91 DefaultRoute: "192.168.0.2", 92 NetworkMaskLen: 28, 93 IconID: testIconID, 94 } 95 updateSwitchExpected = &iaas.Switch{ 96 Name: updateSwitchParam.Name, 97 Description: updateSwitchParam.Description, 98 Tags: updateSwitchParam.Tags, 99 DefaultRoute: updateSwitchParam.DefaultRoute, 100 NetworkMaskLen: updateSwitchParam.NetworkMaskLen, 101 Scope: createSwitchExpected.Scope, 102 IconID: testIconID, 103 } 104 updateSwitchToMinParam = &iaas.SwitchUpdateRequest{ 105 Name: testutil.ResourceName("switch-to-min"), 106 } 107 updateSwitchToMinExpected = &iaas.Switch{ 108 Name: updateSwitchToMinParam.Name, 109 Scope: createSwitchExpected.Scope, 110 } 111 ) 112 113 func testSwitchCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 114 client := iaas.NewSwitchOp(caller) 115 return client.Create(ctx, testZone, createSwitchParam) 116 } 117 118 func testSwitchRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 119 client := iaas.NewSwitchOp(caller) 120 return client.Read(ctx, testZone, ctx.ID) 121 } 122 123 func testSwitchUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 124 client := iaas.NewSwitchOp(caller) 125 return client.Update(ctx, testZone, ctx.ID, updateSwitchParam) 126 } 127 128 func testSwitchUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 129 client := iaas.NewSwitchOp(caller) 130 return client.Update(ctx, testZone, ctx.ID, updateSwitchToMinParam) 131 } 132 133 func testSwitchDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 134 client := iaas.NewSwitchOp(caller) 135 return client.Delete(ctx, testZone, ctx.ID) 136 } 137 138 func TestSwitchOp_BridgeConnection(t *testing.T) { 139 caller := singletonAPICaller() 140 141 swOp := iaas.NewSwitchOp(caller) 142 bridgeOp := iaas.NewBridgeOp(caller) 143 144 var bridgeID types.ID 145 146 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 147 Parallel: true, 148 SetupAPICallerFunc: singletonAPICaller, 149 Create: &testutil.CRUDTestFunc{ 150 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (i interface{}, e error) { 151 return swOp.Create(ctx, testZone, &iaas.SwitchCreateRequest{ 152 Name: testutil.ResourceName("switch-for-bridge"), 153 }) 154 }, 155 }, 156 Read: &testutil.CRUDTestFunc{ 157 Func: testSwitchRead, 158 }, 159 Updates: []*testutil.CRUDTestFunc{ 160 // bridge create and connect 161 { 162 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (i interface{}, e error) { 163 bridge, err := bridgeOp.Create(ctx, testZone, &iaas.BridgeCreateRequest{ 164 Name: testutil.ResourceName("bridge"), 165 }) 166 if err != nil { 167 return nil, err 168 } 169 bridgeID = bridge.ID 170 return bridge, nil 171 }, 172 SkipExtractID: true, 173 }, 174 // connect 175 { 176 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (i interface{}, e error) { 177 // connect to bridge 178 if err := swOp.ConnectToBridge(ctx, testZone, ctx.ID, bridgeID); err != nil { 179 return nil, err 180 } 181 return nil, nil 182 }, 183 SkipExtractID: true, 184 CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, i interface{}) error { 185 sw, err := swOp.Read(ctx, testZone, ctx.ID) 186 if err != nil { 187 return err 188 } 189 if err := testutil.AssertEqual(t, bridgeID, sw.BridgeID, "Switch.BridgeID"); err != nil { 190 return err 191 } 192 193 bridge, err := bridgeOp.Read(ctx, testZone, bridgeID) 194 if err != nil { 195 return err 196 } 197 198 return testutil.DoAsserts( 199 testutil.AssertEqualFunc(t, sw.ID, bridge.SwitchInZone.ID, "Bridge.SwitchInZone.ID"), 200 testutil.AssertLenFunc(t, bridge.BridgeInfo, 0, "Bridge.BridgeInfo"), 201 ) 202 }, 203 }, 204 // disconnect 205 { 206 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (i interface{}, e error) { 207 if err := swOp.DisconnectFromBridge(ctx, testZone, ctx.ID); err != nil { 208 return nil, err 209 } 210 return nil, nil 211 }, 212 SkipExtractID: true, 213 CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, i interface{}) error { 214 sw, err := swOp.Read(ctx, testZone, ctx.ID) 215 if err != nil { 216 return err 217 } 218 if err := testutil.AssertTrue(t, sw.BridgeID.IsEmpty(), "Switch.BridgeID"); err != nil { 219 return err 220 } 221 222 bridge, err := bridgeOp.Read(ctx, testZone, bridgeID) 223 if err != nil { 224 return err 225 } 226 227 return testutil.DoAsserts( 228 testutil.AssertNilFunc(t, bridge.SwitchInZone, "Bridge.SwitchInZone"), 229 testutil.AssertLenFunc(t, bridge.BridgeInfo, 0, "Bridge.BridgeInfo"), 230 ) 231 }, 232 }, 233 // bridge delete 234 { 235 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 236 if err := bridgeOp.Delete(ctx, testZone, bridgeID); err != nil { 237 return nil, err 238 } 239 return nil, nil 240 }, 241 SkipExtractID: true, 242 }, 243 }, 244 Delete: &testutil.CRUDTestDeleteFunc{ 245 Func: testSwitchDelete, 246 }, 247 }) 248 }