2017-05-17 16:19:34 +00:00
|
|
|
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"
|
2017-07-26 23:22:29 +00:00
|
|
|
|
2017-05-17 16:19:34 +00:00
|
|
|
_ "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 {
|
2017-07-26 23:22:29 +00:00
|
|
|
nslist, err := featurens.Detect(td.Files, featurens.ListDetectors())
|
2017-05-17 16:19:34 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
assertnsNameEqual(t, td.ExpectedNamespaces, nslist)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMultipleNamespaceDetector(t *testing.T) {
|
|
|
|
testData := []MultipleNamespaceTestData{
|
|
|
|
{
|
|
|
|
ExpectedNamespaces: []database.Namespace{
|
2018-09-05 22:31:36 +00:00
|
|
|
{Name: "debian:8", VersionFormat: "dpkg"},
|
|
|
|
{Name: "alpine:v3.3", VersionFormat: "dpkg"},
|
2017-05-17 16:19:34 +00:00
|
|
|
},
|
|
|
|
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)
|
|
|
|
}
|