@@ -121,6 +121,138 @@ func TestIsRetryableError(t *testing.T) {
121121 }
122122}
123123
124+ func TestIsAuthenticationError (t * testing.T ) {
125+ t .Parallel ()
126+ tests := []struct {
127+ name string
128+ err error
129+ want bool
130+ }{{
131+ name : "unauthorized error (401)" ,
132+ err : & linodego.Error {
133+ Response : nil ,
134+ Code : http .StatusUnauthorized ,
135+ Message : "Invalid Token" ,
136+ },
137+ want : true ,
138+ }, {
139+ name : "forbidden error (403)" ,
140+ err : & linodego.Error {
141+ Response : nil ,
142+ Code : http .StatusForbidden ,
143+ Message : "Forbidden" ,
144+ },
145+ want : true ,
146+ }, {
147+ name : "bad request error (400)" ,
148+ err : & linodego.Error {
149+ Response : nil ,
150+ Code : http .StatusBadRequest ,
151+ Message : "bad request" ,
152+ },
153+ want : false ,
154+ }, {
155+ name : "not found error (404)" ,
156+ err : & linodego.Error {
157+ Response : nil ,
158+ Code : http .StatusNotFound ,
159+ Message : "not found" ,
160+ },
161+ want : false ,
162+ }, {
163+ name : "internal server error (500)" ,
164+ err : & linodego.Error {
165+ Response : nil ,
166+ Code : http .StatusInternalServerError ,
167+ Message : "internal error" ,
168+ },
169+ want : false ,
170+ }, {
171+ name : "non-Linode error" ,
172+ err : errors .New ("random error" ),
173+ want : false ,
174+ }}
175+ for _ , tt := range tests {
176+ testcase := tt
177+ t .Run (testcase .name , func (t * testing.T ) {
178+ t .Parallel ()
179+ if testcase .want != IsAuthenticationError (testcase .err ) {
180+ t .Errorf ("IsAuthenticationError() = %v, want %v" , IsAuthenticationError (testcase .err ), testcase .want )
181+ }
182+ })
183+ }
184+ }
185+
186+ func TestIsTerminalError (t * testing.T ) {
187+ t .Parallel ()
188+ tests := []struct {
189+ name string
190+ err error
191+ want bool
192+ }{{
193+ name : "bad request error (400)" ,
194+ err : & linodego.Error {
195+ Response : nil ,
196+ Code : http .StatusBadRequest ,
197+ Message : "bad request" ,
198+ },
199+ want : true ,
200+ }, {
201+ name : "unauthorized error (401)" ,
202+ err : & linodego.Error {
203+ Response : nil ,
204+ Code : http .StatusUnauthorized ,
205+ Message : "Invalid Token" ,
206+ },
207+ want : true ,
208+ }, {
209+ name : "forbidden error (403)" ,
210+ err : & linodego.Error {
211+ Response : nil ,
212+ Code : http .StatusForbidden ,
213+ Message : "Forbidden" ,
214+ },
215+ want : true ,
216+ }, {
217+ name : "not found error (404)" ,
218+ err : & linodego.Error {
219+ Response : nil ,
220+ Code : http .StatusNotFound ,
221+ Message : "not found" ,
222+ },
223+ want : true ,
224+ }, {
225+ name : "internal server error (500)" ,
226+ err : & linodego.Error {
227+ Response : nil ,
228+ Code : http .StatusInternalServerError ,
229+ Message : "internal error" ,
230+ },
231+ want : false ,
232+ }, {
233+ name : "too many requests (429)" ,
234+ err : & linodego.Error {
235+ Response : nil ,
236+ Code : http .StatusTooManyRequests ,
237+ Message : "rate limited" ,
238+ },
239+ want : false ,
240+ }, {
241+ name : "non-Linode error" ,
242+ err : errors .New ("random error" ),
243+ want : false ,
244+ }}
245+ for _ , tt := range tests {
246+ testcase := tt
247+ t .Run (testcase .name , func (t * testing.T ) {
248+ t .Parallel ()
249+ if testcase .want != IsTerminalError (testcase .err ) {
250+ t .Errorf ("IsTerminalError() = %v, want %v" , IsTerminalError (testcase .err ), testcase .want )
251+ }
252+ })
253+ }
254+ }
255+
124256func TestGetInstanceID (t * testing.T ) {
125257 t .Parallel ()
126258 tests := []struct {
0 commit comments