| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package agentserver
- import (
- "net/url"
- "testing"
- )
- func TestMatchRoute(t *testing.T) {
- sid := "ses_01jabc"
- cases := []struct {
- method, path, query string
- ok bool
- owner OwnerKind
- id string
- action Action
- }{
- {"GET", "/profiles", "", true, OwnerNone, "", ActionPassthrough},
- {"GET", "/providers", "", true, OwnerNone, "", ActionPassthrough},
- {"GET", "/sessions/" + sid, "", true, OwnerSession, sid, ActionSessionDetail},
- {"PATCH", "/sessions/" + sid, "", true, OwnerSession, sid, ActionSessionPatch},
- {"GET", "/sessions/" + sid + "/events", "after=3", true, OwnerSession, sid, ActionEvents},
- {"GET", "/sessions/" + sid + "/stream", "", true, OwnerSession, sid, ActionStream},
- {"GET", "/sessions/" + sid + "/files", "", true, OwnerSession, sid, ActionListFiles},
- {"POST", "/sessions/" + sid + "/files", "", true, OwnerSession, sid, ActionUploadFiles},
- {"POST", "/sessions/" + sid + "/messages", "", true, OwnerSession, sid, ActionSendMessage},
- {"GET", "/runs/run_01x", "", true, OwnerRun, "run_01x", ActionPassthrough},
- {"POST", "/runs/run_01x/interrupt", "", true, OwnerRun, "run_01x", ActionPassthrough},
- {"GET", "/interactions", "sessionId=" + sid, true, OwnerQuerySession, sid, ActionInteractions},
- {"POST", "/interactions/itx_01x", "", true, OwnerInteraction, "itx_01x", ActionPassthrough},
- {"GET", "/files/file_01x", "inline=1", true, OwnerFile, "file_01x", ActionPassthrough},
- // 不在白名单
- {"GET", "/sessions", "", false, 0, "", 0},
- {"POST", "/sessions", "", false, 0, "", 0},
- {"DELETE", "/sessions/" + sid, "", false, 0, "", 0},
- {"GET", "/usage", "days=30", false, 0, "", 0},
- {"POST", "/browser-tokens", "", false, 0, "", 0},
- {"GET", "/interactions", "", false, 0, "", 0},
- {"GET", "/interactions", "sessionId=../x", false, 0, "", 0},
- {"POST", "/runs/run_01x", "", false, 0, "", 0},
- {"GET", "/sessions/" + sid + "/stream/x", "", false, 0, "", 0},
- {"GET", "/sessions/run_01x", "", false, 0, "", 0}, // 前缀不符
- {"GET", "/files/file_..%2f", "", false, 0, "", 0}, // 非法字符
- {"GET", "/sessions/ses_", "", false, 0, "", 0}, // 只有前缀
- {"PUT", "/sessions/" + sid, "", false, 0, "", 0},
- }
- for _, c := range cases {
- q, _ := url.ParseQuery(c.query)
- r, ok := MatchRoute(c.method, c.path, q)
- if ok != c.ok {
- t.Errorf("%s %s?%s: ok=%v, want %v", c.method, c.path, c.query, ok, c.ok)
- continue
- }
- if !ok {
- continue
- }
- if r.Owner != c.owner || r.Id != c.id || r.Action != c.action {
- t.Errorf("%s %s: got %+v, want owner=%v id=%s action=%v", c.method, c.path, r, c.owner, c.id, c.action)
- }
- }
- }
- func TestResourceKindOf(t *testing.T) {
- if ResourceKindOf("run_1") != OwnerRun || ResourceKindOf("itx_1") != OwnerInteraction || ResourceKindOf("file_1") != OwnerFile || ResourceKindOf("ses_1") != OwnerNone {
- t.Fatal("ResourceKindOf 前缀判断错误")
- }
- }
|