github.com/sacloud/iaas-api-go@v1.12.0/test/interface_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 TestInterface_Operations(t *testing.T) {
    28  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    29  		Parallel:          true,
    30  		IgnoreStartupWait: true,
    31  
    32  		SetupAPICallerFunc: singletonAPICaller,
    33  
    34  		Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
    35  			serverClient := iaas.NewServerOp(caller)
    36  			server, err := serverClient.Create(ctx, testZone, &iaas.ServerCreateRequest{
    37  				CPU:      1,
    38  				MemoryMB: 1 * size.GiB,
    39  				//ConnectedSwitches: []*ConnectedSwitch{
    40  				//	{Scope: types.Scopes.Shared},
    41  				// },
    42  				ServerPlanCommitment: types.Commitments.Standard,
    43  				Name:                 testutil.ResourceName("server-with-interface"),
    44  			})
    45  			if !assert.NoError(t, err) {
    46  				return err
    47  			}
    48  
    49  			ctx.Values["interface/server"] = server.ID
    50  			createInterfaceParam.ServerID = server.ID
    51  			createInterfaceExpected.ServerID = server.ID
    52  			updateInterfaceExpected.ServerID = server.ID
    53  			return nil
    54  		},
    55  
    56  		Create: &testutil.CRUDTestFunc{
    57  			Func: testInterfaceCreate,
    58  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    59  				ExpectValue:  createInterfaceExpected,
    60  				IgnoreFields: ignoreInterfaceFields,
    61  			}),
    62  		},
    63  		Read: &testutil.CRUDTestFunc{
    64  			Func: testInterfaceRead,
    65  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    66  				ExpectValue:  createInterfaceExpected,
    67  				IgnoreFields: ignoreInterfaceFields,
    68  			}),
    69  		},
    70  		Updates: []*testutil.CRUDTestFunc{
    71  			{
    72  				Func: testInterfaceUpdate,
    73  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    74  					ExpectValue:  updateInterfaceExpected,
    75  					IgnoreFields: ignoreInterfaceFields,
    76  				}),
    77  			},
    78  		},
    79  		Delete: &testutil.CRUDTestDeleteFunc{
    80  			Func: testInterfaceDelete,
    81  		},
    82  
    83  		Cleanup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
    84  			serverID, ok := ctx.Values["interface/server"]
    85  			if !ok {
    86  				return nil
    87  			}
    88  
    89  			serverClient := iaas.NewServerOp(caller)
    90  			return serverClient.Delete(ctx, testZone, serverID.(types.ID))
    91  		},
    92  	})
    93  }
    94  
    95  var (
    96  	ignoreInterfaceFields = []string{
    97  		"ID",
    98  		"MACAddress",
    99  		"IPAddress",
   100  		"CreatedAt",
   101  		"ModifiedAt",
   102  	}
   103  	createInterfaceParam = &iaas.InterfaceCreateRequest{}
   104  
   105  	createInterfaceExpected = &iaas.Interface{
   106  		UserIPAddress:  "",
   107  		HostName:       "",
   108  		SwitchID:       types.ID(0),
   109  		PacketFilterID: types.ID(0),
   110  	}
   111  	updateInterfaceParam = &iaas.InterfaceUpdateRequest{
   112  		UserIPAddress: "192.2.0.1",
   113  	}
   114  	updateInterfaceExpected = &iaas.Interface{
   115  		UserIPAddress:  "192.2.0.1",
   116  		HostName:       "",
   117  		SwitchID:       types.ID(0),
   118  		PacketFilterID: types.ID(0),
   119  	}
   120  )
   121  
   122  func testInterfaceCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   123  	client := iaas.NewInterfaceOp(caller)
   124  	return client.Create(ctx, testZone, createInterfaceParam)
   125  }
   126  
   127  func testInterfaceRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   128  	client := iaas.NewInterfaceOp(caller)
   129  	return client.Read(ctx, testZone, ctx.ID)
   130  }
   131  
   132  func testInterfaceUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   133  	client := iaas.NewInterfaceOp(caller)
   134  	return client.Update(ctx, testZone, ctx.ID, updateInterfaceParam)
   135  }
   136  
   137  func testInterfaceDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   138  	client := iaas.NewInterfaceOp(caller)
   139  	return client.Delete(ctx, testZone, ctx.ID)
   140  }