feat: configure application transports and unify graceful shutdown
This commit is contained in:
@@ -24,12 +24,13 @@ def run(args, cwd, env):
|
||||
return result.stdout
|
||||
|
||||
|
||||
def exerciseServer(binary, directory, env, stopSignal, cleanupMarker=None):
|
||||
def exerciseServer(binary, directory, env, stopSignal, cleanupMarker=None, transport="nethttp"):
|
||||
with socket.socket() as listener:
|
||||
listener.bind(("127.0.0.1", 0))
|
||||
address = f"127.0.0.1:{listener.getsockname()[1]}"
|
||||
serverEnv = {key: value for key, value in env.items() if not key.startswith("GO_OMNI_")}
|
||||
serverEnv.update(GO_OMNI_HTTP_ADDR=address,
|
||||
GO_OMNI_TRANSPORT=transport,
|
||||
GO_OMNI_ENABLE_LOGGER="true", GO_OMNI_SHUTDOWN_TIMEOUT="2s")
|
||||
if cleanupMarker:
|
||||
serverEnv["GO_OMNI_CLEANUP_MARKER"] = str(cleanupMarker)
|
||||
@@ -85,7 +86,7 @@ def exerciseServer(binary, directory, env, stopSignal, cleanupMarker=None):
|
||||
if process.poll() is None:
|
||||
process.kill()
|
||||
process.wait(timeout=5)
|
||||
print(f"PASS {binary.name}: HTTP checks, {stopSignal.name}, exit 0, listener closed", flush=True)
|
||||
print(f"PASS {binary.name} ({transport}): HTTP checks, {stopSignal.name}, exit 0, listener closed", flush=True)
|
||||
|
||||
|
||||
def main():
|
||||
@@ -95,6 +96,7 @@ def main():
|
||||
parser.add_argument("--cli", help="Use a locally built CLI instead of installing")
|
||||
parser.add_argument("--framework-version", help="Explicit version passed to the CLI")
|
||||
parser.add_argument("--framework-dir", help="Local checkout for pre-release verification")
|
||||
parser.add_argument("--transport", choices=("nethttp", "native"), default="nethttp", help="Plain HTTP transport to exercise (native requires a framework supporting unified transport configuration)")
|
||||
parser.add_argument("--skip-run-check", action="store_true", help="Skip core Run signal checks when testing an older framework")
|
||||
args = parser.parse_args()
|
||||
env = dict(os.environ, GOWORK="off")
|
||||
@@ -128,7 +130,7 @@ def main():
|
||||
binary = directory / "server"
|
||||
run([args.go, "build", "-o", str(binary), "./cmd/server"], project, env)
|
||||
for stopSignal in (signal.SIGINT, signal.SIGTERM):
|
||||
exerciseServer(binary, project, env, stopSignal)
|
||||
exerciseServer(binary, project, env, stopSignal, transport=args.transport)
|
||||
|
||||
if not args.skip_run_check:
|
||||
# Verify the framework's convenient Run API independently from the
|
||||
@@ -142,7 +144,9 @@ import (
|
||||
omni "git.yuntuo.hk/k2safe/go-omni"
|
||||
)
|
||||
func main() {
|
||||
app := omni.New()
|
||||
settings, err := omni.LoadConfig("")
|
||||
if err != nil { log.Fatal(err) }
|
||||
app := omni.New(omni.WithConfig(settings))
|
||||
app.GET("/health/live", func(ctx *omni.Context) error { return ctx.OK(map[string]string{"status": "ok"}) })
|
||||
app.OnShutdown(func() error { return os.WriteFile(os.Getenv("GO_OMNI_CLEANUP_MARKER"), []byte("closed"), 0600) })
|
||||
if err := app.Run(os.Getenv("GO_OMNI_HTTP_ADDR")); err != nil { log.Fatal(err) }
|
||||
@@ -152,7 +156,7 @@ func main() {
|
||||
run([args.go, "build", "-o", str(runBinary), "./cmd/runCheck"], project, env)
|
||||
for stopSignal in (signal.SIGINT, signal.SIGTERM):
|
||||
marker = project / f"cleanup-{stopSignal.name}"
|
||||
exerciseServer(runBinary, project, env, stopSignal, marker)
|
||||
exerciseServer(runBinary, project, env, stopSignal, marker, transport=args.transport)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user