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, featurens.ListDetectors()) 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) }