44 "bytes"
55 "context"
66 "errors"
7+ "fmt"
8+ "io"
79 "log"
810 "log/slog"
911 "os"
@@ -33,10 +35,25 @@ import (
3335func TestLogs (t * testing.T ) {
3436 if flags , found := os .LookupEnv ("GO_CHILD_FLAG" ); found {
3537 if _ , found := os .LookupEnv ("GO_CHILD_SKIP_INITIALIZE" ); ! found {
36- fs := pflag .NewFlagSet ("test-logs" , pflag .ExitOnError )
38+ fs := pflag .NewFlagSet ("test-logs" , pflag .ContinueOnError )
39+ fs .SetOutput (io .Discard )
3740 logs .AddFlags (fs )
38- fs .Parse (strings .Split (flags , " " ))
39- logs .Initialize ()
41+ if err := fs .Parse (strings .Split (flags , " " )); err != nil {
42+ exitCode := 0
43+ if errors .Is (err , pflag .ErrHelp ) {
44+ fmt .Fprint (os .Stdout , fs .FlagUsages ())
45+ os .Exit (exitCode )
46+ } else {
47+ exitCode := 1
48+ klog .ErrorS (err , "Exiting due to error" , "exit-code" , exitCode )
49+ klog .FlushAndExit (time .Second , exitCode )
50+ }
51+ }
52+ if err := logs .Initialize (); err != nil {
53+ exitCode := 1
54+ klog .ErrorS (err , "Exiting due to error" , "exit-code" , exitCode )
55+ klog .FlushAndExit (time .Second , exitCode )
56+ }
4057 }
4158
4259 log .Print ("log Print" )
@@ -63,14 +80,9 @@ func TestLogs(t *testing.T) {
6380 expectStderr string
6481 }{
6582 {
66- name : "help" ,
67- flags : "-h" ,
68- expectError : true ,
83+ name : "help" ,
84+ flags : "-h" ,
6985 expectStdout : `
70- pflag: help requested
71- ` ,
72- expectStderr : `
73- Usage of test-logs:
7486 -v, --log-level Level number for the log level verbosity
7587 --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
7688 --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
@@ -80,38 +92,24 @@ Usage of test-logs:
8092 name : "unrecognized-flag" ,
8193 flags : "--foo" ,
8294 expectError : true ,
83- expectStdout : `
84- unknown flag: --foo
85- ` ,
8695 expectStderr : `
87- unknown flag: --foo
88- Usage of test-logs:
89- -v, --log-level Level number for the log level verbosity
90- --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
91- --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
96+ E0000 00:00:00.000000 00000 logs_test.go:000] "Exiting due to error" err="unknown flag: --foo" exit-code=1
9297` ,
9398 },
9499 {
95100 name : "v-long-form-not-available" ,
96101 flags : "--v=3" ,
97102 expectError : true ,
98- expectStdout : `
99- unknown flag: --v
100- ` ,
101103 expectStderr : `
102- unknown flag: --v
103- Usage of test-logs:
104- -v, --log-level Level number for the log level verbosity
105- --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
106- --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
104+ E0000 00:00:00.000000 00000 logs_test.go:000] "Exiting due to error" err="unknown flag: --v" exit-code=1
107105` ,
108106 },
109107 {
110108 name : "logging-format-unrecognized" ,
111109 flags : "--logging-format=foo" ,
112110 expectError : true ,
113111 expectStderr : `
114- Error in logging configuration: format: Invalid value: "foo": Unsupported log format
112+ E0000 00:00:00.000000 00000 logs_test.go:000] "Exiting due to error" err=" Error in logging configuration: format: Invalid value: \ "foo\ ": Unsupported log format" exit-code=1
115113` ,
116114 },
117115 {
@@ -297,7 +295,7 @@ E0000 00:00:00.000000 00000 logs_test.go:000] "Contextual error" err="fake-err
297295 if test .expectError {
298296 var target * exec.ExitError
299297 require .ErrorAs (t , err , & target )
300- require .Equal (t , 2 , target .ExitCode (), "Flag parsing failures should always result in exit code 2 " )
298+ require .Equal (t , 1 , target .ExitCode (), "Flag parsing failures should always result in exit code 1 " )
301299 t .Logf ("ERROR: %v" , err )
302300 } else {
303301 require .NoError (t , err )
0 commit comments