4
4
"bytes"
5
5
"context"
6
6
"errors"
7
+ "fmt"
8
+ "io"
7
9
"log"
8
10
"log/slog"
9
11
"os"
@@ -33,10 +35,25 @@ import (
33
35
func TestLogs (t * testing.T ) {
34
36
if flags , found := os .LookupEnv ("GO_CHILD_FLAG" ); found {
35
37
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 )
37
40
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
+ }
40
57
}
41
58
42
59
log .Print ("log Print" )
@@ -63,14 +80,9 @@ func TestLogs(t *testing.T) {
63
80
expectStderr string
64
81
}{
65
82
{
66
- name : "help" ,
67
- flags : "-h" ,
68
- expectError : true ,
83
+ name : "help" ,
84
+ flags : "-h" ,
69
85
expectStdout : `
70
- pflag: help requested
71
- ` ,
72
- expectStderr : `
73
- Usage of test-logs:
74
86
-v, --log-level Level number for the log level verbosity
75
87
--logging-format string Sets the log format. Permitted formats: "json", "text". (default "text")
76
88
--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:
80
92
name : "unrecognized-flag" ,
81
93
flags : "--foo" ,
82
94
expectError : true ,
83
- expectStdout : `
84
- unknown flag: --foo
85
- ` ,
86
95
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
92
97
` ,
93
98
},
94
99
{
95
100
name : "v-long-form-not-available" ,
96
101
flags : "--v=3" ,
97
102
expectError : true ,
98
- expectStdout : `
99
- unknown flag: --v
100
- ` ,
101
103
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
107
105
` ,
108
106
},
109
107
{
110
108
name : "logging-format-unrecognized" ,
111
109
flags : "--logging-format=foo" ,
112
110
expectError : true ,
113
111
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
115
113
` ,
116
114
},
117
115
{
@@ -297,7 +295,7 @@ E0000 00:00:00.000000 00000 logs_test.go:000] "Contextual error" err="fake-err
297
295
if test .expectError {
298
296
var target * exec.ExitError
299
297
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 " )
301
299
t .Logf ("ERROR: %v" , err )
302
300
} else {
303
301
require .NoError (t , err )
0 commit comments