@@ -2,7 +2,9 @@ package openai //nolint:testpackage // testing private field
2
2
3
3
import (
4
4
"bytes"
5
+ "fmt"
5
6
"io"
7
+ "net/http"
6
8
"testing"
7
9
)
8
10
@@ -57,3 +59,81 @@ func TestDecodeResponse(t *testing.T) {
57
59
})
58
60
}
59
61
}
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