From 0cdfb61fa51f0d7c218dfead4afceb0a473065fc Mon Sep 17 00:00:00 2001 From: Naman Tyagi Date: Wed, 27 May 2026 17:59:36 +0530 Subject: [PATCH 1/2] feat(azure.ai.agents): show metadata in connection show output Display connection metadata key-value pairs in both table and JSON output for 'azd ai connection show'. Metadata was already fetched from ARM but not rendered in table format. Fixes #8351 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../internal/connections/cmd/connection.go | 6 ++ .../connections/cmd/connection_test.go | 95 +++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go index 45bf7a7bf5f..42392e9a2d4 100644 --- a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go +++ b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection.go @@ -859,6 +859,12 @@ func printDetail(result connectionDetailResult, format string) error { fmt.Printf("Kind: %s\n", result.Kind) fmt.Printf("Auth Type: %s\n", result.AuthType) fmt.Printf("Target: %s\n", result.Target) + if len(result.Metadata) > 0 { + fmt.Println("\nMetadata:") + for k, v := range result.Metadata { + fmt.Printf(" %s: %s\n", k, deref(v)) + } + } if len(result.Credentials) > 0 { fmt.Println("\nCredentials:") for k, v := range result.Credentials { diff --git a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go index 2416407476b..8447743f7dd 100644 --- a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go +++ b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go @@ -4,7 +4,10 @@ package cmd import ( + "bytes" "encoding/json" + "io" + "os" "strings" "testing" @@ -563,3 +566,95 @@ func TestBuildCredentialReferences(t *testing.T) { }) } } + +func TestPrintDetail_IncludesMetadata(t *testing.T) { + v1 := "value1" + v2 := "value2" + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + Metadata: map[string]*string{ + "key1": &v1, + "key2": &v2, + }, + } + + // Capture stdout + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "table") + require.NoError(t, err) + + w.Close() + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + output := buf.String() + + require.Contains(t, output, "Metadata:") + require.Contains(t, output, "key1: value1") + require.Contains(t, output, "key2: value2") +} + +func TestPrintDetail_OmitsEmptyMetadata(t *testing.T) { + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + } + + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "table") + require.NoError(t, err) + + w.Close() + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + output := buf.String() + + require.NotContains(t, output, "Metadata:") +} + +func TestPrintDetail_JSON_IncludesMetadata(t *testing.T) { + v1 := "val1" + result := connectionDetailResult{ + Name: "test-conn", + Kind: "RemoteTool", + AuthType: "None", + Target: "https://example.com", + Metadata: map[string]*string{ + "foo": &v1, + }, + } + + old := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + + err := printDetail(result, "json") + require.NoError(t, err) + + w.Close() + os.Stdout = old + + var buf bytes.Buffer + _, _ = io.Copy(&buf, r) + + var parsed map[string]any + require.NoError(t, json.Unmarshal(buf.Bytes(), &parsed)) + + meta, ok := parsed["metadata"].(map[string]any) + require.True(t, ok, "metadata should be present in JSON output") + require.Equal(t, "val1", meta["foo"]) +} From d0772dd258404cd0e6a5b6e77b6bc83a68272502 Mon Sep 17 00:00:00 2001 From: Naman Tyagi Date: Wed, 27 May 2026 18:39:28 +0530 Subject: [PATCH 2/2] fix: handle w.Close() error in metadata tests (gosec G104) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../internal/connections/cmd/connection_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go index 8447743f7dd..f98c8761102 100644 --- a/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go +++ b/cli/azd/extensions/azure.ai.agents/internal/connections/cmd/connection_test.go @@ -589,7 +589,7 @@ func TestPrintDetail_IncludesMetadata(t *testing.T) { err := printDetail(result, "table") require.NoError(t, err) - w.Close() + require.NoError(t, w.Close()) os.Stdout = old var buf bytes.Buffer @@ -616,7 +616,7 @@ func TestPrintDetail_OmitsEmptyMetadata(t *testing.T) { err := printDetail(result, "table") require.NoError(t, err) - w.Close() + require.NoError(t, w.Close()) os.Stdout = old var buf bytes.Buffer @@ -645,7 +645,7 @@ func TestPrintDetail_JSON_IncludesMetadata(t *testing.T) { err := printDetail(result, "json") require.NoError(t, err) - w.Close() + require.NoError(t, w.Close()) os.Stdout = old var buf bytes.Buffer