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  }