55 "context"
66 "errors"
77 "fmt"
8+ "io"
89 "log"
910 "log/slog"
1011 "os"
@@ -34,12 +35,24 @@ import (
3435func TestLogs (t * testing.T ) {
3536 if flags , found := os .LookupEnv ("GO_CHILD_FLAG" ); found {
3637 if _ , found := os .LookupEnv ("GO_CHILD_SKIP_INITIALIZE" ); ! found {
37- fs := pflag .NewFlagSet ("test-logs" , pflag .ExitOnError )
38+ fs := pflag .NewFlagSet ("test-logs" , pflag .ContinueOnError )
39+ fs .SetOutput (io .Discard )
3840 logs .AddFlags (fs )
39- fs .Parse (strings .Split (flags , " " ))
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+ }
4052 if err := logs .Initialize (); err != nil {
41- fmt .Fprintln (os .Stderr , err .Error ())
42- klog .FlushAndExit (time .Second , 2 )
53+ exitCode := 1
54+ klog .ErrorS (err , "Exiting due to error" , "exit-code" , exitCode )
55+ klog .FlushAndExit (time .Second , exitCode )
4356 }
4457 }
4558
@@ -67,14 +80,9 @@ func TestLogs(t *testing.T) {
6780 expectStderr string
6881 }{
6982 {
70- name : "help" ,
71- flags : "-h" ,
72- expectError : true ,
83+ name : "help" ,
84+ flags : "-h" ,
7385 expectStdout : `
74- pflag: help requested
75- ` ,
76- expectStderr : `
77- Usage of test-logs:
7886 -v, --log-level Level number for the log level verbosity
7987 --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
8088 --vmodule pattern=N,... comma-separated list of pattern=N settings for file-filtered logging (only works for text log format)
@@ -84,38 +92,24 @@ Usage of test-logs:
8492 name : "unrecognized-flag" ,
8593 flags : "--foo" ,
8694 expectError : true ,
87- expectStdout : `
88- unknown flag: --foo
89- ` ,
9095 expectStderr : `
91- unknown flag: --foo
92- Usage of test-logs:
93- -v, --log-level Level number for the log level verbosity
94- --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
95- --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
9697` ,
9798 },
9899 {
99100 name : "v-long-form-not-available" ,
100101 flags : "--v=3" ,
101102 expectError : true ,
102- expectStdout : `
103- unknown flag: --v
104- ` ,
105103 expectStderr : `
106- unknown flag: --v
107- Usage of test-logs:
108- -v, --log-level Level number for the log level verbosity
109- --logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
110- --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
111105` ,
112106 },
113107 {
114108 name : "logging-format-unrecognized" ,
115109 flags : "--logging-format=foo" ,
116110 expectError : true ,
117111 expectStderr : `
118- 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
119113` ,
120114 },
121115 {
@@ -301,7 +295,7 @@ E0000 00:00:00.000000 00000 logs_test.go:000] "Contextual error" err="fake-err
301295 if test .expectError {
302296 var target * exec.ExitError
303297 require .ErrorAs (t , err , & target )
304- 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 " )
305299 t .Logf ("ERROR: %v" , err )
306300 } else {
307301 require .NoError (t , err )
0 commit comments