blob: 16658555ffac1f0b25edee996979a15be40eae57 [file] [log] [blame]
// 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)
}