github.com/sacloud/iaas-api-go@v1.12.0/helper/query/nfs_plan_test.go (about) 1 // Copyright 2016-2022 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 query 16 17 import ( 18 "context" 19 "errors" 20 "fmt" 21 "testing" 22 23 "github.com/sacloud/iaas-api-go" 24 "github.com/sacloud/iaas-api-go/types" 25 "github.com/stretchr/testify/require" 26 ) 27 28 func TestFindNFSPlanID(t *testing.T) { 29 cases := []struct { 30 msg string 31 finder NoteFinder 32 inputDiskPlanID types.ID 33 inputDiskSize types.ENFSSize 34 expectedValue types.ID 35 expectedErr error 36 }{ 37 { 38 msg: "finder returns error", 39 finder: &dummyNoteFinder{ 40 notes: []*iaas.Note{}, 41 err: errors.New("dummy"), 42 }, 43 expectedErr: errors.New("dummy"), 44 }, 45 { 46 msg: "finder returns zero", 47 finder: &dummyNoteFinder{ 48 notes: []*iaas.Note{}, 49 }, 50 expectedErr: errors.New("note[sys-nfs] not found"), 51 }, 52 { 53 msg: "not found", 54 finder: &dummyNoteFinder{ 55 notes: []*iaas.Note{ 56 { 57 Name: "sys-nfs", 58 Class: "json", 59 Content: `{"plans":{"HDD":[{"size": 100,"availability":"available","planId":1}]}}`, 60 }, 61 }, 62 err: nil, 63 }, 64 inputDiskPlanID: types.NFSPlans.SSD, 65 inputDiskSize: types.NFSHDDSizes.Size100GB, 66 expectedValue: 0, 67 expectedErr: nil, 68 }, 69 { 70 msg: "normal", 71 finder: &dummyNoteFinder{ 72 notes: []*iaas.Note{ 73 { 74 Name: "sys-nfs", 75 Class: "json", 76 Content: `{"plans":{"HDD":[{"size": 100,"availability":"available","planId":1}]}}`, 77 }, 78 }, 79 err: nil, 80 }, 81 inputDiskPlanID: types.NFSPlans.HDD, 82 inputDiskSize: types.NFSHDDSizes.Size100GB, 83 expectedValue: 1, 84 expectedErr: nil, 85 }, 86 } 87 88 for _, tc := range cases { 89 actual, err := FindNFSPlanID(context.Background(), tc.finder, tc.inputDiskPlanID, tc.inputDiskSize) 90 if tc.expectedErr != nil { 91 require.Equal(t, tc.expectedErr, err, tc.msg) 92 } else { 93 require.NoError(t, err, tc.msg) 94 } 95 require.Equal(t, tc.expectedValue, actual, tc.msg) 96 } 97 } 98 99 func TestGetPlanInfo(t *testing.T) { 100 cases := []struct { 101 msg string 102 finder NoteFinder 103 input types.ID 104 expectedValue *NFSPlanInfo 105 expectedErr error 106 }{ 107 { 108 msg: "finder returns error", 109 finder: &dummyNoteFinder{ 110 notes: []*iaas.Note{}, 111 err: errors.New("dummy"), 112 }, 113 expectedErr: errors.New("dummy"), 114 }, 115 { 116 msg: "finder returns zero", 117 finder: &dummyNoteFinder{ 118 notes: []*iaas.Note{}, 119 }, 120 expectedErr: errors.New("note[sys-nfs] not found"), 121 }, 122 { 123 msg: "not found", 124 finder: &dummyNoteFinder{ 125 notes: []*iaas.Note{ 126 { 127 Name: "sys-nfs", 128 Class: "json", 129 Content: `{"plans":{"HDD":[{"size": 100,"availability":"available","planId":1}]}}`, 130 }, 131 }, 132 err: nil, 133 }, 134 input: 2, 135 expectedValue: nil, 136 expectedErr: fmt.Errorf("nfs plan [id:%d] not found", 2), 137 }, 138 { 139 msg: "normal", 140 finder: &dummyNoteFinder{ 141 notes: []*iaas.Note{ 142 { 143 Name: "sys-nfs", 144 Class: "json", 145 Content: `{"plans":{"HDD":[{"size": 100,"availability":"available","planId":1}]}}`, 146 }, 147 }, 148 err: nil, 149 }, 150 input: 1, 151 expectedValue: &NFSPlanInfo{ 152 NFSPlanID: 1, 153 DiskPlanID: types.NFSPlans.HDD, 154 Size: types.NFSHDDSizes.Size100GB, 155 }, 156 expectedErr: nil, 157 }, 158 } 159 160 for _, tc := range cases { 161 actual, err := GetNFSPlanInfo(context.Background(), tc.finder, tc.input) 162 if tc.expectedErr != nil { 163 require.Equal(t, tc.expectedErr, err, tc.msg) 164 } else { 165 require.NoError(t, err, tc.msg) 166 } 167 require.Equal(t, tc.expectedValue, actual, tc.msg) 168 } 169 }