From 75d5d40d796f4233a58c16443614933c8b326d49 Mon Sep 17 00:00:00 2001 From: Sida Chen Date: Wed, 17 May 2017 12:19:34 -0400 Subject: [PATCH] featurens: added multiple namespace testing for namespace detector --- database/pgsql/testdata/data.sql | 10 ++--- ext/featurens/driver_test.go | 66 ++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 ext/featurens/driver_test.go diff --git a/database/pgsql/testdata/data.sql b/database/pgsql/testdata/data.sql index fffe346c13..b01e170e0b 100644 --- a/database/pgsql/testdata/data.sql +++ b/database/pgsql/testdata/data.sql @@ -36,11 +36,11 @@ INSERT INTO layer (id, name, engineversion, parent_id) VALUES (5, 'layer-3b', 1, 3); INSERT INTO layer_namespace (id, layer_id, namespace_id) VALUES -(1, 2, 1), -(2, 3, 1), -(3, 4, 1), -(4, 5, 2), -(5, 5, 1); + (1, 2, 1), + (2, 3, 1), + (3, 4, 1), + (4, 5, 2), + (5, 5, 1); INSERT INTO layer_diff_featureversion (id, layer_id, featureversion_id, modification) VALUES (1, 2, 1, 'add'), diff --git a/ext/featurens/driver_test.go b/ext/featurens/driver_test.go new file mode 100644 index 0000000000..e1a47ef684 --- /dev/null +++ b/ext/featurens/driver_test.go @@ -0,0 +1,66 @@ +package featurens_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/coreos/clair/database" + "github.com/coreos/clair/ext/featurens" + "github.com/coreos/clair/pkg/tarutil" + + _ "github.com/coreos/clair/ext/featurens/alpinerelease" + _ "github.com/coreos/clair/ext/featurens/aptsources" + _ "github.com/coreos/clair/ext/featurens/lsbrelease" + _ "github.com/coreos/clair/ext/featurens/osrelease" + _ "github.com/coreos/clair/ext/featurens/redhatrelease" +) + +type MultipleNamespaceTestData struct { + Files tarutil.FilesMap + ExpectedNamespaces []database.Namespace +} + +func assertnsNameEqual(t *testing.T, nslist_expected, nslist []database.Namespace) { + assert.Equal(t, len(nslist_expected), len(nslist)) + expected := map[string]struct{}{} + input := map[string]struct{}{} + // compare the two sets + for i := range nslist_expected { + expected[nslist_expected[i].Name] = struct{}{} + input[nslist[i].Name] = struct{}{} + } + assert.Equal(t, expected, input) +} + +func testMultipleNamespace(t *testing.T, testData []MultipleNamespaceTestData) { + for _, td := range testData { + nslist, err := featurens.Detect(td.Files) + assert.Nil(t, err) + assertnsNameEqual(t, td.ExpectedNamespaces, nslist) + } +} + +func TestMultipleNamespaceDetector(t *testing.T) { + testData := []MultipleNamespaceTestData{ + { + ExpectedNamespaces: []database.Namespace{ + database.Namespace{Name: "debian:8", VersionFormat: "dpkg"}, + database.Namespace{Name: "alpine:v3.3", VersionFormat: "dpkg"}, + }, + Files: tarutil.FilesMap{ + "etc/os-release": []byte(` +PRETTY_NAME="Debian GNU/Linux 8 (jessie)" +NAME="Debian GNU/Linux" +VERSION_ID="8" +VERSION="8 (jessie)" +ID=debian +HOME_URL="http://www.debian.org/" +SUPPORT_URL="http://www.debian.org/support/" +BUG_REPORT_URL="https://bugs.debian.org/"`), + "etc/alpine-release": []byte(`3.3.4`), + }, + }, + } + testMultipleNamespace(t, testData) +}