mirror of
https://github.com/adnanh/webhook.git
synced 2025-05-31 09:42:28 +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
|
@ -46,7 +46,7 @@ var (
|
|||
hooks hook.Hooks
|
||||
)
|
||||
|
||||
func init() {
|
||||
func main() {
|
||||
hooks = hook.Hooks{}
|
||||
|
||||
flag.Parse()
|
||||
|
@ -87,9 +87,7 @@ func init() {
|
|||
log.Printf("\t> %s\n", hook.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
if *hotReload {
|
||||
// set up file watcher
|
||||
log.Printf("setting up file watcher for %s\n", *hooksFilePath)
|
||||
|
@ -112,7 +110,7 @@ func main() {
|
|||
}
|
||||
|
||||
l := negroni.NewLogger()
|
||||
l.Logger = log.New(os.Stdout, "[webhook] ", log.Ldate|log.Ltime)
|
||||
l.Logger = log.New(os.Stderr, "[webhook] ", log.Ldate|log.Ltime)
|
||||
|
||||
negroniRecovery := &negroni.Recovery{
|
||||
Logger: l.Logger,
|
||||
|
@ -233,7 +231,6 @@ func hookHandler(w http.ResponseWriter, r *http.Request) {
|
|||
// if none of the hooks got triggered
|
||||
log.Printf("%s got matched (%d time(s)), but didn't get triggered because the trigger rules were not satisfied\n", matchedHooks[0].ID, len(matchedHooks))
|
||||
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
fmt.Fprintf(w, "Hook rules were not satisfied.")
|
||||
} else {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue