@@ -10,6 +10,8 @@ import (
1010 "strings"
1111 "testing"
1212
13+ "github.com/stretchr/testify/assert"
14+ "github.com/stretchr/testify/require"
1315 "k8s.io/cli-runtime/pkg/genericiooptions"
1416)
1517
@@ -48,7 +50,7 @@ func TestConfig(t *testing.T) {
4850 t .Run ("defaults to none" , func (t * testing.T ) {
4951 ioStreams , out := testStream ()
5052 rootCmd := NewMCPServer (ioStreams )
51- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
53+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" })
5254 expectedConfig := `" - Config: "`
5355 if err := rootCmd .Execute (); ! strings .Contains (out .String (), expectedConfig ) {
5456 t .Fatalf ("Expected config to be %s, got %s %v" , expectedConfig , out .String (), err )
@@ -59,7 +61,7 @@ func TestConfig(t *testing.T) {
5961 rootCmd := NewMCPServer (ioStreams )
6062 _ , file , _ , _ := runtime .Caller (0 )
6163 emptyConfigPath := filepath .Join (filepath .Dir (file ), "testdata" , "empty-config.toml" )
62- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--config" , emptyConfigPath })
64+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--config" , emptyConfigPath })
6365 _ = rootCmd .Execute ()
6466 expected := `(?m)\" - Config\:[^\"]+empty-config\.toml\"`
6567 if m , err := regexp .MatchString (expected , out .String ()); ! m || err != nil {
@@ -69,7 +71,7 @@ func TestConfig(t *testing.T) {
6971 t .Run ("invalid path throws error" , func (t * testing.T ) {
7072 ioStreams , _ := testStream ()
7173 rootCmd := NewMCPServer (ioStreams )
72- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--config" , "invalid-path-to-config.toml" })
74+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--config" , "invalid-path-to-config.toml" })
7375 err := rootCmd .Execute ()
7476 if err == nil {
7577 t .Fatal ("Expected error for invalid config path, got nil" )
@@ -142,15 +144,15 @@ func TestToolsets(t *testing.T) {
142144 t .Run ("default" , func (t * testing.T ) {
143145 ioStreams , out := testStream ()
144146 rootCmd := NewMCPServer (ioStreams )
145- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
147+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" })
146148 if err := rootCmd .Execute (); ! strings .Contains (out .String (), "- Toolsets: core, config, helm" ) {
147149 t .Fatalf ("Expected toolsets 'full', got %s %v" , out , err )
148150 }
149151 })
150152 t .Run ("set with --toolsets" , func (t * testing.T ) {
151153 ioStreams , out := testStream ()
152154 rootCmd := NewMCPServer (ioStreams )
153- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--toolsets" , "helm,config" })
155+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--toolsets" , "helm,config" })
154156 _ = rootCmd .Execute ()
155157 expected := `(?m)\" - Toolsets\: helm, config\"`
156158 if m , err := regexp .MatchString (expected , out .String ()); ! m || err != nil {
@@ -172,15 +174,15 @@ func TestListOutput(t *testing.T) {
172174 t .Run ("defaults to table" , func (t * testing.T ) {
173175 ioStreams , out := testStream ()
174176 rootCmd := NewMCPServer (ioStreams )
175- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
177+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" })
176178 if err := rootCmd .Execute (); ! strings .Contains (out .String (), "- ListOutput: table" ) {
177179 t .Fatalf ("Expected list-output 'table', got %s %v" , out , err )
178180 }
179181 })
180182 t .Run ("set with --list-output" , func (t * testing.T ) {
181183 ioStreams , out := testStream ()
182184 rootCmd := NewMCPServer (ioStreams )
183- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--list-output" , "yaml" })
185+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--list-output" , "yaml" })
184186 _ = rootCmd .Execute ()
185187 expected := `(?m)\" - ListOutput\: yaml\"`
186188 if m , err := regexp .MatchString (expected , out .String ()); ! m || err != nil {
@@ -193,15 +195,15 @@ func TestReadOnly(t *testing.T) {
193195 t .Run ("defaults to false" , func (t * testing.T ) {
194196 ioStreams , out := testStream ()
195197 rootCmd := NewMCPServer (ioStreams )
196- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
198+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" })
197199 if err := rootCmd .Execute (); ! strings .Contains (out .String (), " - Read-only mode: false" ) {
198200 t .Fatalf ("Expected read-only mode false, got %s %v" , out , err )
199201 }
200202 })
201203 t .Run ("set with --read-only" , func (t * testing.T ) {
202204 ioStreams , out := testStream ()
203205 rootCmd := NewMCPServer (ioStreams )
204- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--read-only" })
206+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--read-only" })
205207 _ = rootCmd .Execute ()
206208 expected := `(?m)\" - Read-only mode\: true\"`
207209 if m , err := regexp .MatchString (expected , out .String ()); ! m || err != nil {
@@ -214,15 +216,15 @@ func TestDisableDestructive(t *testing.T) {
214216 t .Run ("defaults to false" , func (t * testing.T ) {
215217 ioStreams , out := testStream ()
216218 rootCmd := NewMCPServer (ioStreams )
217- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
219+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" })
218220 if err := rootCmd .Execute (); ! strings .Contains (out .String (), " - Disable destructive tools: false" ) {
219221 t .Fatalf ("Expected disable destructive false, got %s %v" , out , err )
220222 }
221223 })
222224 t .Run ("set with --disable-destructive" , func (t * testing.T ) {
223225 ioStreams , out := testStream ()
224226 rootCmd := NewMCPServer (ioStreams )
225- rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--disable-destructive" })
227+ rootCmd .SetArgs ([]string {"--version" , "--port=1337" , "-- log-level=1" , "--disable-destructive" })
226228 _ = rootCmd .Execute ()
227229 expected := `(?m)\" - Disable destructive tools\: true\"`
228230 if m , err := regexp .MatchString (expected , out .String ()); ! m || err != nil {
@@ -255,3 +257,22 @@ func TestAuthorizationURL(t *testing.T) {
255257 }
256258 })
257259}
260+
261+ func TestStdioLogging (t * testing.T ) {
262+ t .Run ("stdio disables klog" , func (t * testing.T ) {
263+ ioStreams , out := testStream ()
264+ rootCmd := NewMCPServer (ioStreams )
265+ rootCmd .SetArgs ([]string {"--version" , "--log-level=1" })
266+ err := rootCmd .Execute ()
267+ require .NoErrorf (t , err , "Expected no error executing command, got %v" , err )
268+ assert .Equalf (t , "0.0.0\n " , out .String (), "Expected only version output, got %s" , out .String ())
269+ })
270+ t .Run ("http mode enables klog" , func (t * testing.T ) {
271+ ioStreams , out := testStream ()
272+ rootCmd := NewMCPServer (ioStreams )
273+ rootCmd .SetArgs ([]string {"--version" , "--log-level=1" , "--port=1337" })
274+ err := rootCmd .Execute ()
275+ require .NoErrorf (t , err , "Expected no error executing command, got %v" , err )
276+ assert .Containsf (t , out .String (), "Starting kubernetes-mcp-server" , "Expected klog output, got %s" , out .String ())
277+ })
278+ }
0 commit comments