github.com/sacloud/libsacloud/v2@v2.32.3/helper/builder/localrouter/builder_test.go (about)

     1  // Copyright 2016-2022 The Libsacloud 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 localrouter
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/sacloud/libsacloud/v2/sacloud"
    21  	"github.com/sacloud/libsacloud/v2/sacloud/testutil"
    22  	"github.com/sacloud/libsacloud/v2/sacloud/types"
    23  )
    24  
    25  func TestLocalRouterBuilder_Build(t *testing.T) {
    26  	var testZone = testutil.TestZone()
    27  	var peerLocalRouter *sacloud.LocalRouter
    28  	var sw *sacloud.Switch
    29  
    30  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    31  		SetupAPICallerFunc: func() sacloud.APICaller {
    32  			return testutil.SingletonAPICaller()
    33  		},
    34  		Parallel:          true,
    35  		IgnoreStartupWait: true,
    36  		Setup: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error {
    37  			lrOp := sacloud.NewLocalRouterOp(caller)
    38  			lr, err := lrOp.Create(ctx, &sacloud.LocalRouterCreateRequest{
    39  				Name: testutil.ResourceName("local-router-builder"),
    40  			})
    41  			if err != nil {
    42  				return err
    43  			}
    44  			peerLocalRouter = lr
    45  
    46  			swOp := sacloud.NewSwitchOp(caller)
    47  			sw, err = swOp.Create(ctx, testZone, &sacloud.SwitchCreateRequest{
    48  				Name: testutil.ResourceName("local-router-builder"),
    49  			})
    50  			return err
    51  		},
    52  		Create: &testutil.CRUDTestFunc{
    53  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) {
    54  				builder := &Builder{
    55  					Name:        testutil.ResourceName("local-router-builder"),
    56  					Description: "description",
    57  					Tags:        types.Tags{"tag1", "tag2"},
    58  					Switch: &sacloud.LocalRouterSwitch{
    59  						Code:     sw.ID.String(),
    60  						Category: "cloud",
    61  						ZoneID:   testZone,
    62  					},
    63  					Interface: &sacloud.LocalRouterInterface{
    64  						VirtualIPAddress: "192.168.0.1",
    65  						IPAddress:        []string{"192.168.0.11", "192.168.0.12"},
    66  						NetworkMaskLen:   24,
    67  						VRID:             101,
    68  					},
    69  					Peers: []*sacloud.LocalRouterPeer{
    70  						{
    71  							ID:        peerLocalRouter.ID,
    72  							SecretKey: peerLocalRouter.SecretKeys[0],
    73  							Enabled:   true,
    74  						},
    75  					},
    76  					StaticRoutes: []*sacloud.LocalRouterStaticRoute{
    77  						{
    78  							Prefix:  "192.168.1.0/24",
    79  							NextHop: "192.168.0.101",
    80  						},
    81  					},
    82  					Client: NewAPIClient(caller),
    83  				}
    84  				return builder.Build(ctx)
    85  			},
    86  		},
    87  		Read: &testutil.CRUDTestFunc{
    88  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) {
    89  				return sacloud.NewLocalRouterOp(caller).Read(ctx, ctx.ID)
    90  			},
    91  			CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error {
    92  				lr := value.(*sacloud.LocalRouter)
    93  				return testutil.DoAsserts(
    94  					testutil.AssertNotNilFunc(t, lr, "LocalRouter"),
    95  					testutil.AssertLenFunc(t, lr.Peers, 1, "LocalRouter.Peers"),
    96  				)
    97  			},
    98  		},
    99  		Delete: &testutil.CRUDTestDeleteFunc{
   100  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error {
   101  				lrOp := sacloud.NewLocalRouterOp(caller)
   102  				if err := lrOp.Delete(ctx, ctx.ID); err != nil {
   103  					return err
   104  				}
   105  				if err := lrOp.Delete(ctx, peerLocalRouter.ID); err != nil {
   106  					return err
   107  				}
   108  				sacloud.NewSwitchOp(caller).Delete(ctx, testZone, sw.ID) // nolint
   109  				return nil
   110  			},
   111  		},
   112  	})
   113  }
   114  
   115  func TestLocalRouterBuilder_minimum(t *testing.T) {
   116  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
   117  		SetupAPICallerFunc: func() sacloud.APICaller {
   118  			return testutil.SingletonAPICaller()
   119  		},
   120  		Parallel:          true,
   121  		IgnoreStartupWait: true,
   122  		Create: &testutil.CRUDTestFunc{
   123  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) {
   124  				builder := &Builder{
   125  					Name:   testutil.ResourceName("local-router-builder"),
   126  					Client: NewAPIClient(caller),
   127  				}
   128  				return builder.Build(ctx)
   129  			},
   130  		},
   131  		Read: &testutil.CRUDTestFunc{
   132  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) {
   133  				return sacloud.NewLocalRouterOp(caller).Read(ctx, ctx.ID)
   134  			},
   135  			CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error {
   136  				lr := value.(*sacloud.LocalRouter)
   137  				return testutil.DoAsserts(
   138  					testutil.AssertNotNilFunc(t, lr, "LocalRouter"),
   139  				)
   140  			},
   141  		},
   142  		Delete: &testutil.CRUDTestDeleteFunc{
   143  			Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error {
   144  				lrOp := sacloud.NewLocalRouterOp(caller)
   145  				return lrOp.Delete(ctx, ctx.ID)
   146  			},
   147  		},
   148  	})
   149  }