Files
weave-scope/probe/docker/reporter_test.go
Peter Bourgon 3dd59c8b9b Fixes to NodeMetadata
NewNodeMetadata -> MakeNodeMetadata. It doesn't return a pointer, so
Make is more idiomatic.

Invoke MakeNodeMetadata when necessary. The zero value for a
NodeMetadata is no longer valid.

Split MakeNodeMetadata to two constructors. MakeNodeMetadata when you
don't have anything to prepopulate; MakeNodeMetadataWith when you do.

Also, a fix to the tests in app. We unmarshal a RenderableNode struct,
which has a JSON-ignored NodeMetadata field. The zero value is invalid,
so we need to fix that before performing comparisons.
2015-07-30 17:20:44 +02:00

80 lines
1.8 KiB
Go

package docker_test
import (
"reflect"
"testing"
client "github.com/fsouza/go-dockerclient"
"github.com/weaveworks/scope/probe/docker"
"github.com/weaveworks/scope/report"
"github.com/weaveworks/scope/test"
)
type mockRegistry struct {
containersByPID map[int]docker.Container
images map[string]*client.APIImages
}
func (r *mockRegistry) Stop() {}
func (r *mockRegistry) LockedPIDLookup(f func(func(int) docker.Container)) {
f(func(pid int) docker.Container {
return r.containersByPID[pid]
})
}
func (r *mockRegistry) WalkContainers(f func(docker.Container)) {
for _, c := range r.containersByPID {
f(c)
}
}
func (r *mockRegistry) WalkImages(f func(*client.APIImages)) {
for _, i := range r.images {
f(i)
}
}
var (
mockRegistryInstance = &mockRegistry{
containersByPID: map[int]docker.Container{
1: &mockContainer{container1},
},
images: map[string]*client.APIImages{
"baz": &apiImage1,
},
}
)
func TestReporter(t *testing.T) {
want := report.MakeReport()
want.Container = report.Topology{
Adjacency: report.Adjacency{},
EdgeMetadatas: report.EdgeMetadatas{},
NodeMetadatas: report.NodeMetadatas{
report.MakeContainerNodeID("", "ping"): report.MakeNodeMetadataWith(map[string]string{
docker.ContainerID: "ping",
docker.ContainerName: "pong",
docker.ImageID: "baz",
}),
},
}
want.ContainerImage = report.Topology{
Adjacency: report.Adjacency{},
EdgeMetadatas: report.EdgeMetadatas{},
NodeMetadatas: report.NodeMetadatas{
report.MakeContainerNodeID("", "baz"): report.MakeNodeMetadataWith(map[string]string{
docker.ImageID: "baz",
docker.ImageName: "bang",
}),
},
}
reporter := docker.NewReporter(mockRegistryInstance, "")
have, _ := reporter.Report()
if !reflect.DeepEqual(want, have) {
t.Errorf("%s", test.Diff(want, have))
}
}