@@ -20,6 +20,7 @@ import (
20
20
"fmt"
21
21
"os/exec"
22
22
"runtime"
23
+ "strconv"
23
24
"strings"
24
25
"testing"
25
26
"time"
@@ -345,3 +346,78 @@ func TestNoneLoggerHasNoLogURI(t *testing.T) {
345
346
testCase .Expected = test .Expects (1 , nil , nil )
346
347
testCase .Run (t )
347
348
}
349
+
350
+ func TestLogsWithStartContainer (t * testing.T ) {
351
+ testCase := nerdtest .Setup ()
352
+
353
+ // For windows we havent added support for dual logging so not adding the test.
354
+ testCase .Require = require .All (require .Not (require .Windows ))
355
+
356
+ testCase .SubTests = []* test.Case {
357
+ {
358
+ Description : "Test logs are directed correctly for container start of a interactive container" ,
359
+ Setup : func (data test.Data , helpers test.Helpers ) {
360
+ cmd := helpers .Command ("run" , "-it" , "--name" , data .Identifier (), testutil .CommonImage )
361
+ cmd .WithPseudoTTY ()
362
+ cmd .Feed (strings .NewReader ("echo foo\n exit\n " ))
363
+
364
+ cmd .Run (& test.Expected {
365
+ ExitCode : 0 ,
366
+ })
367
+
368
+ },
369
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
370
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
371
+ },
372
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
373
+ cmd := helpers .Command ("start" , "-a" , data .Identifier ())
374
+ cmd .WithPseudoTTY ()
375
+ cmd .Feed (strings .NewReader ("echo bar\n exit\n " ))
376
+ cmd .Run (& test.Expected {
377
+ ExitCode : 0 ,
378
+ })
379
+ cmd = helpers .Command ("logs" , data .Identifier ())
380
+
381
+ return cmd
382
+ },
383
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
384
+ return & test.Expected {
385
+ ExitCode : 0 ,
386
+ Output : func (stdout string , info string , t * testing.T ) {
387
+ assert .Assert (t , strings .Contains (stdout , "foo" ))
388
+ assert .Assert (t , strings .Contains (stdout , "bar" ))
389
+ },
390
+ }
391
+ },
392
+ },
393
+ {
394
+ Description : "Test logs are captured after stopping and starting a non-interactive container and continue capturing new logs" ,
395
+ Setup : func (data test.Data , helpers test.Helpers ) {
396
+ helpers .Ensure ("run" , "-d" , "--name" , data .Identifier (), testutil .CommonImage , "sh" , "-c" , "while true; do echo foo; sleep 1; done" )
397
+ },
398
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
399
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
400
+ },
401
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
402
+ helpers .Ensure ("stop" , data .Identifier ())
403
+ initialLogs := helpers .Capture ("logs" , data .Identifier ())
404
+ initialFooCount := strings .Count (initialLogs , "foo" )
405
+ data .Set ("initialFooCount" , strconv .Itoa (initialFooCount ))
406
+ helpers .Ensure ("start" , data .Identifier ())
407
+ nerdtest .EnsureContainerStarted (helpers , data .Identifier ())
408
+ return helpers .Command ("logs" , data .Identifier ())
409
+ },
410
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
411
+ return & test.Expected {
412
+ ExitCode : 0 ,
413
+ Output : func (stdout string , info string , t * testing.T ) {
414
+ finalLogsCount := strings .Count (stdout , "foo" )
415
+ initialFooCount , _ := strconv .Atoi (data .Get ("initialFooCount" ))
416
+ assert .Assert (t , finalLogsCount > initialFooCount , "Expected 'foo' count to increase after restart" , info )
417
+ },
418
+ }
419
+ },
420
+ },
421
+ }
422
+ testCase .Run (t )
423
+ }
0 commit comments