From 81270725539980d202829528054f3fda346970db Mon Sep 17 00:00:00 2001 From: Urjit Singh Bhatia Date: Thu, 9 Nov 2023 00:20:39 -0800 Subject: [PATCH] fix test server setup: (#549) * fix test server setup: - go map access is not deterministic - this can lead to a route: /foo/bar/1 matching /foo/bar before matching /foo/bar/1 if the map iteration go through /foo/bar first since the regex match wasn't bound to start and end anchors - registering handlers now converts * in routes to .* for proper regex matching - test server route handling now tries to fully match the handler route * add missing /v1 prefix to fine-tuning job cancel test server handler --- fine_tuning_job_test.go | 2 +- internal/test/server.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fine_tuning_job_test.go b/fine_tuning_job_test.go index c892ef7..d2fbcd4 100644 --- a/fine_tuning_job_test.go +++ b/fine_tuning_job_test.go @@ -42,7 +42,7 @@ func TestFineTuningJob(t *testing.T) { ) server.RegisterHandler( - "/fine_tuning/jobs/"+testFineTuninigJobID+"/cancel", + "/v1/fine_tuning/jobs/"+testFineTuninigJobID+"/cancel", func(w http.ResponseWriter, _ *http.Request) { resBytes, _ := json.Marshal(openai.FineTuningJob{}) fmt.Fprintln(w, string(resBytes)) diff --git a/internal/test/server.go b/internal/test/server.go index 3813ff8..127d4c1 100644 --- a/internal/test/server.go +++ b/internal/test/server.go @@ -5,6 +5,7 @@ import ( "net/http" "net/http/httptest" "regexp" + "strings" ) const testAPI = "this-is-my-secure-token-do-not-steal!!" @@ -23,13 +24,16 @@ func NewTestServer() *ServerTest { } func (ts *ServerTest) RegisterHandler(path string, handler handler) { + // to make the registered paths friendlier to a regex match in the route handler + // in OpenAITestServer + path = strings.ReplaceAll(path, "*", ".*") ts.handlers[path] = handler } // OpenAITestServer Creates a mocked OpenAI server which can pretend to handle requests during testing. func (ts *ServerTest) OpenAITestServer() *httptest.Server { return httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - log.Printf("received request at path %q\n", r.URL.Path) + log.Printf("received a %s request at path %q\n", r.Method, r.URL.Path) // check auth if r.Header.Get("Authorization") != "Bearer "+GetTestToken() && r.Header.Get("api-key") != GetTestToken() { @@ -38,8 +42,10 @@ func (ts *ServerTest) OpenAITestServer() *httptest.Server { } // Handle /path/* routes. + // Note: the * is converted to a .* in register handler for proper regex handling for route, handler := range ts.handlers { - pattern, _ := regexp.Compile(route) + // Adding ^ and $ to make path matching deterministic since go map iteration isn't ordered + pattern, _ := regexp.Compile("^" + route + "$") if pattern.MatchString(r.URL.Path) { handler(w, r) return