Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 47ea6dd

Browse files
committed
test(cli): speed stackdriver logging tests by setting GCE_METADATA_HOST
1 parent a21306e commit 47ea6dd

File tree

1 file changed

+121
-93
lines changed

1 file changed

+121
-93
lines changed

cli/server_test.go

+121-93
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"encoding/pem"
1515
"fmt"
1616
"io"
17+
"io/ioutil"
1718
"math/big"
1819
"net"
1920
"net/http"
@@ -1387,26 +1388,6 @@ func TestServer(t *testing.T) {
13871388
})
13881389
})
13891390

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-
14101391
t.Run("Logging", func(t *testing.T) {
14111392
t.Parallel()
14121393

@@ -1426,7 +1407,7 @@ func TestServer(t *testing.T) {
14261407
)
14271408
clitest.Start(t, root)
14281409

1429-
waitFile(t, fiName, testutil.WaitLong)
1410+
loggingWaitFile(t, fiName, testutil.WaitLong)
14301411
})
14311412

14321413
t.Run("Human", func(t *testing.T) {
@@ -1445,7 +1426,7 @@ func TestServer(t *testing.T) {
14451426
)
14461427
clitest.Start(t, root)
14471428

1448-
waitFile(t, fi, testutil.WaitShort)
1429+
loggingWaitFile(t, fi, testutil.WaitShort)
14491430
})
14501431

14511432
t.Run("JSON", func(t *testing.T) {
@@ -1464,77 +1445,7 @@ func TestServer(t *testing.T) {
14641445
)
14651446
clitest.Start(t, root)
14661447

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)
1448+
loggingWaitFile(t, fi, testutil.WaitShort)
15381449
})
15391450
})
15401451

@@ -1629,6 +1540,123 @@ func TestServer(t *testing.T) {
16291540
})
16301541
}
16311542

1543+
//nolint:tparallel,paralleltest // This test sets environment variables.
1544+
func TestServer_Logging_NoParallel(t *testing.T) {
1545+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
1546+
_, _ = io.Copy(ioutil.Discard, r.Body)
1547+
_ = r.Body.Close()
1548+
w.WriteHeader(http.StatusOK)
1549+
}))
1550+
t.Cleanup(func() { server.Close() })
1551+
1552+
// Speed up stackdriver test by using custom host. This is like
1553+
// saying we're running on GCE, so extra checks are skipped.
1554+
//
1555+
// Note, that the server isn't actually hit by the test, unsure why
1556+
// but kept just in case.
1557+
//
1558+
// From cloud.google.com/go/compute/metadata/metadata.go (used by coder/slog):
1559+
//
1560+
// metadataHostEnv is the environment variable specifying the
1561+
// GCE metadata hostname. If empty, the default value of
1562+
// metadataIP ("169.254.169.254") is used instead.
1563+
// This is variable name is not defined by any spec, as far as
1564+
// I know; it was made up for the Go package.
1565+
t.Setenv("GCE_METADATA_HOST", server.URL)
1566+
1567+
t.Run("Stackdriver", func(t *testing.T) {
1568+
ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitSuperLong)
1569+
defer cancelFunc()
1570+
1571+
fi := testutil.TempFile(t, "", "coder-logging-test-*")
1572+
1573+
inv, _ := clitest.New(t,
1574+
"server",
1575+
"--log-filter=.*",
1576+
"--in-memory",
1577+
"--http-address", ":0",
1578+
"--access-url", "http://example.com",
1579+
"--provisioner-daemons=3",
1580+
"--provisioner-types=echo",
1581+
"--log-stackdriver", fi,
1582+
)
1583+
// Attach pty so we get debug output from the command if this test
1584+
// fails.
1585+
pty := ptytest.New(t).Attach(inv)
1586+
1587+
clitest.Start(t, inv.WithContext(ctx))
1588+
1589+
// Wait for server to listen on HTTP, this is a good
1590+
// starting point for expecting logs.
1591+
_ = pty.ExpectMatchContext(ctx, "Started HTTP listener at")
1592+
1593+
loggingWaitFile(t, fi, testutil.WaitSuperLong)
1594+
b, _ := ioutil.ReadFile(fi)
1595+
t.Logf("file contents: %s", b)
1596+
t.Log("FOUND FILE!!")
1597+
// time.Sleep(25 * time.Second)
1598+
})
1599+
1600+
t.Run("Multiple", func(t *testing.T) {
1601+
ctx, cancelFunc := context.WithTimeout(context.Background(), testutil.WaitSuperLong)
1602+
defer cancelFunc()
1603+
1604+
fi1 := testutil.TempFile(t, "", "coder-logging-test-*")
1605+
fi2 := testutil.TempFile(t, "", "coder-logging-test-*")
1606+
fi3 := testutil.TempFile(t, "", "coder-logging-test-*")
1607+
1608+
// NOTE(mafredri): This test might end up downloading Terraform
1609+
// which can take a long time and end up failing the test.
1610+
// This is why we wait extra long below for server to listen on
1611+
// HTTP.
1612+
inv, _ := clitest.New(t,
1613+
"server",
1614+
"--log-filter=.*",
1615+
"--in-memory",
1616+
"--http-address", ":0",
1617+
"--access-url", "http://example.com",
1618+
"--provisioner-daemons=3",
1619+
"--provisioner-types=echo",
1620+
"--log-human", fi1,
1621+
"--log-json", fi2,
1622+
"--log-stackdriver", fi3,
1623+
)
1624+
// Attach pty so we get debug output from the command if this test
1625+
// fails.
1626+
pty := ptytest.New(t).Attach(inv)
1627+
1628+
clitest.Start(t, inv)
1629+
1630+
// Wait for server to listen on HTTP, this is a good
1631+
// starting point for expecting logs.
1632+
_ = pty.ExpectMatchContext(ctx, "Started HTTP listener at")
1633+
1634+
loggingWaitFile(t, fi1, testutil.WaitSuperLong)
1635+
loggingWaitFile(t, fi2, testutil.WaitSuperLong)
1636+
loggingWaitFile(t, fi3, testutil.WaitSuperLong)
1637+
})
1638+
}
1639+
1640+
func loggingWaitFile(t *testing.T, fiName string, dur time.Duration) {
1641+
var lastStat os.FileInfo
1642+
require.Eventually(t, func() bool {
1643+
var err error
1644+
lastStat, err = os.Stat(fiName)
1645+
if err != nil {
1646+
if !os.IsNotExist(err) {
1647+
t.Fatalf("unexpected error: %v", err)
1648+
}
1649+
return false
1650+
}
1651+
return lastStat.Size() > 0
1652+
},
1653+
dur, //nolint:gocritic
1654+
testutil.IntervalFast,
1655+
"file at %s should exist, last stat: %+v",
1656+
fiName, lastStat,
1657+
)
1658+
}
1659+
16321660
func TestServer_Production(t *testing.T) {
16331661
t.Parallel()
16341662
if runtime.GOOS != "linux" || testing.Short() {

0 commit comments

Comments
 (0)