@@ -19,8 +19,10 @@ package container
1919import (
2020 "errors"
2121 "fmt"
22+ "io"
2223 "os/exec"
2324 "runtime"
25+ "strconv"
2426 "strings"
2527 "testing"
2628 "time"
@@ -383,3 +385,74 @@ func TestLogsWithDetails(t *testing.T) {
383385
384386 testCase .Run (t )
385387}
388+
389+ func TestLogsWithStartContainer (t * testing.T ) {
390+ testCase := nerdtest .Setup ()
391+
392+ // For windows we havent added support for dual logging so not adding the test.
393+ testCase .Require = require .Not (require .Windows )
394+
395+ testCase .SubTests = []* test.Case {
396+ {
397+ Description : "Test logs are directed correctly for container start of a interactive container" ,
398+ Setup : func (data test.Data , helpers test.Helpers ) {
399+ cmd := helpers .Command ("run" , "-it" , "--name" , data .Identifier (), testutil .CommonImage )
400+ cmd .WithPseudoTTY ()
401+ cmd .WithFeeder (func () io.Reader {
402+ return strings .NewReader ("echo foo\n exit\n " )
403+ })
404+
405+ cmd .Run (& test.Expected {
406+ ExitCode : 0 ,
407+ })
408+
409+ },
410+ Cleanup : func (data test.Data , helpers test.Helpers ) {
411+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
412+ },
413+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
414+ cmd := helpers .Command ("start" , "-ia" , data .Identifier ())
415+ cmd .WithPseudoTTY ()
416+ cmd .WithFeeder (func () io.Reader {
417+ return strings .NewReader ("echo bar\n exit\n " )
418+ })
419+ cmd .Run (& test.Expected {
420+ ExitCode : 0 ,
421+ })
422+ cmd = helpers .Command ("logs" , data .Identifier ())
423+
424+ return cmd
425+ },
426+ Expected : test .Expects (0 , nil , expect .Contains ("foo" , "bar" )),
427+ },
428+ {
429+ Description : "Test logs are captured after stopping and starting a non-interactive container and continue capturing new logs" ,
430+ Setup : func (data test.Data , helpers test.Helpers ) {
431+ helpers .Ensure ("run" , "-d" , "--name" , data .Identifier (), testutil .CommonImage , "sh" , "-c" , "while true; do echo foo; sleep 1; done" )
432+ },
433+ Cleanup : func (data test.Data , helpers test.Helpers ) {
434+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
435+ },
436+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
437+ helpers .Ensure ("stop" , data .Identifier ())
438+ initialLogs := helpers .Capture ("logs" , data .Identifier ())
439+ initialFooCount := strings .Count (initialLogs , "foo" )
440+ data .Labels ().Set ("initialFooCount" , strconv .Itoa (initialFooCount ))
441+ helpers .Ensure ("start" , data .Identifier ())
442+ nerdtest .EnsureContainerStarted (helpers , data .Identifier ())
443+ return helpers .Command ("logs" , data .Identifier ())
444+ },
445+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
446+ return & test.Expected {
447+ ExitCode : 0 ,
448+ Output : func (stdout string , info string , t * testing.T ) {
449+ finalLogsCount := strings .Count (stdout , "foo" )
450+ initialFooCount , _ := strconv .Atoi (data .Labels ().Get ("initialFooCount" ))
451+ assert .Assert (t , finalLogsCount > initialFooCount , "Expected 'foo' count to increase after restart" , info )
452+ },
453+ }
454+ },
455+ },
456+ }
457+ testCase .Run (t )
458+ }
0 commit comments