@@ -3,6 +3,7 @@ package app
33import (
44 "os"
55 "path/filepath"
6+ "strings"
67 "testing"
78
89 "github.com/spf13/cobra"
@@ -216,6 +217,97 @@ func TestBuildRunnerConfig_TelemetryProcessing(t *testing.T) {
216217 }
217218}
218219
220+ func TestTelemetryMiddlewareParameterComputation (t * testing.T ) {
221+ // This test validates the telemetry middleware parameter computation
222+ // by testing the logic that computes server name and transport type
223+ // before calling WithMiddlewareFromFlags
224+ t .Parallel ()
225+
226+ logger .Initialize ()
227+
228+ tests := []struct {
229+ name string
230+ runFlags * RunFlags
231+ serverOrImage string
232+ expectedServer string
233+ expectedTransport string
234+ }{
235+ {
236+ name : "explicit name and transport should use provided values" ,
237+ runFlags : & RunFlags {
238+ Name : "custom-server" ,
239+ Transport : "http" ,
240+ },
241+ serverOrImage : "custom-server" ,
242+ expectedServer : "custom-server" ,
243+ expectedTransport : "http" ,
244+ },
245+ {
246+ name : "empty name should be computed from image name" ,
247+ runFlags : & RunFlags {
248+ Transport : "sse" ,
249+ },
250+ serverOrImage : "docker://registry.test/my-test-server:latest" ,
251+ expectedServer : "my-test-server" , // Extracted from image name
252+ expectedTransport : "sse" ,
253+ },
254+ {
255+ name : "empty transport should use default" ,
256+ runFlags : & RunFlags {
257+ Name : "named-server" ,
258+ },
259+ serverOrImage : "named-server" ,
260+ expectedServer : "named-server" ,
261+ expectedTransport : "streamable-http" , // Default from constant
262+ },
263+ {
264+ name : "both empty should compute name and use default transport" ,
265+ runFlags : & RunFlags {},
266+ serverOrImage : "docker://example.com/path/server-name:v1.0" ,
267+ expectedServer : "server-name" , // Extracted from image
268+ expectedTransport : "streamable-http" , // Default
269+ },
270+ }
271+
272+ for _ , tt := range tests {
273+ t .Run (tt .name , func (t * testing.T ) {
274+ t .Parallel ()
275+
276+ // Test the server name computation logic that was fixed
277+ // This simulates the logic in BuildRunnerConfig before WithMiddlewareFromFlags
278+
279+ // 1. Test transport type computation (this was already working)
280+ transportType := tt .runFlags .Transport
281+ if transportType == "" {
282+ transportType = defaultTransportType // "streamable-http"
283+ }
284+ assert .Equal (t , tt .expectedTransport , transportType , "Transport type should match expected" )
285+
286+ // 2. Test server name computation
287+ serverName := tt .runFlags .Name
288+ if serverName == "" {
289+ // This simulates the image metadata extraction logic
290+ if strings .HasPrefix (tt .serverOrImage , "docker://" ) {
291+ imagePath := strings .TrimPrefix (tt .serverOrImage , "docker://" )
292+ parts := strings .Split (imagePath , "/" )
293+ imageName := parts [len (parts )- 1 ]
294+ if colonIndex := strings .Index (imageName , ":" ); colonIndex != - 1 {
295+ imageName = imageName [:colonIndex ]
296+ }
297+ serverName = imageName
298+ } else {
299+ serverName = tt .serverOrImage
300+ }
301+ }
302+ assert .Equal (t , tt .expectedServer , serverName , "Server name should match expected" )
303+
304+ // 3. Verify both parameters are non-empty for proper middleware function
305+ assert .NotEmpty (t , serverName , "Server name should never be empty for middleware" )
306+ assert .NotEmpty (t , transportType , "Transport type should never be empty for middleware" )
307+ })
308+ }
309+ }
310+
219311func TestBuildRunnerConfig_TelemetryProcessing_Integration (t * testing.T ) {
220312 t .Parallel ()
221313 // This is a more complete integration test that tests telemetry processing
0 commit comments