github.com/sacloud/iaas-api-go@v1.12.0/helper/query/public_archive_info_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  	"testing"
    21  
    22  	"github.com/sacloud/iaas-api-go"
    23  	"github.com/sacloud/iaas-api-go/types"
    24  	"github.com/stretchr/testify/require"
    25  )
    26  
    27  func TestCanEditDisk(t *testing.T) {
    28  	cases := []struct {
    29  		msg            string
    30  		id             types.ID
    31  		readers        *ArchiveSourceReader
    32  		expectedResult bool
    33  		expectedErr    error
    34  	}{
    35  		{
    36  			msg: "disk reader returns unexpected error",
    37  			id:  1,
    38  			readers: &ArchiveSourceReader{
    39  				ArchiveReader: &dummyArchiveReader{},
    40  				DiskReader: &dummyDiskReader{
    41  					err: errors.New("dummy"),
    42  				},
    43  			},
    44  			expectedErr: errors.New("dummy"),
    45  		},
    46  		{
    47  			msg: "from empty disk",
    48  			id:  2,
    49  			readers: &ArchiveSourceReader{
    50  				ArchiveReader: &dummyArchiveReader{},
    51  				DiskReader: &dummyDiskReader{
    52  					disks: []*iaas.Disk{
    53  						{ID: 2},
    54  					},
    55  				},
    56  			},
    57  			expectedResult: false,
    58  		},
    59  		{
    60  			msg: "disk copied from disk",
    61  			id:  2,
    62  			readers: &ArchiveSourceReader{
    63  				ArchiveReader: &dummyArchiveReader{
    64  					archives: []*iaas.Archive{
    65  						{
    66  							ID:   1,
    67  							Tags: types.Tags{"os-linux"},
    68  						},
    69  					},
    70  				},
    71  				DiskReader: &dummyDiskReader{
    72  					disks: []*iaas.Disk{
    73  						{ID: 2, SourceDiskID: 3},
    74  						{ID: 3, SourceArchiveID: 1},
    75  					},
    76  				},
    77  			},
    78  			expectedResult: true,
    79  		},
    80  		{
    81  			msg: "archive reader returns error",
    82  			id:  1,
    83  			readers: &ArchiveSourceReader{
    84  				ArchiveReader: &dummyArchiveReader{
    85  					err: errors.New("dummy"),
    86  				},
    87  				DiskReader: &dummyDiskReader{},
    88  			},
    89  			expectedErr: errors.New("dummy"),
    90  		},
    91  		{
    92  			msg: "archive with bundle info",
    93  			id:  1,
    94  			readers: &ArchiveSourceReader{
    95  				ArchiveReader: &dummyArchiveReader{
    96  					archives: []*iaas.Archive{
    97  						{
    98  							ID: 1,
    99  							BundleInfo: &iaas.BundleInfo{
   100  								HostClass: bundleInfoWindowsHostClass,
   101  							},
   102  							Tags: types.Tags{"os-linux"},
   103  						},
   104  					},
   105  				},
   106  				DiskReader: &dummyDiskReader{},
   107  			},
   108  			expectedResult: false,
   109  		},
   110  		{
   111  			msg: "sophos UTM: service class",
   112  			id:  1,
   113  			readers: &ArchiveSourceReader{
   114  				ArchiveReader: &dummyArchiveReader{
   115  					archives: []*iaas.Archive{
   116  						{
   117  							ID: 1,
   118  							BundleInfo: &iaas.BundleInfo{
   119  								ServiceClass: "hoge/dummy/sophosutm",
   120  							},
   121  							Tags: types.Tags{"os-linux"},
   122  						},
   123  					},
   124  				},
   125  				DiskReader: &dummyDiskReader{},
   126  			},
   127  			expectedResult: false,
   128  		},
   129  		{
   130  			msg: "sophos UTM: tag",
   131  			id:  1,
   132  			readers: &ArchiveSourceReader{
   133  				ArchiveReader: &dummyArchiveReader{
   134  					archives: []*iaas.Archive{
   135  						{
   136  							ID:   1,
   137  							Tags: types.Tags{"pkg-sophosutm"},
   138  						},
   139  					},
   140  				},
   141  				DiskReader: &dummyDiskReader{},
   142  			},
   143  			expectedResult: false,
   144  		},
   145  		{
   146  			msg: "OPNsense",
   147  			id:  1,
   148  			readers: &ArchiveSourceReader{
   149  				ArchiveReader: &dummyArchiveReader{
   150  					archives: []*iaas.Archive{
   151  						{
   152  							ID:   1,
   153  							Tags: types.Tags{"distro-opnsense"},
   154  						},
   155  					},
   156  				},
   157  				DiskReader: &dummyDiskReader{},
   158  			},
   159  			expectedResult: false,
   160  		},
   161  		{
   162  			msg: "Netwiser VE",
   163  			id:  1,
   164  			readers: &ArchiveSourceReader{
   165  				ArchiveReader: &dummyArchiveReader{
   166  					archives: []*iaas.Archive{
   167  						{
   168  							ID:   1,
   169  							Tags: types.Tags{"distro-netwiserve"},
   170  						},
   171  					},
   172  				},
   173  				DiskReader: &dummyDiskReader{},
   174  			},
   175  			expectedResult: false,
   176  		},
   177  		{
   178  			msg: "Nested",
   179  			id:  4,
   180  			readers: &ArchiveSourceReader{
   181  				ArchiveReader: &dummyArchiveReader{
   182  					archives: []*iaas.Archive{
   183  						{
   184  							ID:   1,
   185  							Tags: types.Tags{"os-unix"},
   186  						},
   187  						{ID: 2, SourceDiskID: 5},
   188  						{ID: 3, SourceArchiveID: 1},
   189  					},
   190  				},
   191  				DiskReader: &dummyDiskReader{
   192  					disks: []*iaas.Disk{
   193  						{ID: 4, SourceArchiveID: 2},
   194  						{ID: 5, SourceDiskID: 6},
   195  						{ID: 6, SourceArchiveID: 3},
   196  					},
   197  				},
   198  			},
   199  			expectedResult: true,
   200  		},
   201  	}
   202  
   203  	for _, tc := range cases {
   204  		res, err := CanEditDisk(context.Background(), "tk1v", tc.readers, tc.id)
   205  		if tc.expectedErr != nil {
   206  			require.Equal(t, tc.expectedErr, err, tc.msg)
   207  		} else {
   208  			require.NoError(t, err, tc.msg)
   209  		}
   210  		require.Equal(t, tc.expectedResult, res, tc.msg)
   211  	}
   212  }