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 }