| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "context" |
| "fmt" |
| "strings" |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| "golang.org/x/vulndb/cmd/vulnreport/log" |
| ) |
| |
| func TestAliasesBFS(t *testing.T) { |
| log.Discard() |
| tests := []struct { |
| knownAliases []string |
| aliasesFor func(ctx context.Context, alias string) ([]string, error) |
| want []string |
| }{ |
| { |
| knownAliases: []string{"CVE-2023-0001"}, |
| aliasesFor: func(ctx context.Context, alias string) ([]string, error) { |
| switch alias { |
| case "CVE-2023-0001": |
| return []string{"GHSA-xxxx-yyyy-zzzz"}, nil |
| default: |
| return nil, errBadAlias(t, alias) |
| } |
| }, |
| want: []string{"CVE-2023-0001", "GHSA-xxxx-yyyy-zzzz"}, |
| }, |
| { |
| knownAliases: []string{"CVE-2023-0001", "GHSA-xxxx-yyyy-zzzz"}, |
| aliasesFor: func(ctx context.Context, alias string) ([]string, error) { |
| switch alias { |
| case "CVE-2023-0001": |
| return []string{"GHSA-xxxx-yyyy-zzzz"}, nil |
| case "GHSA-xxxx-yyyy-zzzz": |
| return []string{"CVE-2023-0001"}, nil |
| default: |
| return nil, errBadAlias(t, alias) |
| } |
| }, |
| want: []string{"CVE-2023-0001", "GHSA-xxxx-yyyy-zzzz"}, |
| }, |
| { |
| knownAliases: []string{"CVE-2023-0001", "GHSA-xxxx-yyyy-zzzz"}, |
| aliasesFor: func(ctx context.Context, alias string) ([]string, error) { |
| switch alias { |
| case "CVE-2023-0001": |
| return []string{"GHSA-xxxx-yyyy-zzzz", "CVE-2023-0002"}, nil |
| case "GHSA-xxxx-yyyy-zzzz": |
| return []string{"CVE-2023-0001", "CVE-2023-0002"}, nil |
| case "CVE-2023-0002": |
| return []string{"CVE-2023-0001", "GHSA-xxxx-yyyy-zzzz"}, nil |
| default: |
| return nil, errBadAlias(t, alias) |
| } |
| }, |
| want: []string{"CVE-2023-0001", "CVE-2023-0002", "GHSA-xxxx-yyyy-zzzz"}, |
| }, |
| { |
| knownAliases: []string{"CVE-2023-0001"}, |
| aliasesFor: func(ctx context.Context, alias string) ([]string, error) { |
| switch alias { |
| case "CVE-2023-0001": |
| return []string{"GHSA-xxxx-yyyy-zzzz"}, nil |
| case "GHSA-xxxx-yyyy-zzzz": |
| return []string{"CVE-2023-0002"}, nil |
| case "CVE-2023-0002": |
| return []string{"GHSA-xxxx-yyyy-zzzz"}, nil |
| default: |
| return nil, errBadAlias(t, alias) |
| } |
| }, |
| want: []string{"CVE-2023-0001", "CVE-2023-0002", "GHSA-xxxx-yyyy-zzzz"}, |
| }, |
| { |
| knownAliases: []string{}, |
| aliasesFor: func(ctx context.Context, alias string) ([]string, error) { |
| return nil, fmt.Errorf("unsupported alias %s", alias) |
| }, |
| want: nil, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(strings.Join(test.knownAliases, ","), func(t *testing.T) { |
| got := aliasesBFS(context.Background(), test.knownAliases, test.aliasesFor) |
| if diff := cmp.Diff(test.want, got); diff != "" { |
| t.Errorf("aliasesBFS(%v) = %v, want %v", test.knownAliases, got, test.want) |
| } |
| }) |
| } |
| } |
| |
| func errBadAlias(t *testing.T, alias string) error { |
| t.Helper() |
| t.Logf("alias %s not found", alias) |
| return fmt.Errorf("bad alias %s", alias) |
| } |