github.com/sacloud/libsacloud/v2@v2.32.3/helper/setup/setup_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 setup 16 17 import ( 18 "context" 19 "testing" 20 "time" 21 22 "github.com/sacloud/libsacloud/v2/helper/power" 23 "github.com/sacloud/libsacloud/v2/helper/query" 24 "github.com/sacloud/libsacloud/v2/sacloud" 25 "github.com/sacloud/libsacloud/v2/sacloud/accessor" 26 "github.com/sacloud/libsacloud/v2/sacloud/testutil" 27 "github.com/sacloud/libsacloud/v2/sacloud/types" 28 ) 29 30 func TestRetryableSetup(t *testing.T) { 31 var switchID types.ID 32 testZone := testutil.TestZone() 33 34 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 35 Parallel: true, 36 SetupAPICallerFunc: func() sacloud.APICaller { 37 return testutil.SingletonAPICaller() 38 }, 39 40 Setup: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error { 41 switchOp := sacloud.NewSwitchOp(caller) 42 sw, err := switchOp.Create(ctx, testZone, &sacloud.SwitchCreateRequest{Name: "libsacloud-switch-for-util-setup"}) 43 if err != nil { 44 return err 45 } 46 switchID = sw.ID 47 return nil 48 }, 49 50 Create: &testutil.CRUDTestFunc{ 51 Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) { 52 nfsOp := sacloud.NewNFSOp(caller) 53 nfsSetup := &RetryableSetup{ 54 Create: func(ctx context.Context, zone string) (accessor.ID, error) { 55 nfsPlanID, err := query.FindNFSPlanID(ctx, sacloud.NewNoteOp(caller), types.NFSPlans.HDD, types.NFSHDDSizes.Size100GB) 56 if err != nil { 57 return nil, err 58 } 59 return nfsOp.Create(ctx, zone, &sacloud.NFSCreateRequest{ 60 Name: "libsacloud-nfs-for-util-setup", 61 SwitchID: switchID, 62 PlanID: nfsPlanID, 63 IPAddresses: []string{"192.168.0.11"}, 64 NetworkMaskLen: 24, 65 DefaultRoute: "192.168.0.1", 66 }) 67 }, 68 Read: func(ctx context.Context, zone string, id types.ID) (interface{}, error) { 69 return nfsOp.Read(ctx, zone, id) 70 }, 71 Delete: func(ctx context.Context, zone string, id types.ID) error { 72 return nfsOp.Delete(ctx, zone, id) 73 }, 74 IsWaitForCopy: true, 75 IsWaitForUp: true, 76 RetryCount: 3, 77 } 78 if !testutil.IsAccTest() { 79 nfsSetup.ProvisioningRetryInterval = time.Millisecond 80 nfsSetup.DeleteRetryInterval = time.Millisecond 81 nfsSetup.PollingInterval = time.Millisecond 82 } 83 84 return nfsSetup.Setup(ctx, testZone) 85 }, 86 }, 87 Read: &testutil.CRUDTestFunc{ 88 Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) (interface{}, error) { 89 nfsOp := sacloud.NewNFSOp(caller) 90 return nfsOp.Read(ctx, testZone, ctx.ID) 91 }, 92 CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, i interface{}) error { 93 nfs := i.(*sacloud.NFS) 94 return testutil.DoAsserts( 95 testutil.AssertEqualFunc(t, types.Availabilities.Available, nfs.Availability, "NFS.Availability"), 96 ) 97 }, 98 }, 99 100 Shutdown: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error { 101 return power.ShutdownNFS(ctx, sacloud.NewNFSOp(caller), testZone, ctx.ID, true) 102 }, 103 104 Delete: &testutil.CRUDTestDeleteFunc{ 105 Func: func(ctx *testutil.CRUDTestContext, caller sacloud.APICaller) error { 106 nfsOp := sacloud.NewNFSOp(caller) 107 if err := nfsOp.Delete(ctx, testZone, ctx.ID); err != nil { 108 return err 109 } 110 111 switchOp := sacloud.NewSwitchOp(caller) 112 if err := switchOp.Delete(ctx, testZone, switchID); err != nil { 113 return err 114 } 115 return nil 116 }, 117 }, 118 }) 119 }