Server IP : 2a02:4780:11:1359:0:1d43:a566:2 / Your IP : 216.73.216.161 Web Server : LiteSpeed System : Linux in-mum-web1259.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u490972518 ( 490972518) PHP Version : 5.6.40 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : ON | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/../opt/golang/1.22.0/src/runtime/../runtime/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package runtime_test import ( "internal/platform" "internal/testenv" "os/exec" "runtime" "strings" "testing" ) func TestExitHooks(t *testing.T) { bmodes := []string{""} if testing.Short() { t.Skip("skipping due to -short") } // Note the HasCGO() test below; this is to prevent the test // running if CGO_ENABLED=0 is in effect. haverace := platform.RaceDetectorSupported(runtime.GOOS, runtime.GOARCH) if haverace && testenv.HasCGO() { bmodes = append(bmodes, "-race") } for _, bmode := range bmodes { scenarios := []struct { mode string expected string musthave string }{ { mode: "simple", expected: "bar foo", musthave: "", }, { mode: "goodexit", expected: "orange apple", musthave: "", }, { mode: "badexit", expected: "blub blix", musthave: "", }, { mode: "panics", expected: "", musthave: "fatal error: internal error: exit hook invoked panic", }, { mode: "callsexit", expected: "", musthave: "fatal error: internal error: exit hook invoked exit", }, } exe, err := buildTestProg(t, "testexithooks", bmode) if err != nil { t.Fatal(err) } bt := "" if bmode != "" { bt = " bmode: " + bmode } for _, s := range scenarios { cmd := exec.Command(exe, []string{"-mode", s.mode}...) out, _ := cmd.CombinedOutput() outs := strings.ReplaceAll(string(out), "\n", " ") outs = strings.TrimSpace(outs) if s.expected != "" { if s.expected != outs { t.Logf("raw output: %q", outs) t.Errorf("failed%s mode %s: wanted %q got %q", bt, s.mode, s.expected, outs) } } else if s.musthave != "" { if !strings.Contains(outs, s.musthave) { t.Logf("raw output: %q", outs) t.Errorf("failed mode %s: output does not contain %q", s.mode, s.musthave) } } else { panic("badly written scenario") } } } }