You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ni...@apache.org on 2026/04/16 16:53:32 UTC

(apisix) branch feat/ai-fixture-system updated (db6e7004f -> 2a8dd4f89)

This is an automated email from the ASF dual-hosted git repository.

nic443 pushed a change to branch feat/ai-fixture-system
in repository https://gitbox.apache.org/repos/asf/apisix.git


    from db6e7004f fix: resolve CI lint issues
     add dc1b00e75 fix: restore wrong-auth 401 test, fix more_header typo
     new 2a8dd4f89 fix: resolve CI test failures in fixture-converted tests

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 t/fixtures/openai/unauthorized.json |  7 +++++++
 t/lib/server.lua                    | 37 +++++++++++++++++++++++++++++++++++--
 t/plugin/ai-proxy-multi.t           |  9 +++++----
 t/plugin/ai-proxy.t                 |  4 ++--
 t/plugin/ai-proxy2.t                |  4 ++--
 t/plugin/ai-rate-limiting.t         |  4 ++--
 6 files changed, 53 insertions(+), 12 deletions(-)
 create mode 100644 t/fixtures/openai/unauthorized.json


(apisix) 01/01: fix: resolve CI test failures in fixture-converted tests

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nic443 pushed a commit to branch feat/ai-fixture-system
in repository https://gitbox.apache.org/repos/asf/apisix.git

commit 2a8dd4f8916e078cf32b26bbf090577e6f7c3e68
Author: Nic <qi...@api7.ai>
AuthorDate: Fri Apr 17 00:53:05 2026 +0800

    fix: resolve CI test failures in fixture-converted tests
    
    - server.lua: v1_chat_completions now has auth-checking + message-echo
      fallback when X-AI-Fixture header is absent, restoring behavior needed
      by ai-request-rewrite tests (auth validation, message concatenation)
    - server.lua: _M.random() returns proper OpenAI JSON format instead of
      plain text, matching what ai-request-rewrite.t TEST 8 expects
    - ai-proxy.t TEST 12: updated assertion for new /random response format
    - ai-proxy2.t TEST 4,8: fixed response_body assertion to allow optional
      spaces after colons in JSON (fixture files are pretty-printed)
---
 t/lib/server.lua     | 37 +++++++++++++++++++++++++++++++++++--
 t/plugin/ai-proxy.t  |  4 ++--
 t/plugin/ai-proxy2.t |  4 ++--
 3 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/t/lib/server.lua b/t/lib/server.lua
index ce939463b..c9520fb70 100644
--- a/t/lib/server.lua
+++ b/t/lib/server.lua
@@ -762,7 +762,39 @@ local function ai_fixture_dispatch()
 end
 
 function _M.v1_chat_completions()
-    ai_fixture_dispatch()
+    -- fixture dispatch takes priority
+    if ngx.req.get_headers()["x-ai-fixture"] then
+        ai_fixture_dispatch()
+        return
+    end
+    -- fallback: auth-checking + message echo (for ai-request-rewrite tests)
+    local header_auth = ngx.req.get_headers()["authorization"]
+    local query_auth = ngx.req.get_uri_args()["api_key"]
+    if header_auth ~= "Bearer token" and query_auth ~= "apikey" then
+        ngx.status = 401
+        ngx.say("Unauthorized")
+        return
+    end
+    ngx.req.read_body()
+    local body = ngx.req.get_body_data()
+    local json = require("cjson.safe")
+    body = json.decode(body)
+    if not body or not body.messages or #body.messages < 1 then
+        ngx.status = 400
+        ngx.say([[{"error":"bad request"}]])
+        return
+    end
+    -- concatenate all message contents (for ai-request-rewrite prompt tests)
+    local parts = {}
+    for _, msg in ipairs(body.messages) do
+        if msg.content then
+            table.insert(parts, msg.content)
+        end
+    end
+    local content = table.concat(parts, " ")
+    ngx.say(json.encode({
+        choices = {{message = {content = content}}}
+    }))
 end
 
 function _M.v1_messages()
@@ -788,7 +820,8 @@ function _M.delay_v1_chat_completions()
 end
 
 function _M.random()
-    ngx.say("path override works")
+    ngx.header["Content-Type"] = "application/json"
+    ngx.print([[{"choices":[{"message":{"content":"return by random endpoint"}}]}]])
 end
 
 -- Health check probe endpoint for AI proxy tests.
diff --git a/t/plugin/ai-proxy.t b/t/plugin/ai-proxy.t
index d806c7f74..2359a5bbe 100644
--- a/t/plugin/ai-proxy.t
+++ b/t/plugin/ai-proxy.t
@@ -373,8 +373,8 @@ qr/chat\.completion/
 
         }
     }
---- response_body
-path override works
+--- response_body_like
+return by random endpoint
 
 
 
diff --git a/t/plugin/ai-proxy2.t b/t/plugin/ai-proxy2.t
index 9cb5b78d8..5e2614128 100644
--- a/t/plugin/ai-proxy2.t
+++ b/t/plugin/ai-proxy2.t
@@ -147,7 +147,7 @@ POST /anything
 X-AI-Fixture: openai/chat-basic.json
 --- error_code: 200
 --- response_body eval
-qr/"content":"1 \+ 1 = 2\."/
+qr/"content"\s*:\s*"1 \+ 1 = 2\."/
 
 
 
@@ -247,4 +247,4 @@ POST /anything
 X-AI-Fixture: openai/chat-basic.json
 --- error_code: 200
 --- response_body eval
-qr/"content":"1 \+ 1 = 2\."/
+qr/"content"\s*:\s*"1 \+ 1 = 2\."/