mirror of
https://github.com/adnanh/webhook.git
synced 2025-10-04 05:31:03 +00:00
Add testing framework for main webhook app
This commit adds a testing framework modeled after the godoc tests. It builds webhook in a temporary directory, runs it with the supplied `hooks_test.json` configuration, and then tests different payloads. I use `/bin/echo` for the test executable, so I've added build tags to exclude Windows. Three minor (I hope) changes in functionality: - I ended up moving everything from `init()` to `main()` because `init()` was firing while trying to build the tests, and it was dying since `hooks.json` didn't exist. I'm still not 100% sure `init()` was firing, but I didn't see any real need for anything to be in `init()` in the first place. - make sure logger is using `os.Stderr` - don't send `http.StatusBadRequest` when the Hook rules don't match. "Bad Request" is used to identify malformed requests. The request was properly formed and processed, so I think we should send back `http.StatusOK`. For example, if I setup a webhook rule to only execute when commits are made to the `master` branch, we shouldn't send back `http.StatusBadRequest` when we ingest a payload for the `development` branch. The test payloads are pretty verbose and could probably be shortened, but I kind of like having an example payload for each service. We can pare them down if we want to do more focused, minimalist testing.
This commit is contained in:
parent
6da00561bf
commit
802f3f572c
3 changed files with 505 additions and 5 deletions
135
hooks_test.json
Normal file
135
hooks_test.json
Normal file
|
@ -0,0 +1,135 @@
|
|||
[
|
||||
{
|
||||
"id": "github",
|
||||
"execute-command": "/bin/echo",
|
||||
"command-working-directory": "/",
|
||||
"include-command-output-in-response": true,
|
||||
"pass-arguments-to-command":
|
||||
[
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "head_commit.id"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "pusher.name"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "pusher.email"
|
||||
}
|
||||
],
|
||||
"trigger-rule":
|
||||
{
|
||||
"and":
|
||||
[
|
||||
{
|
||||
"match":
|
||||
{
|
||||
"type": "payload-hash-sha1",
|
||||
"secret": "mysecret",
|
||||
"parameter":
|
||||
{
|
||||
"source": "header",
|
||||
"name": "X-Hub-Signature"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"match":
|
||||
{
|
||||
"type": "value",
|
||||
"value": "refs/heads/master",
|
||||
"parameter":
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "ref"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "bitbucket",
|
||||
"execute-command": "/bin/echo",
|
||||
"command-working-directory": "/",
|
||||
"include-command-output-in-response": true,
|
||||
"response-message": "success",
|
||||
"parse-parameters-as-json": [
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "payload"
|
||||
}
|
||||
],
|
||||
"trigger-rule": {
|
||||
"and": [
|
||||
{
|
||||
"match": {
|
||||
"type": "value",
|
||||
"parameter": {
|
||||
"source": "payload",
|
||||
"name": "payload.canon_url"
|
||||
},
|
||||
"value": "https://bitbucket.org"
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"type": "value",
|
||||
"parameter": {
|
||||
"source": "payload",
|
||||
"name": "payload.repository.absolute_url"
|
||||
},
|
||||
"value": "/webhook/testing/"
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": {
|
||||
"type": "value",
|
||||
"parameter": {
|
||||
"source": "payload",
|
||||
"name": "payload.commits.0.branch"
|
||||
},
|
||||
"value": "master"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "gitlab",
|
||||
"execute-command": "/bin/echo",
|
||||
"command-working-directory": "/",
|
||||
"response-message": "success",
|
||||
"include-command-output-in-response": true,
|
||||
"pass-arguments-to-command":
|
||||
[
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "commits.0.id"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "user_name"
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "user_email"
|
||||
}
|
||||
],
|
||||
"trigger-rule":
|
||||
{
|
||||
"match":
|
||||
{
|
||||
"type": "value",
|
||||
"value": "refs/heads/master",
|
||||
"parameter":
|
||||
{
|
||||
"source": "payload",
|
||||
"name": "ref"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
Loading…
Add table
Add a link
Reference in a new issue