| 182 | } |
| 183 | |
| 184 | func Test_Settings_Validate(t *testing.T) { |
| 185 | t.Parallel() |
| 186 | |
| 187 | someHandler := http.NewServeMux() |
| 188 | someLogger := &testLogger{} |
| 189 | |
| 190 | testCases := map[string]struct { |
| 191 | settings Settings |
| 192 | errWrapped error |
| 193 | errMessage string |
| 194 | }{ |
| 195 | "bad_address": { |
| 196 | settings: Settings{ |
| 197 | Address: "address:notanint", |
| 198 | }, |
| 199 | errWrapped: validate.ErrPortNotAnInteger, |
| 200 | errMessage: "port value is not an integer: notanint", |
| 201 | }, |
| 202 | "nil handler": { |
| 203 | settings: Settings{ |
| 204 | Address: ":8000", |
| 205 | }, |
| 206 | errWrapped: ErrHandlerIsNotSet, |
| 207 | errMessage: ErrHandlerIsNotSet.Error(), |
| 208 | }, |
| 209 | "nil logger": { |
| 210 | settings: Settings{ |
| 211 | Address: ":8000", |
| 212 | Handler: someHandler, |
| 213 | }, |
| 214 | errWrapped: ErrLoggerIsNotSet, |
| 215 | errMessage: ErrLoggerIsNotSet.Error(), |
| 216 | }, |
| 217 | "read header timeout too small": { |
| 218 | settings: Settings{ |
| 219 | Address: ":8000", |
| 220 | Handler: someHandler, |
| 221 | Logger: someLogger, |
| 222 | ReadHeaderTimeout: time.Nanosecond, |
| 223 | }, |
| 224 | errWrapped: ErrReadHeaderTimeoutTooSmall, |
| 225 | errMessage: "read header timeout is too small: 1ns must be at least 1ms", |
| 226 | }, |
| 227 | "read timeout too small": { |
| 228 | settings: Settings{ |
| 229 | Address: ":8000", |
| 230 | Handler: someHandler, |
| 231 | Logger: someLogger, |
| 232 | ReadHeaderTimeout: time.Millisecond, |
| 233 | ReadTimeout: time.Nanosecond, |
| 234 | }, |
| 235 | errWrapped: ErrReadTimeoutTooSmall, |
| 236 | errMessage: "read timeout is too small: 1ns must be at least 1ms", |
| 237 | }, |
| 238 | "shutdown timeout too small": { |
| 239 | settings: Settings{ |
| 240 | Address: ":8000", |
| 241 | Handler: someHandler, |