1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2 3package utils 4 5import ( 6 "testing" 7 8 "github.com/spdx/tools-golang/spdx/common" 9 "github.com/spdx/tools-golang/spdx/v2_1" 10 "github.com/spdx/tools-golang/spdx/v2_2" 11 "github.com/spdx/tools-golang/spdx/v2_3" 12) 13 14// ===== 2.1 Verification code functionality tests ===== 15 16func TestPackage2_1CanGetVerificationCode(t *testing.T) { 17 files := []*v2_1.File{ 18 { 19 FileName: "file2.txt", 20 FileSPDXIdentifier: "File0", 21 Checksums: []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 22 }, 23 { 24 FileName: "file1.txt", 25 FileSPDXIdentifier: "File1", 26 Checksums: []common.Checksum{{Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 27 }, 28 { 29 FileName: "file3.txt", 30 FileSPDXIdentifier: "File2", 31 Checksums: []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 32 }, 33 { 34 FileName: "file5.txt", 35 FileSPDXIdentifier: "File3", 36 Checksums: []common.Checksum{{Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 37 }, 38 { 39 FileName: "file4.txt", 40 FileSPDXIdentifier: "File4", 41 Checksums: []common.Checksum{{Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", Algorithm: common.SHA1}}, 42 }, 43 } 44 45 wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"} 46 47 gotCode, err := GetVerificationCode2_1(files, "") 48 if err != nil { 49 t.Fatalf("expected nil error, got %v", err) 50 } 51 if wantCode.Value != gotCode.Value { 52 t.Errorf("expected %v, got %v", wantCode, gotCode) 53 } 54 55} 56 57func TestPackage2_1CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) { 58 files := []*v2_1.File{ 59 { 60 FileName: "file1.txt", 61 FileSPDXIdentifier: "File0", 62 Checksums: []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 63 }, 64 { 65 FileName: "file2.txt", 66 FileSPDXIdentifier: "File1", 67 Checksums: []common.Checksum{{Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 68 }, 69 { 70 FileName: "thisfile.spdx", 71 FileSPDXIdentifier: "File2", 72 Checksums: []common.Checksum{{Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", Algorithm: common.SHA1}}, 73 }, 74 { 75 FileName: "file3.txt", 76 FileSPDXIdentifier: "File3", 77 Checksums: []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 78 }, 79 { 80 FileName: "file4.txt", 81 FileSPDXIdentifier: "File4", 82 Checksums: []common.Checksum{{Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 83 }, 84 } 85 86 wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"} 87 88 gotCode, err := GetVerificationCode2_1(files, "thisfile.spdx") 89 if err != nil { 90 t.Fatalf("expected nil error, got %v", err) 91 } 92 if wantCode.Value != gotCode.Value { 93 t.Errorf("expected %v, got %v", wantCode, gotCode) 94 } 95} 96 97func TestPackage2_1GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) { 98 files := []*v2_1.File{ 99 { 100 FileName: "file2.txt", 101 FileSPDXIdentifier: "File0", 102 Checksums: []common.Checksum{{Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 103 }, 104 nil, 105 { 106 FileName: "file3.txt", 107 FileSPDXIdentifier: "File2", 108 Checksums: []common.Checksum{{Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", Algorithm: common.SHA1}}, 109 }, 110 } 111 112 _, err := GetVerificationCode2_1(files, "") 113 if err == nil { 114 t.Fatalf("expected non-nil error, got nil") 115 } 116} 117 118// ===== 2.2 Verification code functionality tests ===== 119 120func TestPackage2_2CanGetVerificationCode(t *testing.T) { 121 files := []*v2_2.File{ 122 { 123 FileName: "file2.txt", 124 FileSPDXIdentifier: "File0", 125 Checksums: []common.Checksum{ 126 { 127 Algorithm: common.SHA1, 128 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 129 }, 130 }, 131 }, 132 { 133 FileName: "file1.txt", 134 FileSPDXIdentifier: "File1", 135 Checksums: []common.Checksum{ 136 { 137 Algorithm: common.SHA1, 138 Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", 139 }, 140 }, 141 }, 142 { 143 FileName: "file3.txt", 144 FileSPDXIdentifier: "File2", 145 Checksums: []common.Checksum{ 146 { 147 Algorithm: common.SHA1, 148 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 149 }, 150 }, 151 }, 152 { 153 FileName: "file5.txt", 154 FileSPDXIdentifier: "File3", 155 Checksums: []common.Checksum{ 156 { 157 Algorithm: common.SHA1, 158 Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", 159 }, 160 }, 161 }, 162 { 163 FileName: "file4.txt", 164 FileSPDXIdentifier: "File4", 165 Checksums: []common.Checksum{ 166 { 167 Algorithm: common.SHA1, 168 Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", 169 }, 170 }, 171 }, 172 } 173 174 wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"} 175 176 gotCode, err := GetVerificationCode2_2(files, "") 177 if err != nil { 178 t.Fatalf("expected nil error, got %v", err) 179 } 180 if wantCode.Value != gotCode.Value { 181 t.Errorf("expected %v, got %v", wantCode, gotCode) 182 } 183 184} 185 186func TestPackage2_2CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) { 187 files := []*v2_2.File{ 188 { 189 FileName: "file1.txt", 190 FileSPDXIdentifier: "File0", 191 Checksums: []common.Checksum{ 192 { 193 Algorithm: common.SHA1, 194 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 195 }, 196 }, 197 }, 198 { 199 FileName: "file2.txt", 200 FileSPDXIdentifier: "File1", 201 Checksums: []common.Checksum{ 202 { 203 Algorithm: common.SHA1, 204 Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", 205 }, 206 }, 207 }, 208 { 209 FileName: "thisfile.spdx", 210 FileSPDXIdentifier: "File2", 211 Checksums: []common.Checksum{ 212 { 213 Algorithm: common.SHA1, 214 Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", 215 }, 216 }, 217 }, 218 { 219 FileName: "file3.txt", 220 FileSPDXIdentifier: "File3", 221 Checksums: []common.Checksum{ 222 { 223 Algorithm: common.SHA1, 224 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 225 }, 226 }, 227 }, 228 { 229 FileName: "file4.txt", 230 FileSPDXIdentifier: "File4", 231 Checksums: []common.Checksum{ 232 { 233 Algorithm: common.SHA1, 234 Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", 235 }, 236 }, 237 }, 238 } 239 240 wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"} 241 242 gotCode, err := GetVerificationCode2_2(files, "thisfile.spdx") 243 if err != nil { 244 t.Fatalf("expected nil error, got %v", err) 245 } 246 if wantCode.Value != gotCode.Value { 247 t.Errorf("expected %v, got %v", wantCode, gotCode) 248 } 249} 250 251func TestPackage2_2GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) { 252 files := []*v2_2.File{ 253 { 254 FileName: "file2.txt", 255 FileSPDXIdentifier: "File0", 256 Checksums: []common.Checksum{ 257 { 258 Algorithm: common.SHA1, 259 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 260 }, 261 }, 262 }, 263 nil, 264 { 265 FileName: "file3.txt", 266 FileSPDXIdentifier: "File2", 267 Checksums: []common.Checksum{ 268 { 269 Algorithm: common.SHA1, 270 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 271 }, 272 }, 273 }, 274 } 275 276 _, err := GetVerificationCode2_2(files, "") 277 if err == nil { 278 t.Fatalf("expected non-nil error, got nil") 279 } 280} 281 282// ===== 2.3 Verification code functionality tests ===== 283 284func TestPackage2_3CanGetVerificationCode(t *testing.T) { 285 files := []*v2_3.File{ 286 { 287 FileName: "file2.txt", 288 FileSPDXIdentifier: "File0", 289 Checksums: []common.Checksum{ 290 { 291 Algorithm: common.SHA1, 292 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 293 }, 294 }, 295 }, 296 { 297 FileName: "file1.txt", 298 FileSPDXIdentifier: "File1", 299 Checksums: []common.Checksum{ 300 { 301 Algorithm: common.SHA1, 302 Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", 303 }, 304 }, 305 }, 306 { 307 FileName: "file3.txt", 308 FileSPDXIdentifier: "File2", 309 Checksums: []common.Checksum{ 310 { 311 Algorithm: common.SHA1, 312 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 313 }, 314 }, 315 }, 316 { 317 FileName: "file5.txt", 318 FileSPDXIdentifier: "File3", 319 Checksums: []common.Checksum{ 320 { 321 Algorithm: common.SHA1, 322 Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", 323 }, 324 }, 325 }, 326 { 327 FileName: "file4.txt", 328 FileSPDXIdentifier: "File4", 329 Checksums: []common.Checksum{ 330 { 331 Algorithm: common.SHA1, 332 Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", 333 }, 334 }, 335 }, 336 } 337 338 wantCode := common.PackageVerificationCode{Value: "ac924b375119c81c1f08c3e2722044bfbbdcd3dc"} 339 340 gotCode, err := GetVerificationCode2_3(files, "") 341 if err != nil { 342 t.Fatalf("expected nil error, got %v", err) 343 } 344 if wantCode.Value != gotCode.Value { 345 t.Errorf("expected %v, got %v", wantCode, gotCode) 346 } 347 348} 349 350func TestPackage2_3CanGetVerificationCodeIgnoringExcludesFile(t *testing.T) { 351 files := []*v2_3.File{ 352 { 353 FileName: "file1.txt", 354 FileSPDXIdentifier: "File0", 355 Checksums: []common.Checksum{ 356 { 357 Algorithm: common.SHA1, 358 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 359 }, 360 }, 361 }, 362 { 363 FileName: "file2.txt", 364 FileSPDXIdentifier: "File1", 365 Checksums: []common.Checksum{ 366 { 367 Algorithm: common.SHA1, 368 Value: "3333333333bbbbbbbbbbccccccccccdddddddddd", 369 }, 370 }, 371 }, 372 { 373 FileName: "thisfile.spdx", 374 FileSPDXIdentifier: "File2", 375 Checksums: []common.Checksum{ 376 { 377 Algorithm: common.SHA1, 378 Value: "bbbbbbbbbbccccccccccddddddddddaaaaaaaaaa", 379 }, 380 }, 381 }, 382 { 383 FileName: "file3.txt", 384 FileSPDXIdentifier: "File3", 385 Checksums: []common.Checksum{ 386 { 387 Algorithm: common.SHA1, 388 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 389 }, 390 }, 391 }, 392 { 393 FileName: "file4.txt", 394 FileSPDXIdentifier: "File4", 395 Checksums: []common.Checksum{ 396 { 397 Algorithm: common.SHA1, 398 Value: "2222222222bbbbbbbbbbccccccccccdddddddddd", 399 }, 400 }, 401 }, 402 } 403 404 wantCode := common.PackageVerificationCode{Value: "17fab1bd18fe5c13b5d3983f1c17e5f88b8ff266"} 405 406 gotCode, err := GetVerificationCode2_3(files, "thisfile.spdx") 407 if err != nil { 408 t.Fatalf("expected nil error, got %v", err) 409 } 410 if wantCode.Value != gotCode.Value { 411 t.Errorf("expected %v, got %v", wantCode, gotCode) 412 } 413} 414 415func TestPackage2_3GetVerificationCodeFailsIfNilFileInSlice(t *testing.T) { 416 files := []*v2_3.File{ 417 { 418 FileName: "file2.txt", 419 FileSPDXIdentifier: "File0", 420 Checksums: []common.Checksum{ 421 { 422 Algorithm: common.SHA1, 423 Value: "aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd", 424 }, 425 }, 426 }, 427 nil, 428 { 429 FileName: "file3.txt", 430 FileSPDXIdentifier: "File2", 431 Checksums: []common.Checksum{ 432 { 433 Algorithm: common.SHA1, 434 Value: "8888888888bbbbbbbbbbccccccccccdddddddddd", 435 }, 436 }, 437 }, 438 } 439 440 _, err := GetVerificationCode2_3(files, "") 441 if err == nil { 442 t.Fatalf("expected non-nil error, got nil") 443 } 444} 445