1package daemon 2 3import ( 4 "testing" 5 "time" 6 7 containertypes "github.com/docker/docker/api/types/container" 8 eventtypes "github.com/docker/docker/api/types/events" 9 "github.com/docker/docker/container" 10 "github.com/docker/docker/daemon/events" 11) 12 13func TestLogContainerEventCopyLabels(t *testing.T) { 14 e := events.New() 15 _, l, _ := e.Subscribe() 16 defer e.Evict(l) 17 18 container := &container.Container{ 19 ID: "container_id", 20 Name: "container_name", 21 Config: &containertypes.Config{ 22 Image: "image_name", 23 Labels: map[string]string{ 24 "node": "1", 25 "os": "alpine", 26 }, 27 }, 28 } 29 daemon := &Daemon{ 30 EventsService: e, 31 } 32 daemon.LogContainerEvent(container, "create") 33 34 if _, mutated := container.Config.Labels["image"]; mutated { 35 t.Fatalf("Expected to not mutate the container labels, got %q", container.Config.Labels) 36 } 37 38 validateTestAttributes(t, l, map[string]string{ 39 "node": "1", 40 "os": "alpine", 41 }) 42} 43 44func TestLogContainerEventWithAttributes(t *testing.T) { 45 e := events.New() 46 _, l, _ := e.Subscribe() 47 defer e.Evict(l) 48 49 container := &container.Container{ 50 ID: "container_id", 51 Name: "container_name", 52 Config: &containertypes.Config{ 53 Labels: map[string]string{ 54 "node": "1", 55 "os": "alpine", 56 }, 57 }, 58 } 59 daemon := &Daemon{ 60 EventsService: e, 61 } 62 attributes := map[string]string{ 63 "node": "2", 64 "foo": "bar", 65 } 66 daemon.LogContainerEventWithAttributes(container, "create", attributes) 67 68 validateTestAttributes(t, l, map[string]string{ 69 "node": "1", 70 "foo": "bar", 71 }) 72} 73 74func validateTestAttributes(t *testing.T, l chan interface{}, expectedAttributesToTest map[string]string) { 75 select { 76 case ev := <-l: 77 event, ok := ev.(eventtypes.Message) 78 if !ok { 79 t.Fatalf("Unexpected event message: %q", ev) 80 } 81 for key, expected := range expectedAttributesToTest { 82 actual, ok := event.Actor.Attributes[key] 83 if !ok || actual != expected { 84 t.Fatalf("Expected value for key %s to be %s, but was %s (event:%v)", key, expected, actual, event) 85 } 86 } 87 case <-time.After(10 * time.Second): 88 t.Fatal("LogEvent test timed out") 89 } 90} 91