@@ -14,6 +14,7 @@ import (
14
14
"github.com/stretchr/testify/require"
15
15
16
16
"go.opentelemetry.io/otel/attribute"
17
+ "go.opentelemetry.io/otel/codes"
17
18
)
18
19
19
20
type testServerReq struct {
@@ -65,3 +66,90 @@ func testTraceRequest(t *testing.T, serv HTTPServer, want func(testServerReq) []
65
66
66
67
assert .ElementsMatch (t , want (srvReq ), serv .RequestTraceAttrs ("" , req ))
67
68
}
69
+
70
+ func TestHTTPClientStatus (t * testing.T ) {
71
+ tests := []struct {
72
+ code int
73
+ stat codes.Code
74
+ msg bool
75
+ }{
76
+ {0 , codes .Error , true },
77
+ {http .StatusContinue , codes .Unset , false },
78
+ {http .StatusSwitchingProtocols , codes .Unset , false },
79
+ {http .StatusProcessing , codes .Unset , false },
80
+ {http .StatusEarlyHints , codes .Unset , false },
81
+ {http .StatusOK , codes .Unset , false },
82
+ {http .StatusCreated , codes .Unset , false },
83
+ {http .StatusAccepted , codes .Unset , false },
84
+ {http .StatusNonAuthoritativeInfo , codes .Unset , false },
85
+ {http .StatusNoContent , codes .Unset , false },
86
+ {http .StatusResetContent , codes .Unset , false },
87
+ {http .StatusPartialContent , codes .Unset , false },
88
+ {http .StatusMultiStatus , codes .Unset , false },
89
+ {http .StatusAlreadyReported , codes .Unset , false },
90
+ {http .StatusIMUsed , codes .Unset , false },
91
+ {http .StatusMultipleChoices , codes .Unset , false },
92
+ {http .StatusMovedPermanently , codes .Unset , false },
93
+ {http .StatusFound , codes .Unset , false },
94
+ {http .StatusSeeOther , codes .Unset , false },
95
+ {http .StatusNotModified , codes .Unset , false },
96
+ {http .StatusUseProxy , codes .Unset , false },
97
+ {306 , codes .Unset , false },
98
+ {http .StatusTemporaryRedirect , codes .Unset , false },
99
+ {http .StatusPermanentRedirect , codes .Unset , false },
100
+ {http .StatusBadRequest , codes .Error , false },
101
+ {http .StatusUnauthorized , codes .Error , false },
102
+ {http .StatusPaymentRequired , codes .Error , false },
103
+ {http .StatusForbidden , codes .Error , false },
104
+ {http .StatusNotFound , codes .Error , false },
105
+ {http .StatusMethodNotAllowed , codes .Error , false },
106
+ {http .StatusNotAcceptable , codes .Error , false },
107
+ {http .StatusProxyAuthRequired , codes .Error , false },
108
+ {http .StatusRequestTimeout , codes .Error , false },
109
+ {http .StatusConflict , codes .Error , false },
110
+ {http .StatusGone , codes .Error , false },
111
+ {http .StatusLengthRequired , codes .Error , false },
112
+ {http .StatusPreconditionFailed , codes .Error , false },
113
+ {http .StatusRequestEntityTooLarge , codes .Error , false },
114
+ {http .StatusRequestURITooLong , codes .Error , false },
115
+ {http .StatusUnsupportedMediaType , codes .Error , false },
116
+ {http .StatusRequestedRangeNotSatisfiable , codes .Error , false },
117
+ {http .StatusExpectationFailed , codes .Error , false },
118
+ {http .StatusTeapot , codes .Error , false },
119
+ {http .StatusMisdirectedRequest , codes .Error , false },
120
+ {http .StatusUnprocessableEntity , codes .Error , false },
121
+ {http .StatusLocked , codes .Error , false },
122
+ {http .StatusFailedDependency , codes .Error , false },
123
+ {http .StatusTooEarly , codes .Error , false },
124
+ {http .StatusUpgradeRequired , codes .Error , false },
125
+ {http .StatusPreconditionRequired , codes .Error , false },
126
+ {http .StatusTooManyRequests , codes .Error , false },
127
+ {http .StatusRequestHeaderFieldsTooLarge , codes .Error , false },
128
+ {http .StatusUnavailableForLegalReasons , codes .Error , false },
129
+ {499 , codes .Error , false },
130
+ {http .StatusInternalServerError , codes .Error , false },
131
+ {http .StatusNotImplemented , codes .Error , false },
132
+ {http .StatusBadGateway , codes .Error , false },
133
+ {http .StatusServiceUnavailable , codes .Error , false },
134
+ {http .StatusGatewayTimeout , codes .Error , false },
135
+ {http .StatusHTTPVersionNotSupported , codes .Error , false },
136
+ {http .StatusVariantAlsoNegotiates , codes .Error , false },
137
+ {http .StatusInsufficientStorage , codes .Error , false },
138
+ {http .StatusLoopDetected , codes .Error , false },
139
+ {http .StatusNotExtended , codes .Error , false },
140
+ {http .StatusNetworkAuthenticationRequired , codes .Error , false },
141
+ {600 , codes .Error , true },
142
+ }
143
+
144
+ for _ , test := range tests {
145
+ t .Run (strconv .Itoa (test .code ), func (t * testing.T ) {
146
+ c , msg := HTTPClient {}.Status (test .code )
147
+ assert .Equal (t , test .stat , c )
148
+ if test .msg && msg == "" {
149
+ t .Errorf ("expected non-empty message for %d" , test .code )
150
+ } else if ! test .msg && msg != "" {
151
+ t .Errorf ("expected empty message for %d, got: %s" , test .code , msg )
152
+ }
153
+ })
154
+ }
155
+ }
0 commit comments