дȫÏîĿÉó²éÎÊÌⲢ·¢²¼ v1.1.9
¸ÄÓñ¾»ú¶ÀÁ¢ CA£¬»ָ´ CLI TLS УÑ飬±£»¤ƾ¾ÝÓëÅäÖò¢·¢±£´档 д Cursor Êý¾ݡ¢»Ự·¾¶¡¢´úÀíÉúÃüÖÜÆڡ¢ģÐÍÇëÇóÓë Skills Îļþ²Ù×÷¡£ Ϊ¶ÀÁ¢ Tab ·þÎñÔö¼ӿͻ§¶˼øȨ£¬Éý¼¶ÒÀÀµÓ빤¾ßÁ´£¬ÍêÉƷ¢²¼ԪÐÅϢͬ²½¡£ Ñé֤£ºÁ½¸ö Go ģ¿éµIJâÊÔ/vet¡¢¹ؼüģ¿é race¡¢ǰ¶˲âÊÔ/Éú²ú¹¹½¨/Éó¼ơ¢ Go ¿ɴï©¶´ɨÃèÓë macOS/Linux ¿ÉÐÐģ¿齻²æ±àÒë¾ùͨ¹ý¡£ Windows ¸ôÀëÆô¶¯ͨ¹ý£»δÍê³ɵĵã»÷ðÑ̺ÍԭÉúƽ̨Ñé֤¼ûÉó²鱨¸档
This commit is contained in:
65
internal/backend/tab_forward_test.go
Normal file
65
internal/backend/tab_forward_test.go
Normal file
@@ -0,0 +1,65 @@
|
||||
package backend
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"cursor/internal/backend/server"
|
||||
serverconfig "cursor/internal/backend/server/config"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTabCallerTokenAndBasePathFollowCurrentConfiguration(t *testing.T) {
|
||||
expected := "client-first"
|
||||
calls := 0
|
||||
tab := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
calls++
|
||||
if r.Header.Get("Authorization") != "Bearer "+expected {
|
||||
t.Error("configured caller token not forwarded")
|
||||
}
|
||||
if r.URL.Path != "/base/aiserver.v1.AiService/CppConfig" {
|
||||
t.Error("base path lost", r.URL.Path)
|
||||
}
|
||||
w.WriteHeader(204)
|
||||
}))
|
||||
defer tab.Close()
|
||||
store := serverconfig.NewStore(filepath.Join(t.TempDir(), "config.yaml"), "")
|
||||
cfg := serverconfig.DefaultConfig()
|
||||
cfg.TabServerBaseURL = tab.URL + "/base"
|
||||
cfg.TabServerToken = expected
|
||||
if _, err := store.Save(nil, cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
host, err := NewHost(store, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
local := httptest.NewServer(host.mux)
|
||||
defer local.Close()
|
||||
call := func() {
|
||||
r, _ := http.NewRequest(http.MethodPost, local.URL+"/aiserver.v1.AiService/CppConfig", bytes.NewReader(nil))
|
||||
r.Header.Set("Content-Type", "application/proto")
|
||||
r.Header.Set(server.HeaderServerUpstreamURL, "https://api2.cursor.sh/aiserver.v1.AiService/CppConfig")
|
||||
r.Header.Set("Authorization", "Bearer unrelated-cursor-token")
|
||||
response, err := local.Client().Do(r)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
response.Body.Close()
|
||||
if response.StatusCode != 204 {
|
||||
t.Fatal(response.StatusCode)
|
||||
}
|
||||
}
|
||||
call()
|
||||
cfg = host.ConfigManager().Current()
|
||||
expected = "client-second"
|
||||
cfg.TabServerToken = expected
|
||||
if _, err = host.SaveConfig(nil, cfg); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
call()
|
||||
if calls != 2 {
|
||||
t.Fatal("Tab requests did not reach configured server")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user