@@ -3,6 +3,7 @@ package app
3
3
import (
4
4
"os"
5
5
"path/filepath"
6
+ "strings"
6
7
"testing"
7
8
8
9
"github.com/spf13/cobra"
@@ -216,6 +217,97 @@ func TestBuildRunnerConfig_TelemetryProcessing(t *testing.T) {
216
217
}
217
218
}
218
219
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
+
219
311
func TestBuildRunnerConfig_TelemetryProcessing_Integration (t * testing.T ) {
220
312
t .Parallel ()
221
313
// This is a more complete integration test that tests telemetry processing
0 commit comments