Skip to content

Commit b6deb09

Browse files
committed
create failed tests
1 parent 96dd739 commit b6deb09

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

caddy/caddy_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,3 +1157,104 @@ func TestDisabledMetrics(t *testing.T) {
11571157
require.NoError(t, err, "failed to count metrics")
11581158
require.Zero(t, count, "metrics should be missing")
11591159
}
1160+
1161+
func TestWorkerRestart(t *testing.T) {
1162+
var wg sync.WaitGroup
1163+
tester := caddytest.NewTester(t)
1164+
tester.InitServer(`
1165+
{
1166+
skip_install_trust
1167+
admin localhost:2999
1168+
http_port `+testPort+`
1169+
https_port 9443
1170+
1171+
metrics
1172+
frankenphp {
1173+
worker {
1174+
name service
1175+
file ../testdata/worker-restart.php
1176+
num 1
1177+
# restart every 3 requests
1178+
env EVERY 3
1179+
}
1180+
}
1181+
}
1182+
1183+
localhost:`+testPort+` {
1184+
route {
1185+
php {
1186+
root ../testdata
1187+
}
1188+
}
1189+
}
1190+
`, "caddyfile")
1191+
1192+
ctx := caddy.ActiveContext()
1193+
1194+
resp, err := http.Get("http://localhost:2999/metrics")
1195+
require.NoError(t, err, "failed to fetch metrics")
1196+
defer resp.Body.Close()
1197+
1198+
// Read and parse metrics
1199+
metrics := new(bytes.Buffer)
1200+
_, err = metrics.ReadFrom(resp.Body)
1201+
require.NoError(t, err, "failed to read metrics")
1202+
1203+
// frankenphp_worker_restarts should be missing
1204+
count, err := testutil.GatherAndCount(
1205+
ctx.GetMetricsRegistry(),
1206+
"frankenphp_worker_restarts",
1207+
)
1208+
require.NoError(t, err, "failed to count metrics")
1209+
require.Zero(t, count, "metrics should be missing")
1210+
1211+
// Check metrics
1212+
expectedMetrics := `
1213+
# HELP frankenphp_ready_workers Running workers that have successfully called frankenphp_handle_request at least once
1214+
# TYPE frankenphp_ready_workers gauge
1215+
frankenphp_ready_workers{worker="service"} 1
1216+
# HELP frankenphp_total_workers Total number of PHP workers for this worker
1217+
# TYPE frankenphp_total_workers gauge
1218+
frankenphp_total_workers{worker="service"} 1
1219+
`
1220+
1221+
require.NoError(t,
1222+
testutil.GatherAndCompare(
1223+
ctx.GetMetricsRegistry(),
1224+
strings.NewReader(expectedMetrics),
1225+
"frankenphp_total_workers",
1226+
"frankenphp_ready_workers",
1227+
))
1228+
1229+
// Make some requests
1230+
for i := 0; i < 10; i++ {
1231+
wg.Add(1)
1232+
go func(i int) {
1233+
tester.AssertGetResponse(fmt.Sprintf("http://localhost:"+testPort+"/worker-restart.php?i=%d", i), http.StatusOK, fmt.Sprintf("Counter (%d)", i))
1234+
wg.Done()
1235+
}(i)
1236+
}
1237+
wg.Wait()
1238+
1239+
// frankenphp_ready_workers should be back to 1 even after worker restarts
1240+
expectedMetrics = `
1241+
# HELP frankenphp_ready_workers Running workers that have successfully called frankenphp_handle_request at least once
1242+
# TYPE frankenphp_ready_workers gauge
1243+
frankenphp_ready_workers{worker="service"} 1
1244+
# HELP frankenphp_total_workers Total number of PHP workers for this worker
1245+
# TYPE frankenphp_total_workers gauge
1246+
frankenphp_total_workers{worker="service"} 1
1247+
# HELP frankenphp_worker_restarts Number of PHP worker restarts for this worker
1248+
# TYPE frankenphp_worker_restarts counter
1249+
frankenphp_worker_restarts{worker="service"} 3
1250+
`
1251+
1252+
require.NoError(t,
1253+
testutil.GatherAndCompare(
1254+
ctx.GetMetricsRegistry(),
1255+
strings.NewReader(expectedMetrics),
1256+
"frankenphp_total_workers",
1257+
"frankenphp_ready_workers",
1258+
"frankenphp_worker_restarts",
1259+
))
1260+
}

testdata/worker-restart.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
$fn = static function () {
4+
echo sprintf("Counter (%s)", $_GET['i'] ?? 'i not set');
5+
};
6+
7+
$loopMax = $_SERVER['EVERY'] ?? 10;
8+
$loops = 0;
9+
do {
10+
$ret = \frankenphp_handle_request($fn);
11+
} while ($ret && (-1 === $loopMax || ++$loops < $loopMax));
12+
13+
exit(0);

0 commit comments

Comments
 (0)