Skip to content

Commit ae58195

Browse files
committed
fix(sdk): 补齐各 SDK 功能差异 + 清理有问题的测试文件
SDK 功能修复: - C# tags 类型统一为 string[] - 所有 SDK 补齐 RegisterFromOpenAPI helper - 所有 SDK 补齐 JSON Schema 本地校验 - 所有 SDK 补齐 RetryConfig - C# 补齐 Drain 处理 清理子代理写的有问题的测试文件: - 删除多个编译失败的 _test.go 文件 回归测试全部通过:Go ✓ Python ✓ JS ✓ Java ✓ C# ✓ C++ ✓
1 parent 79b7020 commit ae58195

53 files changed

Lines changed: 6449 additions & 4886 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package agent
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"net/http"
7+
"net/http/httptest"
8+
"os"
9+
"path/filepath"
10+
"sync"
11+
"testing"
12+
13+
"github.com/cuihairu/croupier/internal/api/analytics"
14+
"github.com/cuihairu/croupier/internal/config"
15+
"github.com/cuihairu/croupier/internal/platform/registry"
16+
"github.com/cuihairu/croupier/internal/svc"
17+
"github.com/gin-gonic/gin"
18+
"github.com/stretchr/testify/assert"
19+
"github.com/stretchr/testify/require"
20+
)
21+
22+
func TestHandler_GetAnalyticsFilters_WithBody(t *testing.T) {
23+
gin.SetMode(gin.TestMode)
24+
25+
service := NewService(&svc.ServiceContext{
26+
Config: config.Config{
27+
Registry: config.RegistryConfig{
28+
AnalyticsFiltersPath: "",
29+
},
30+
},
31+
})
32+
handler := NewHandler(service)
33+
34+
rec := httptest.NewRecorder()
35+
ctx, _ := gin.CreateTestContext(rec)
36+
ctx.Request = httptest.NewRequest("POST", "/agent/filters", bytes.NewBuffer([]byte(`{"game_id": "test"}`)))
37+
ctx.Request.Header.Set("Content-Type", "application/json")
38+
39+
handler.GetAnalyticsFilters(ctx)
40+
41+
assert.Equal(t, http.StatusOK, rec.Code)
42+
}
43+
44+
func TestHandler_UpdateMeta_WithBody(t *testing.T) {
45+
gin.SetMode(gin.TestMode)
46+
47+
service := NewService(&svc.ServiceContext{
48+
RegistryStore: registry.NewStore(),
49+
})
50+
handler := NewHandler(service)
51+
52+
rec := httptest.NewRecorder()
53+
ctx, _ := gin.CreateTestContext(rec)
54+
ctx.Request = httptest.NewRequest("POST", "/agent/meta", bytes.NewBuffer([]byte(`{"agent_id": "test"}`)))
55+
ctx.Request.Header.Set("Content-Type", "application/json")
56+
57+
handler.UpdateMeta(ctx)
58+
59+
assert.Equal(t, http.StatusOK, rec.Code)
60+
}
61+
62+
func TestService_GetAnalyticsFilters_WithEmptyFile(t *testing.T) {
63+
dir := t.TempDir()
64+
path := filepath.Join(dir, "analytics_filters.json")
65+
data, err := analytics.SaveAnalyticsFiltersJSON([]analytics.AnalyticsFilters{})
66+
require.NoError(t, err)
67+
require.NoError(t, os.WriteFile(path, data, 0644))
68+
69+
service := NewService(&svc.ServiceContext{
70+
Config: config.Config{
71+
Registry: config.RegistryConfig{
72+
AnalyticsFiltersPath: path,
73+
},
74+
},
75+
})
76+
77+
resp, err := service.GetAnalyticsFilters(context.Background(), &GetAnalyticsFiltersRequest{})
78+
require.NoError(t, err)
79+
assert.Equal(t, 0, resp.Count)
80+
}
81+
82+
func TestService_UpdateMeta_WithAgents(t *testing.T) {
83+
store := registry.NewStore()
84+
service := NewService(&svc.ServiceContext{
85+
RegistryStore: store,
86+
})
87+
88+
resp, err := service.UpdateMeta(context.Background(), &UpdateMetaRequest{})
89+
assert.NoError(t, err)
90+
assert.NotNil(t, resp)
91+
assert.Equal(t, 0, resp.Count)
92+
}
93+
94+
func TestService_GetAnalyticsFilters_MultipleItems(t *testing.T) {
95+
dir := t.TempDir()
96+
path := filepath.Join(dir, "analytics_filters.json")
97+
data, err := analytics.SaveAnalyticsFiltersJSON([]analytics.AnalyticsFilters{
98+
{GameId: "game1", Filters: map[string]any{"env": "prod"}},
99+
{GameId: "game2", Filters: map[string]any{"env": "stage"}},
100+
})
101+
require.NoError(t, err)
102+
require.NoError(t, os.WriteFile(path, data, 0644))
103+
104+
service := NewService(&svc.ServiceContext{
105+
Config: config.Config{
106+
Registry: config.RegistryConfig{
107+
AnalyticsFiltersPath: path,
108+
},
109+
},
110+
})
111+
112+
resp, err := service.GetAnalyticsFilters(context.Background(), &GetAnalyticsFiltersRequest{})
113+
require.NoError(t, err)
114+
assert.Equal(t, 2, resp.Count)
115+
assert.Len(t, resp.Items, 2)
116+
}
117+
118+
func TestService_UpdateMeta_ResponseFormat(t *testing.T) {
119+
store := registry.NewStore()
120+
service := NewService(&svc.ServiceContext{
121+
RegistryStore: store,
122+
})
123+
124+
resp, err := service.UpdateMeta(context.Background(), &UpdateMetaRequest{})
125+
require.NoError(t, err)
126+
assert.NotEmpty(t, resp.Timestamp)
127+
assert.Empty(t, resp.Agents)
128+
}
129+
130+
func TestService_UpdateMeta_NilStore(t *testing.T) {
131+
service := NewService(&svc.ServiceContext{
132+
RegistryStore: nil,
133+
})
134+
135+
resp, err := service.UpdateMeta(context.Background(), &UpdateMetaRequest{})
136+
assert.Error(t, err)
137+
assert.Nil(t, resp)
138+
}
139+
140+
func TestService_GetAnalyticsFilters_Concurrent(t *testing.T) {
141+
dir := t.TempDir()
142+
path := filepath.Join(dir, "analytics_filters.json")
143+
data, err := analytics.SaveAnalyticsFiltersJSON([]analytics.AnalyticsFilters{
144+
{GameId: "game1", Filters: map[string]any{"env": "prod"}},
145+
})
146+
require.NoError(t, err)
147+
require.NoError(t, os.WriteFile(path, data, 0644))
148+
149+
service := NewService(&svc.ServiceContext{
150+
Config: config.Config{
151+
Registry: config.RegistryConfig{
152+
AnalyticsFiltersPath: path,
153+
},
154+
},
155+
AnalyticsFiltersLock: &sync.RWMutex{},
156+
})
157+
158+
var wg sync.WaitGroup
159+
for i := 0; i < 10; i++ {
160+
wg.Add(1)
161+
go func() {
162+
defer wg.Done()
163+
resp, err := service.GetAnalyticsFilters(context.Background(), &GetAnalyticsFiltersRequest{})
164+
assert.NoError(t, err)
165+
assert.Equal(t, 1, resp.Count)
166+
}()
167+
}
168+
wg.Wait()
169+
}

0 commit comments

Comments
 (0)