@@ -330,87 +330,68 @@ func TestEventsFilterImageName(t *testing.T) {
330330 logDone ("events - filters using image" )
331331}
332332
333- func TestEventsFilterContainerID (t * testing.T ) {
334- since := daemonTime (t ).Unix ()
333+ func TestEventsFilterContainer (t * testing.T ) {
335334 defer deleteAllContainers ()
335+ since := fmt .Sprintf ("%d" , daemonTime (t ).Unix ())
336+ nameID := make (map [string ]string )
336337
337- out , _ , err := runCommandWithOutput (exec .Command (dockerBinary , "run" , "-d" , "busybox" , "true" ))
338- if err != nil {
339- t .Fatal (out , err )
340- }
341- container1 := strings .TrimSpace (out )
342-
343- out , _ , err = runCommandWithOutput (exec .Command (dockerBinary , "run" , "-d" , "busybox" , "true" ))
344- if err != nil {
345- t .Fatal (out , err )
346- }
347- container2 := strings .TrimSpace (out )
348-
349- for _ , s := range []string {container1 , container2 , container1 [:12 ], container2 [:12 ]} {
350- if err := waitInspect (s , "{{.State.Running}}" , "false" , 5 ); err != nil {
351- t .Fatalf ("Failed to get container %s state, error: %s" , s , err )
352- }
353-
354- eventsCmd := exec .Command (dockerBinary , "events" , fmt .Sprintf ("--since=%d" , since ), fmt .Sprintf ("--until=%d" , daemonTime (t ).Unix ()), "--filter" , fmt .Sprintf ("container=%s" , s ))
355- out , _ , err := runCommandWithOutput (eventsCmd )
338+ for _ , name := range []string {"container_1" , "container_2" } {
339+ out , _ , err := runCommandWithOutput (exec .Command (dockerBinary , "run" , "-d" , "--name" , name , "busybox" , "true" ))
356340 if err != nil {
357- t .Fatalf ( "Failed to get events, error: %s(%s)" , err , out )
341+ t .Fatal ( err )
358342 }
359- events : = strings .Split (out , " \n " )
360- checkEvents ( t , events [: len ( events ) - 1 ] )
343+ nameID [ name ] = strings .TrimSpace (out )
344+ waitInspect ( name , "{{.State.Runing }}" , "false" , 5 )
361345 }
362346
363- logDone ("events - filters using container id" )
364- }
347+ until := fmt .Sprintf ("%d" , daemonTime (t ).Unix ())
365348
366- func TestEventsFilterContainerName (t * testing.T ) {
367- since := daemonTime (t ).Unix ()
368- defer deleteAllContainers ()
349+ checkEvents := func (id string , events []string ) error {
350+ if len (events ) != 3 { // create, start, die
351+ return fmt .Errorf ("expected 3 events, got %v" , events )
352+ }
353+ for _ , event := range events {
354+ e := strings .Fields (event )
355+ if len (e ) < 3 {
356+ return fmt .Errorf ("got malformed event: %s" , event )
357+ }
369358
370- _ , _ , err := runCommandWithOutput (exec .Command (dockerBinary , "run" , "--name" , "container_1" , "busybox" , "true" ))
371- if err != nil {
372- t .Fatal (err )
359+ // Check the id
360+ parsedID := strings .TrimSuffix (e [1 ], ":" )
361+ if parsedID != id {
362+ return fmt .Errorf ("expected event for container id %s: %s - parsed container id: %s" , id , event , parsedID )
363+ }
364+ }
365+ return nil
373366 }
374367
375- _ , _ , err = runCommandWithOutput (exec .Command (dockerBinary , "run" , "--name" , "container_2" , "busybox" , "true" ))
376- if err != nil {
377- t .Fatal (err )
378- }
368+ for name , ID := range nameID {
369+ // filter by names
370+ eventsCmd := exec .Command (dockerBinary , "events" , "--since" , since , "--until" , until , "--filter" , "container=" + name )
371+ out , _ , err := runCommandWithOutput (eventsCmd )
372+ if err != nil {
373+ t .Fatal (err )
374+ }
379375
380- for _ , s := range [] string { "container_1" , "container_2" } {
381- if err := waitInspect ( s , "{{.State.Running}}" , "false" , 5 ); err != nil {
382- t .Fatalf ( "Failed to get container %s state, error: %s" , s , err )
376+ events := strings . Split ( strings . TrimSuffix ( out , " \n " ) , "\n " )
377+ if err := checkEvents ( ID , events ); err != nil {
378+ t .Fatal ( err )
383379 }
384380
385- eventsCmd := exec .Command (dockerBinary , "events" , fmt .Sprintf ("--since=%d" , since ), fmt .Sprintf ("--until=%d" , daemonTime (t ).Unix ()), "--filter" , fmt .Sprintf ("container=%s" , s ))
386- out , _ , err := runCommandWithOutput (eventsCmd )
381+ // filter by ID's
382+ eventsCmd = exec .Command (dockerBinary , "events" , "--since" , since , "--until" , until , "--filter" , "container=" + ID )
383+ out , _ , err = runCommandWithOutput (eventsCmd )
387384 if err != nil {
388- t .Fatalf ( "Failed to get events, error : %s(%s)" , err , out )
385+ t .Fatal ( err )
389386 }
390- events := strings .Split (out , "\n " )
391- checkEvents (t , events [:len (events )- 1 ])
392- }
393387
394- logDone ("events - filters using container name" )
395- }
396-
397- func checkEvents (t * testing.T , events []string ) {
398- if len (events ) != 3 {
399- t .Fatalf ("Expected 3 events, got %d: %v" , len (events ), events )
400- }
401- createEvent := strings .Fields (events [0 ])
402- if createEvent [len (createEvent )- 1 ] != "create" {
403- t .Fatalf ("first event should be create, not %#v" , createEvent )
404- }
405- startEvent := strings .Fields (events [1 ])
406- if startEvent [len (startEvent )- 1 ] != "start" {
407- t .Fatalf ("second event should be start, not %#v" , startEvent )
408- }
409- dieEvent := strings .Fields (events [len (events )- 1 ])
410- if dieEvent [len (dieEvent )- 1 ] != "die" {
411- t .Fatalf ("event should be die, not %#v" , dieEvent )
388+ events = strings .Split (strings .TrimSuffix (out , "\n " ), "\n " )
389+ if err := checkEvents (ID , events ); err != nil {
390+ t .Fatal (err )
391+ }
412392 }
413393
394+ logDone ("events - filters using container name" )
414395}
415396
416397func TestEventsStreaming (t * testing.T ) {
0 commit comments