@@ -35,6 +35,7 @@ import (
3535 "github.com/coder/coder/coderd/database/postgres"
3636 "github.com/coder/coder/coderd/telemetry"
3737 "github.com/coder/coder/codersdk"
38+ "github.com/coder/coder/cryptorand"
3839 "github.com/coder/coder/pty/ptytest"
3940 "github.com/coder/coder/testutil"
4041)
@@ -1122,6 +1123,194 @@ func TestServer(t *testing.T) {
11221123 <- serverErr
11231124 })
11241125 })
1126+
1127+ t .Run ("Logging" , func (t * testing.T ) {
1128+ t .Parallel ()
1129+
1130+ t .Run ("CreatesFile" , func (t * testing.T ) {
1131+ t .Parallel ()
1132+ ctx , cancelFunc := context .WithCancel (context .Background ())
1133+ defer cancelFunc ()
1134+
1135+ random , err := cryptorand .String (5 )
1136+ require .NoError (t , err )
1137+ fiName := fmt .Sprint (os .TempDir (), "/coder-logging-test-" , random )
1138+ defer func () {
1139+ _ = os .Remove (fiName )
1140+ }()
1141+
1142+ root , _ := clitest .New (t ,
1143+ "server" ,
1144+ "--verbose" ,
1145+ "--in-memory" ,
1146+ "--http-address" , ":0" ,
1147+ "--access-url" , "http://example.com" ,
1148+ "--log-human" , fiName ,
1149+ )
1150+ serverErr := make (chan error , 1 )
1151+ go func () {
1152+ serverErr <- root .ExecuteContext (ctx )
1153+ }()
1154+
1155+ assert .Eventually (t , func () bool {
1156+ stat , err := os .Stat (fiName )
1157+ return err == nil && stat .Size () > 0
1158+ }, testutil .WaitShort , testutil .IntervalFast )
1159+ cancelFunc ()
1160+ <- serverErr
1161+ })
1162+
1163+ t .Run ("Human" , func (t * testing.T ) {
1164+ t .Parallel ()
1165+ ctx , cancelFunc := context .WithCancel (context .Background ())
1166+ defer cancelFunc ()
1167+
1168+ fi , err := os .CreateTemp ("" , "coder-logging-test-*" )
1169+ require .NoError (t , err )
1170+ defer func () {
1171+ _ = os .Remove (fi .Name ())
1172+ }()
1173+
1174+ root , _ := clitest .New (t ,
1175+ "server" ,
1176+ "--verbose" ,
1177+ "--in-memory" ,
1178+ "--http-address" , ":0" ,
1179+ "--access-url" , "http://example.com" ,
1180+ "--log-human" , fi .Name (),
1181+ )
1182+ serverErr := make (chan error , 1 )
1183+ go func () {
1184+ serverErr <- root .ExecuteContext (ctx )
1185+ }()
1186+
1187+ assert .Eventually (t , func () bool {
1188+ stat , err := os .Stat (fi .Name ())
1189+ return err == nil && stat .Size () > 0
1190+ }, testutil .WaitShort , testutil .IntervalFast )
1191+ cancelFunc ()
1192+ <- serverErr
1193+ })
1194+
1195+ t .Run ("JSON" , func (t * testing.T ) {
1196+ t .Parallel ()
1197+ ctx , cancelFunc := context .WithCancel (context .Background ())
1198+ defer cancelFunc ()
1199+
1200+ fi , err := os .CreateTemp ("" , "coder-logging-test-*" )
1201+ require .NoError (t , err )
1202+ defer func () {
1203+ _ = os .Remove (fi .Name ())
1204+ }()
1205+
1206+ root , _ := clitest .New (t ,
1207+ "server" ,
1208+ "--verbose" ,
1209+ "--in-memory" ,
1210+ "--http-address" , ":0" ,
1211+ "--access-url" , "http://example.com" ,
1212+ "--log-json" , fi .Name (),
1213+ )
1214+ serverErr := make (chan error , 1 )
1215+ go func () {
1216+ serverErr <- root .ExecuteContext (ctx )
1217+ }()
1218+
1219+ assert .Eventually (t , func () bool {
1220+ stat , err := os .Stat (fi .Name ())
1221+ return err == nil && stat .Size () > 0
1222+ }, testutil .WaitShort , testutil .IntervalFast )
1223+ cancelFunc ()
1224+ <- serverErr
1225+ })
1226+
1227+ t .Run ("Stackdriver" , func (t * testing.T ) {
1228+ t .Parallel ()
1229+ ctx , cancelFunc := context .WithCancel (context .Background ())
1230+ defer cancelFunc ()
1231+
1232+ fi , err := os .CreateTemp ("" , "coder-logging-test-*" )
1233+ require .NoError (t , err )
1234+ defer func () {
1235+ _ = os .Remove (fi .Name ())
1236+ }()
1237+
1238+ root , _ := clitest .New (t ,
1239+ "server" ,
1240+ "--verbose" ,
1241+ "--in-memory" ,
1242+ "--http-address" , ":0" ,
1243+ "--access-url" , "http://example.com" ,
1244+ "--log-stackdriver" , fi .Name (),
1245+ )
1246+ serverErr := make (chan error , 1 )
1247+ go func () {
1248+ serverErr <- root .ExecuteContext (ctx )
1249+ }()
1250+
1251+ assert .Eventually (t , func () bool {
1252+ stat , err := os .Stat (fi .Name ())
1253+ return err == nil && stat .Size () > 0
1254+ }, testutil .WaitLong , testutil .IntervalMedium )
1255+ cancelFunc ()
1256+ <- serverErr
1257+ })
1258+
1259+ t .Run ("Multiple" , func (t * testing.T ) {
1260+ t .Parallel ()
1261+ ctx , cancelFunc := context .WithCancel (context .Background ())
1262+ defer cancelFunc ()
1263+
1264+ fi1 , err := os .CreateTemp ("" , "coder-logging-test-*" )
1265+ require .NoError (t , err )
1266+ defer func () {
1267+ _ = os .Remove (fi1 .Name ())
1268+ }()
1269+
1270+ fi2 , err := os .CreateTemp ("" , "coder-logging-test-*" )
1271+ require .NoError (t , err )
1272+ defer func () {
1273+ _ = os .Remove (fi2 .Name ())
1274+ }()
1275+
1276+ fi3 , err := os .CreateTemp ("" , "coder-logging-test-*" )
1277+ require .NoError (t , err )
1278+ defer func () {
1279+ _ = os .Remove (fi3 .Name ())
1280+ }()
1281+
1282+ root , _ := clitest .New (t ,
1283+ "server" ,
1284+ "--verbose" ,
1285+ "--in-memory" ,
1286+ "--http-address" , ":0" ,
1287+ "--access-url" , "http://example.com" ,
1288+ "--log-human" , fi1 .Name (),
1289+ "--log-json" , fi2 .Name (),
1290+ "--log-stackdriver" , fi3 .Name (),
1291+ )
1292+ serverErr := make (chan error , 1 )
1293+ go func () {
1294+ serverErr <- root .ExecuteContext (ctx )
1295+ }()
1296+
1297+ assert .Eventually (t , func () bool {
1298+ stat , err := os .Stat (fi1 .Name ())
1299+ return err == nil && stat .Size () > 0
1300+ }, testutil .WaitLong , testutil .IntervalMedium )
1301+ assert .Eventually (t , func () bool {
1302+ stat , err := os .Stat (fi2 .Name ())
1303+ return err == nil && stat .Size () > 0
1304+ }, testutil .WaitLong , testutil .IntervalMedium )
1305+ assert .Eventually (t , func () bool {
1306+ stat , err := os .Stat (fi3 .Name ())
1307+ return err == nil && stat .Size () > 0
1308+ }, testutil .WaitLong , testutil .IntervalMedium )
1309+
1310+ cancelFunc ()
1311+ <- serverErr
1312+ })
1313+ })
11251314}
11261315
11271316func generateTLSCertificate (t testing.TB , commonName ... string ) (certPath , keyPath string ) {
0 commit comments