Skip to content

Commit 9257dd9

Browse files
committed
update unittest case
Signed-off-by: dongjiang <dongjiang1989@126.com>
1 parent 340ae7e commit 9257dd9

2 files changed

Lines changed: 116 additions & 0 deletions

File tree

go/core/internal/controller/translator/agent/adk_api_translator_test.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,3 +1413,102 @@ func Test_AdkApiTranslator_SandboxAgent_BYOEmitsSandbox(t *testing.T) {
14131413
require.False(t, sawDeploy)
14141414
require.False(t, sawService, "sandbox runtime must not include Service; agent-sandbox owns it")
14151415
}
1416+
1417+
func Test_AdkApiTranslator_AnthropicBaseURLEnvVar(t *testing.T) {
1418+
scheme := schemev1.Scheme
1419+
require.NoError(t, v1alpha2.AddToScheme(scheme))
1420+
1421+
namespace := "test-ns"
1422+
1423+
tests := []struct {
1424+
name string
1425+
baseURL string
1426+
wantEnvVar bool
1427+
wantEnvVarValue string
1428+
}{
1429+
{
1430+
name: "empty baseURL does not inject env var",
1431+
baseURL: "",
1432+
wantEnvVar: false,
1433+
},
1434+
{
1435+
name: "custom baseURL injects ANTHROPIC_BASE_URL env var",
1436+
baseURL: "https://proxy.internal/anthropic/v1",
1437+
wantEnvVar: true,
1438+
wantEnvVarValue: "https://proxy.internal/anthropic/v1",
1439+
},
1440+
{
1441+
name: "default Anthropic URL still injects env var",
1442+
baseURL: "https://api.anthropic.com",
1443+
wantEnvVar: true,
1444+
wantEnvVarValue: "https://api.anthropic.com",
1445+
},
1446+
}
1447+
1448+
for _, tt := range tests {
1449+
t.Run(tt.name, func(t *testing.T) {
1450+
ns := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: namespace}}
1451+
1452+
modelConfig := &v1alpha2.ModelConfig{
1453+
ObjectMeta: metav1.ObjectMeta{Name: "anthropic-model", Namespace: namespace},
1454+
Spec: v1alpha2.ModelConfigSpec{
1455+
Provider: v1alpha2.ModelProviderAnthropic,
1456+
Model: "claude-3-sonnet-20240229",
1457+
APIKeySecret: "anthropic-secret",
1458+
Anthropic: &v1alpha2.AnthropicConfig{
1459+
BaseURL: tt.baseURL,
1460+
},
1461+
},
1462+
}
1463+
1464+
agent := &v1alpha2.Agent{
1465+
ObjectMeta: metav1.ObjectMeta{Name: "test-agent", Namespace: namespace},
1466+
Spec: v1alpha2.AgentSpec{
1467+
Type: v1alpha2.AgentType_Declarative,
1468+
Description: "Test Agent",
1469+
Declarative: &v1alpha2.DeclarativeAgentSpec{
1470+
SystemMessage: "You are a test agent",
1471+
ModelConfig: "anthropic-model",
1472+
},
1473+
},
1474+
}
1475+
1476+
kubeClient := fake.NewClientBuilder().
1477+
WithScheme(scheme).
1478+
WithObjects(ns, modelConfig, agent).
1479+
Build()
1480+
1481+
defaultModel := types.NamespacedName{Namespace: namespace, Name: "anthropic-model"}
1482+
trans := translator.NewAdkApiTranslator(kubeClient, defaultModel, nil, "", nil)
1483+
1484+
outputs, err := translator.TranslateAgent(context.Background(), trans, agent)
1485+
require.NoError(t, err)
1486+
require.NotNil(t, outputs)
1487+
1488+
// Find the deployment and check env vars
1489+
var deployment *appsv1.Deployment
1490+
for _, obj := range outputs.Manifest {
1491+
if d, ok := obj.(*appsv1.Deployment); ok {
1492+
deployment = d
1493+
break
1494+
}
1495+
}
1496+
require.NotNil(t, deployment)
1497+
1498+
var found bool
1499+
for _, envVar := range deployment.Spec.Template.Spec.Containers[0].Env {
1500+
if envVar.Name == "ANTHROPIC_BASE_URL" {
1501+
found = true
1502+
assert.Equal(t, tt.wantEnvVarValue, envVar.Value)
1503+
break
1504+
}
1505+
}
1506+
1507+
if tt.wantEnvVar {
1508+
assert.True(t, found, "expected ANTHROPIC_BASE_URL env var to be injected")
1509+
} else {
1510+
assert.False(t, found, "did not expect ANTHROPIC_BASE_URL env var")
1511+
}
1512+
})
1513+
}
1514+
}

python/packages/kagent-adk/tests/unittests/models/test_anthropic.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,23 @@ def test_client_uses_base_url(self):
3535
_ = llm._anthropic_client
3636
assert mock_anthropic.call_args.kwargs["base_url"] == "https://proxy.internal/anthropic"
3737

38+
def test_client_falls_back_to_env_base_url(self):
39+
llm = KAgentAnthropicLlm(model="claude-3-sonnet-20240229")
40+
with mock.patch.dict("os.environ", {"ANTHROPIC_BASE_URL": "https://env-proxy.internal/anthropic"}):
41+
with mock.patch("kagent.adk.models._anthropic.AsyncAnthropic") as mock_anthropic:
42+
mock_anthropic.return_value = mock.MagicMock(spec=AsyncAnthropic)
43+
_ = llm._anthropic_client
44+
assert mock_anthropic.call_args.kwargs["base_url"] == "https://env-proxy.internal/anthropic"
45+
46+
def test_explicit_base_url_takes_precedence_over_env(self):
47+
llm = KAgentAnthropicLlm(model="claude-3-sonnet-20240229", base_url="https://explicit.internal/anthropic")
48+
with mock.patch.dict("os.environ", {"ANTHROPIC_BASE_URL": "https://env.internal/anthropic"}):
49+
with mock.patch("kagent.adk.models._anthropic.AsyncAnthropic") as mock_anthropic:
50+
mock_anthropic.return_value = mock.MagicMock(spec=AsyncAnthropic)
51+
_ = llm._anthropic_client
52+
# Explicit base_url wins over env
53+
assert mock_anthropic.call_args.kwargs["base_url"] == "https://explicit.internal/anthropic"
54+
3855
def test_client_uses_extra_headers(self):
3956
llm = KAgentAnthropicLlm(model="claude-3-sonnet-20240229", extra_headers={"X-Org": "test-org"})
4057
with mock.patch("kagent.adk.models._anthropic.AsyncAnthropic") as mock_anthropic:

0 commit comments

Comments
 (0)