https://github.com/logica0419/isugata
HTTP response validator for ISUCON benchmarker
https://github.com/logica0419/isugata
go http-response isucon validator
Last synced: 3 months ago
JSON representation
HTTP response validator for ISUCON benchmarker
- Host: GitHub
- URL: https://github.com/logica0419/isugata
- Owner: logica0419
- License: mit
- Created: 2023-12-21T14:55:45.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-05T18:48:55.000Z (over 1 year ago)
- Last Synced: 2025-03-19T22:14:17.958Z (7 months ago)
- Topics: go, http-response, isucon, validator
- Language: Go
- Homepage:
- Size: 22.5 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# isugata
[](https://github.com/logica0419/isugata/actions/workflows/ci.yml) [](https://pkg.go.dev/github.com/logica0419/isugata) [](https://github.com/logica0419/isugata/blob/main/LICENSE)
HTTP response validator for ISUCON benchmarker with Functional Option Pattern
## Usage
An executable example is in [example/main.go](./example/main.go).
- Status Code
```go
err := isugata.Validate(res,
isugata.WithStatusCode(http.StatusOK),
)
```- Content Type
```go
err := isugata.Validate(res,
isugata.WithContentType("application/json"),
)
```- JSON Body Validation
```go
type user struct {
ID int `json:"id"`
Name string `json:"name"`
}err := isugata.Validate(res,
isugata.WithJSONValidation[user](
isugata.JSONEquals[user](
user{
ID: 1,
Name: "test",
},
),
),
)
```- JSON Array Body Validation
```go
type user struct {
ID int `json:"id"`
Name string `json:"name"`
}err := isugata.Validate(res,
isugata.WithJSONArrayValidation[user](
isugata.JSONArrayLengthEquals[user](2),
isugata.JSONArrayValidateOrder[user, int](
func(u user) int { return u.ID },
isugata.Asc,
),
isugata.JSONArrayValidateEach[user](
func(body user) error {
if body.Name != fmt.Sprintf("test%d", body.ID) {
return fmt.Errorf("expected: test%d, actual: %s", body.ID, body.Name)
}
return nil
},
),
),
)
```