mirror of
https://github.com/caddyserver/caddy.git
synced 2025-11-13 10:06:54 -05:00
add route tests
Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
This commit is contained in:
parent
d87760adab
commit
47ef562bbd
171
caddytest/spec/http/route/spec.hurl
Normal file
171
caddytest/spec/http/route/spec.hurl
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
# Configure Caddy with route directive
|
||||||
|
POST http://localhost:2019/load
|
||||||
|
Content-Type: text/caddyfile
|
||||||
|
```
|
||||||
|
{
|
||||||
|
skip_install_trust
|
||||||
|
http_port 9080
|
||||||
|
https_port 9443
|
||||||
|
local_certs
|
||||||
|
}
|
||||||
|
localhost {
|
||||||
|
route /api/* {
|
||||||
|
uri strip_prefix /api
|
||||||
|
respond "API: {uri}"
|
||||||
|
}
|
||||||
|
respond "Not API"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# route groups handlers and maintains order
|
||||||
|
GET https://localhost:9443/api/users
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "API: /users"
|
||||||
|
|
||||||
|
|
||||||
|
# route doesn't match non-matching paths
|
||||||
|
GET https://localhost:9443/other
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "Not API"
|
||||||
|
|
||||||
|
|
||||||
|
# Configure Caddy with nested routes
|
||||||
|
POST http://localhost:2019/load
|
||||||
|
Content-Type: text/caddyfile
|
||||||
|
```
|
||||||
|
{
|
||||||
|
skip_install_trust
|
||||||
|
http_port 9080
|
||||||
|
https_port 9443
|
||||||
|
local_certs
|
||||||
|
}
|
||||||
|
localhost {
|
||||||
|
route /api/* {
|
||||||
|
uri strip_prefix /api
|
||||||
|
route /v1/* {
|
||||||
|
uri strip_prefix /v1
|
||||||
|
respond "API v1: {uri}"
|
||||||
|
}
|
||||||
|
respond "API: {uri}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# nested routes process sequentially
|
||||||
|
GET https://localhost:9443/api/v1/users
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "API v1: /users"
|
||||||
|
|
||||||
|
|
||||||
|
# outer route processes when inner doesn't match
|
||||||
|
GET https://localhost:9443/api/users
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "API: /users"
|
||||||
|
|
||||||
|
|
||||||
|
# Configure Caddy with route and terminal handlers
|
||||||
|
POST http://localhost:2019/load
|
||||||
|
Content-Type: text/caddyfile
|
||||||
|
```
|
||||||
|
{
|
||||||
|
skip_install_trust
|
||||||
|
http_port 9080
|
||||||
|
https_port 9443
|
||||||
|
local_certs
|
||||||
|
}
|
||||||
|
localhost {
|
||||||
|
route {
|
||||||
|
header X-First "1"
|
||||||
|
respond "Response"
|
||||||
|
header X-Second "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# route stops at terminal handler (respond)
|
||||||
|
GET https://localhost:9443
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
header "X-First" == "1"
|
||||||
|
header "X-Second" not exists
|
||||||
|
|
||||||
|
|
||||||
|
# Configure Caddy with route preserving handler order
|
||||||
|
POST http://localhost:2019/load
|
||||||
|
Content-Type: text/caddyfile
|
||||||
|
```
|
||||||
|
{
|
||||||
|
skip_install_trust
|
||||||
|
http_port 9080
|
||||||
|
https_port 9443
|
||||||
|
local_certs
|
||||||
|
}
|
||||||
|
localhost {
|
||||||
|
route {
|
||||||
|
vars step1 "done"
|
||||||
|
vars step2 "done"
|
||||||
|
vars step3 "done"
|
||||||
|
respond "{vars.step1},{vars.step2},{vars.step3}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# route preserves exact handler order
|
||||||
|
GET https://localhost:9443
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "done,done,done"
|
||||||
|
|
||||||
|
|
||||||
|
# Configure Caddy with route and matchers
|
||||||
|
POST http://localhost:2019/load
|
||||||
|
Content-Type: text/caddyfile
|
||||||
|
```
|
||||||
|
{
|
||||||
|
skip_install_trust
|
||||||
|
http_port 9080
|
||||||
|
https_port 9443
|
||||||
|
local_certs
|
||||||
|
}
|
||||||
|
localhost {
|
||||||
|
route {
|
||||||
|
@api path /api/*
|
||||||
|
vars @api type "api"
|
||||||
|
vars type "other"
|
||||||
|
respond "{vars.type}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# route applies matchers in sequence
|
||||||
|
GET https://localhost:9443/api/test
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "other"
|
||||||
|
|
||||||
|
|
||||||
|
# route continues when matcher doesn't match
|
||||||
|
GET https://localhost:9443/test
|
||||||
|
[Options]
|
||||||
|
insecure: true
|
||||||
|
HTTP 200
|
||||||
|
[Asserts]
|
||||||
|
body == "other"
|
||||||
Loading…
x
Reference in New Issue
Block a user