Skip to content

Commit 67aef19

Browse files
authored
Fix OpenAI or Azure returns an undefined error message return (#283)
* Fix OpenAI or Azure returns an undefined error message return * Fix: OpenAI or Azure returns an undefined error message return #280 * Fix: OpenAI or Azure returns an undefined error message return #280 * Fix: OpenAI or Azure returns an undefined error message return #280 Handle long line * Fix: OpenAI or Azure returns an undefined error message return #280 Add unit test ErrorResponse nil pointer check * Fix: OpenAI or Azure returns an undefined error message return #280 Add unit test ErrorResponse nil pointer check --------- Co-authored-by: zhangxm <[email protected]>
1 parent cacd976 commit 67aef19

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

client.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ func (c *Client) handleErrorResp(resp *http.Response) error {
148148
HTTPStatusCode: resp.StatusCode,
149149
Err: err,
150150
}
151+
if errRes.Error != nil {
152+
reqErr.Err = errRes.Error
153+
}
151154
return fmt.Errorf("error, %w", &reqErr)
152155
}
153156
errRes.Error.HTTPStatusCode = resp.StatusCode

client_test.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package openai //nolint:testpackage // testing private field
22

33
import (
44
"bytes"
5+
"fmt"
56
"io"
7+
"net/http"
68
"testing"
79
)
810

@@ -57,3 +59,81 @@ func TestDecodeResponse(t *testing.T) {
5759
})
5860
}
5961
}
62+
63+
func TestHandleErrorResp(t *testing.T) {
64+
// var errRes *ErrorResponse
65+
var errRes ErrorResponse
66+
var reqErr RequestError
67+
t.Log(errRes, errRes.Error)
68+
if errRes.Error != nil {
69+
reqErr.Err = errRes.Error
70+
}
71+
t.Log(fmt.Errorf("error, %w", &reqErr))
72+
t.Log(errRes.Error, "nil pointer check Pass")
73+
74+
const mockToken = "mock token"
75+
client := NewClient(mockToken)
76+
77+
testCases := []struct {
78+
name string
79+
httpCode int
80+
body io.Reader
81+
expected string
82+
}{
83+
{
84+
name: "401 Invalid Authentication",
85+
httpCode: http.StatusUnauthorized,
86+
body: bytes.NewReader([]byte(
87+
`{
88+
"error":{
89+
"message":"You didn't provide an API key. ....",
90+
"type":"invalid_request_error",
91+
"param":null,
92+
"code":null
93+
}
94+
}`,
95+
)),
96+
expected: "error, status code: 401, message: You didn't provide an API key. ....",
97+
},
98+
{
99+
name: "401 Azure Access Denied",
100+
httpCode: http.StatusUnauthorized,
101+
body: bytes.NewReader([]byte(
102+
`{
103+
"error":{
104+
"code":"AccessDenied",
105+
"message":"Access denied due to Virtual Network/Firewall rules."
106+
}
107+
}`,
108+
)),
109+
expected: "error, Access denied due to Virtual Network/Firewall rules.",
110+
},
111+
{
112+
name: "503 Model Overloaded",
113+
httpCode: http.StatusServiceUnavailable,
114+
body: bytes.NewReader([]byte(`
115+
{
116+
"error":{
117+
"message":"That model...",
118+
"type":"server_error",
119+
"param":null,
120+
"code":null
121+
}
122+
}`)),
123+
expected: "error, status code: 503, message: That model...",
124+
},
125+
}
126+
127+
for _, tc := range testCases {
128+
t.Run(tc.name, func(t *testing.T) {
129+
testCase := &http.Response{}
130+
testCase.StatusCode = tc.httpCode
131+
testCase.Body = io.NopCloser(tc.body)
132+
err := client.handleErrorResp(testCase)
133+
if err.Error() != tc.expected {
134+
t.Errorf("Unexpected error: %v , expected: %s", err, tc.expected)
135+
t.Fail()
136+
}
137+
})
138+
}
139+
}

0 commit comments

Comments
 (0)