mirror of
https://github.com/anchore/grype
synced 2024-11-14 00:07:08 +00:00
e2fff6c22f
Co-authored-by: Alex Goodman <alex.goodman@anchore.com> Co-authored-by: Weston Steimel <weston.steimel@anchore.com> Co-authored-by: Christopher Angelo Phillips <32073428+spiffcs@users.noreply.github.com>
62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package integration
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"net/url"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/sergi/go-diff/diffmatchpatch"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/anchore/go-testutils"
|
|
"github.com/anchore/grype/grype/db"
|
|
"github.com/anchore/grype/grype/differ"
|
|
)
|
|
|
|
var update = flag.Bool("update", false, "update the *.golden files for diff presenter")
|
|
|
|
const (
|
|
baseURL = "https://toolbox-data.anchore.io/grype/databases/vulnerability-db_v4_2022-07-05T08:18:22Z_39868af44fc51829a7c9.tar.gz"
|
|
targetURL = "https://toolbox-data.anchore.io/grype/databases/vulnerability-db_v4_2022-07-06T08:16:42Z_c840f17244dea46d0c07.tar.gz"
|
|
)
|
|
|
|
func TestDatabaseDiff(t *testing.T) {
|
|
//GIVEN
|
|
differ, err := differ.NewDiffer(db.Config{
|
|
DBRootDir: "test-fixtures/grype-db",
|
|
ListingURL: getListingURL(),
|
|
ValidateByHashOnGet: false,
|
|
})
|
|
var buffer bytes.Buffer
|
|
base, err := url.Parse(baseURL)
|
|
require.NoError(t, err)
|
|
target, err := url.Parse(targetURL)
|
|
require.NoError(t, err)
|
|
|
|
//WHEN
|
|
require.NoError(t, differ.DownloadDatabases(base, target))
|
|
diffs, err := differ.DiffDatabases()
|
|
require.NoError(t, err)
|
|
for i := range *diffs {
|
|
sort.Strings((*diffs)[i].Packages)
|
|
}
|
|
sort.SliceStable(*diffs, func(i, j int) bool {
|
|
d1, d2 := (*diffs)[i], (*diffs)[j]
|
|
return (d1.ID + d1.Namespace) < (d2.ID + d2.Namespace)
|
|
})
|
|
require.NoError(t, differ.Present("json", diffs, &buffer))
|
|
|
|
//THEN
|
|
actual := buffer.Bytes()
|
|
if *update {
|
|
testutils.UpdateGoldenFileContents(t, actual)
|
|
}
|
|
var expected = testutils.GetGoldenFileContents(t)
|
|
if !bytes.Equal(expected, actual) {
|
|
dmp := diffmatchpatch.New()
|
|
diffs := dmp.DiffMain(string(expected), string(actual), true)
|
|
t.Errorf("mismatched output:\n%s", dmp.DiffPrettyText(diffs))
|
|
}
|
|
}
|