@@ -1387,26 +1387,6 @@ func TestServer(t *testing.T) {
1387
1387
})
1388
1388
})
1389
1389
1390
- waitFile := func (t * testing.T , fiName string , dur time.Duration ) {
1391
- var lastStat os.FileInfo
1392
- require .Eventually (t , func () bool {
1393
- var err error
1394
- lastStat , err = os .Stat (fiName )
1395
- if err != nil {
1396
- if ! os .IsNotExist (err ) {
1397
- t .Fatalf ("unexpected error: %v" , err )
1398
- }
1399
- return false
1400
- }
1401
- return lastStat .Size () > 0
1402
- },
1403
- dur , //nolint:gocritic
1404
- testutil .IntervalFast ,
1405
- "file at %s should exist, last stat: %+v" ,
1406
- fiName , lastStat ,
1407
- )
1408
- }
1409
-
1410
1390
t .Run ("Logging" , func (t * testing.T ) {
1411
1391
t .Parallel ()
1412
1392
@@ -1426,7 +1406,7 @@ func TestServer(t *testing.T) {
1426
1406
)
1427
1407
clitest .Start (t , root )
1428
1408
1429
- waitFile (t , fiName , testutil .WaitLong )
1409
+ loggingWaitFile (t , fiName , testutil .WaitLong )
1430
1410
})
1431
1411
1432
1412
t .Run ("Human" , func (t * testing.T ) {
@@ -1445,7 +1425,7 @@ func TestServer(t *testing.T) {
1445
1425
)
1446
1426
clitest .Start (t , root )
1447
1427
1448
- waitFile (t , fi , testutil .WaitShort )
1428
+ loggingWaitFile (t , fi , testutil .WaitShort )
1449
1429
})
1450
1430
1451
1431
t .Run ("JSON" , func (t * testing.T ) {
@@ -1464,77 +1444,7 @@ func TestServer(t *testing.T) {
1464
1444
)
1465
1445
clitest .Start (t , root )
1466
1446
1467
- waitFile (t , fi , testutil .WaitShort )
1468
- })
1469
-
1470
- t .Run ("Stackdriver" , func (t * testing.T ) {
1471
- t .Parallel ()
1472
- ctx , cancelFunc := context .WithTimeout (context .Background (), testutil .WaitSuperLong )
1473
- defer cancelFunc ()
1474
-
1475
- fi := testutil .TempFile (t , "" , "coder-logging-test-*" )
1476
-
1477
- inv , _ := clitest .New (t ,
1478
- "server" ,
1479
- "--log-filter=.*" ,
1480
- "--in-memory" ,
1481
- "--http-address" , ":0" ,
1482
- "--access-url" , "http://example.com" ,
1483
- "--provisioner-daemons=3" ,
1484
- "--provisioner-types=echo" ,
1485
- "--log-stackdriver" , fi ,
1486
- )
1487
- // Attach pty so we get debug output from the command if this test
1488
- // fails.
1489
- pty := ptytest .New (t ).Attach (inv )
1490
-
1491
- clitest .Start (t , inv .WithContext (ctx ))
1492
-
1493
- // Wait for server to listen on HTTP, this is a good
1494
- // starting point for expecting logs.
1495
- _ = pty .ExpectMatchContext (ctx , "Started HTTP listener at" )
1496
-
1497
- waitFile (t , fi , testutil .WaitSuperLong )
1498
- })
1499
-
1500
- t .Run ("Multiple" , func (t * testing.T ) {
1501
- t .Parallel ()
1502
- ctx , cancelFunc := context .WithTimeout (context .Background (), testutil .WaitSuperLong )
1503
- defer cancelFunc ()
1504
-
1505
- fi1 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1506
- fi2 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1507
- fi3 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1508
-
1509
- // NOTE(mafredri): This test might end up downloading Terraform
1510
- // which can take a long time and end up failing the test.
1511
- // This is why we wait extra long below for server to listen on
1512
- // HTTP.
1513
- inv , _ := clitest .New (t ,
1514
- "server" ,
1515
- "--log-filter=.*" ,
1516
- "--in-memory" ,
1517
- "--http-address" , ":0" ,
1518
- "--access-url" , "http://example.com" ,
1519
- "--provisioner-daemons=3" ,
1520
- "--provisioner-types=echo" ,
1521
- "--log-human" , fi1 ,
1522
- "--log-json" , fi2 ,
1523
- "--log-stackdriver" , fi3 ,
1524
- )
1525
- // Attach pty so we get debug output from the command if this test
1526
- // fails.
1527
- pty := ptytest .New (t ).Attach (inv )
1528
-
1529
- clitest .Start (t , inv )
1530
-
1531
- // Wait for server to listen on HTTP, this is a good
1532
- // starting point for expecting logs.
1533
- _ = pty .ExpectMatchContext (ctx , "Started HTTP listener at" )
1534
-
1535
- waitFile (t , fi1 , testutil .WaitSuperLong )
1536
- waitFile (t , fi2 , testutil .WaitSuperLong )
1537
- waitFile (t , fi3 , testutil .WaitSuperLong )
1447
+ loggingWaitFile (t , fi , testutil .WaitShort )
1538
1448
})
1539
1449
})
1540
1450
@@ -1629,6 +1539,119 @@ func TestServer(t *testing.T) {
1629
1539
})
1630
1540
}
1631
1541
1542
+ //nolint:tparallel,paralleltest // This test sets environment variables.
1543
+ func TestServer_Logging_NoParallel (t * testing.T ) {
1544
+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
1545
+ _ , _ = io .Copy (ioutil .Discard , r .Body )
1546
+ _ = r .Body .Close ()
1547
+ w .WriteHeader (http .StatusOK )
1548
+ }))
1549
+ t .Cleanup (func () { server .Close () })
1550
+
1551
+ // Speed up stackdriver test by using custom host. This is like
1552
+ // saying we're running on GCE, so extra checks are skipped.
1553
+ //
1554
+ // Note, that the server isn't actually hit by the test, unsure why
1555
+ // but kept just in case.
1556
+ //
1557
+ // From cloud.google.com/go/compute/metadata/metadata.go (used by coder/slog):
1558
+ //
1559
+ // metadataHostEnv is the environment variable specifying the
1560
+ // GCE metadata hostname. If empty, the default value of
1561
+ // metadataIP ("169.254.169.254") is used instead.
1562
+ // This is variable name is not defined by any spec, as far as
1563
+ // I know; it was made up for the Go package.
1564
+ t .Setenv ("GCE_METADATA_HOST" , server .URL )
1565
+
1566
+ t .Run ("Stackdriver" , func (t * testing.T ) {
1567
+ ctx , cancelFunc := context .WithTimeout (context .Background (), testutil .WaitSuperLong )
1568
+ defer cancelFunc ()
1569
+
1570
+ fi := testutil .TempFile (t , "" , "coder-logging-test-*" )
1571
+
1572
+ inv , _ := clitest .New (t ,
1573
+ "server" ,
1574
+ "--log-filter=.*" ,
1575
+ "--in-memory" ,
1576
+ "--http-address" , ":0" ,
1577
+ "--access-url" , "http://example.com" ,
1578
+ "--provisioner-daemons=3" ,
1579
+ "--provisioner-types=echo" ,
1580
+ "--log-stackdriver" , fi ,
1581
+ )
1582
+ // Attach pty so we get debug output from the command if this test
1583
+ // fails.
1584
+ pty := ptytest .New (t ).Attach (inv )
1585
+
1586
+ clitest .Start (t , inv .WithContext (ctx ))
1587
+
1588
+ // Wait for server to listen on HTTP, this is a good
1589
+ // starting point for expecting logs.
1590
+ _ = pty .ExpectMatchContext (ctx , "Started HTTP listener at" )
1591
+
1592
+ loggingWaitFile (t , fi , testutil .WaitSuperLong )
1593
+ })
1594
+
1595
+ t .Run ("Multiple" , func (t * testing.T ) {
1596
+ ctx , cancelFunc := context .WithTimeout (context .Background (), testutil .WaitSuperLong )
1597
+ defer cancelFunc ()
1598
+
1599
+ fi1 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1600
+ fi2 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1601
+ fi3 := testutil .TempFile (t , "" , "coder-logging-test-*" )
1602
+
1603
+ // NOTE(mafredri): This test might end up downloading Terraform
1604
+ // which can take a long time and end up failing the test.
1605
+ // This is why we wait extra long below for server to listen on
1606
+ // HTTP.
1607
+ inv , _ := clitest .New (t ,
1608
+ "server" ,
1609
+ "--log-filter=.*" ,
1610
+ "--in-memory" ,
1611
+ "--http-address" , ":0" ,
1612
+ "--access-url" , "http://example.com" ,
1613
+ "--provisioner-daemons=3" ,
1614
+ "--provisioner-types=echo" ,
1615
+ "--log-human" , fi1 ,
1616
+ "--log-json" , fi2 ,
1617
+ "--log-stackdriver" , fi3 ,
1618
+ )
1619
+ // Attach pty so we get debug output from the command if this test
1620
+ // fails.
1621
+ pty := ptytest .New (t ).Attach (inv )
1622
+
1623
+ clitest .Start (t , inv )
1624
+
1625
+ // Wait for server to listen on HTTP, this is a good
1626
+ // starting point for expecting logs.
1627
+ _ = pty .ExpectMatchContext (ctx , "Started HTTP listener at" )
1628
+
1629
+ loggingWaitFile (t , fi1 , testutil .WaitSuperLong )
1630
+ loggingWaitFile (t , fi2 , testutil .WaitSuperLong )
1631
+ loggingWaitFile (t , fi3 , testutil .WaitSuperLong )
1632
+ })
1633
+ }
1634
+
1635
+ func loggingWaitFile (t * testing.T , fiName string , dur time.Duration ) {
1636
+ var lastStat os.FileInfo
1637
+ require .Eventually (t , func () bool {
1638
+ var err error
1639
+ lastStat , err = os .Stat (fiName )
1640
+ if err != nil {
1641
+ if ! os .IsNotExist (err ) {
1642
+ t .Fatalf ("unexpected error: %v" , err )
1643
+ }
1644
+ return false
1645
+ }
1646
+ return lastStat .Size () > 0
1647
+ },
1648
+ dur , //nolint:gocritic
1649
+ testutil .IntervalFast ,
1650
+ "file at %s should exist, last stat: %+v" ,
1651
+ fiName , lastStat ,
1652
+ )
1653
+ }
1654
+
1632
1655
func TestServer_Production (t * testing.T ) {
1633
1656
t .Parallel ()
1634
1657
if runtime .GOOS != "linux" || testing .Short () {
0 commit comments