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  }