quorate/services/mirrored-image/controller/inventory_test.go

55 lines
3.1 KiB
Go
Raw Normal View History

package main
import "testing"
func inventoryFixture() *securityData {
return &securityData{
Layer: &securityLayer{Name: testDigest, Features: &[]securityFeature{{Name: "busybox", Version: "1.37.0-r30", AddedBy: testDigest}}},
Inventory: &scanInventory{Hash: testDigest,
Packages: map[string]*scanPackage{"p": {ID: "p", Name: "busybox", Version: "1.37.0-r30", Kind: "binary", Source: &scanPackage{Name: "busybox", Kind: "source"}}},
Distributions: map[string]*scanDistribution{"d": {ID: "d", DID: "alpine", Version: "3.23", Name: "Alpine Linux", PrettyName: "Alpine Linux v3.23"}},
Environments: map[string][]*scanEnvironment{"p": {{PackageDB: "lib/apk/db/installed", IntroducedIn: testDigest, DistributionID: "d"}}},
},
}
}
func TestInventory(t *testing.T) {
for _, test := range []struct {
name string
mutate func(*securityData)
}{
{"qualified", func(*securityData) {}},
{"missing", func(d *securityData) { d.Inventory = nil }},
{"identity", func(d *securityData) { d.Inventory.Hash = childDigest }},
{"layer identity", func(d *securityData) { d.Layer.Name = childDigest }},
{"empty", func(d *securityData) { d.Inventory.Packages = nil }},
{"no distribution", func(d *securityData) { d.Inventory.Distributions = nil }},
{"Amazon Linux", func(d *securityData) { d.Inventory.Distributions["d"].DID = "amzn" }},
{"RHEL", func(d *securityData) { d.Inventory.Distributions["d"].DID = "rhel" }},
{"unknown", func(d *securityData) { d.Inventory.Distributions["d"].DID = "unknown" }},
{"unqualified release", func(d *securityData) { d.Inventory.Distributions["d"].Version = "3.2" }},
{"missing package", func(d *securityData) { d.Inventory.Packages["p"] = nil }},
{"invalid version", func(d *securityData) { d.Inventory.Packages["p"].Version = "invalid" }},
{"missing source", func(d *securityData) { d.Inventory.Packages["p"].Source = nil }},
{"empty source", func(d *securityData) { d.Inventory.Packages["p"].Source.Name = "" }},
{"foreign package", func(d *securityData) { d.Inventory.Packages["p"].Kind = "python" }},
{"missing environment", func(d *securityData) { d.Inventory.Environments["p"] = nil }},
{"foreign layer", func(d *securityData) { d.Inventory.Environments["p"][0].IntroducedIn = childDigest }},
{"foreign database", func(d *securityData) { d.Inventory.Environments["p"][0].PackageDB = "var/lib/rpm" }},
{"second environment", func(d *securityData) {
d.Inventory.Environments["p"] = append(d.Inventory.Environments["p"], &scanEnvironment{PackageDB: "var/lib/rpm"})
}},
{"missing features", func(d *securityData) { *d.Layer.Features = nil }},
{"wrong feature", func(d *securityData) { (*d.Layer.Features)[0].Version = "1-r1" }},
{"duplicate feature", func(d *securityData) { *d.Layer.Features = append(*d.Layer.Features, (*d.Layer.Features)[0]) }},
} {
t.Run(test.name, func(t *testing.T) {
data := inventoryFixture()
test.mutate(data)
err := checkInventory(data, testDigest, map[string]bool{testDigest: true})
if (err == nil) != (test.name == "qualified") {
t.Fatalf("unexpected inventory verdict: %v", err)
}
})
}
}