You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

deliver_test.go 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package webhook
  4. import (
  5. "context"
  6. "net/http"
  7. "net/http/httptest"
  8. "net/url"
  9. "testing"
  10. "time"
  11. "code.gitea.io/gitea/models/db"
  12. "code.gitea.io/gitea/models/unittest"
  13. webhook_model "code.gitea.io/gitea/models/webhook"
  14. "code.gitea.io/gitea/modules/setting"
  15. api "code.gitea.io/gitea/modules/structs"
  16. webhook_module "code.gitea.io/gitea/modules/webhook"
  17. "github.com/stretchr/testify/assert"
  18. )
  19. func TestWebhookProxy(t *testing.T) {
  20. setting.Webhook.ProxyURL = "http://localhost:8080"
  21. setting.Webhook.ProxyURLFixed, _ = url.Parse(setting.Webhook.ProxyURL)
  22. setting.Webhook.ProxyHosts = []string{"*.discordapp.com", "discordapp.com"}
  23. kases := map[string]string{
  24. "https://discordapp.com/api/webhooks/xxxxxxxxx/xxxxxxxxxxxxxxxxxxx": "http://localhost:8080",
  25. "http://s.discordapp.com/assets/xxxxxx": "http://localhost:8080",
  26. "http://github.com/a/b": "",
  27. }
  28. for reqURL, proxyURL := range kases {
  29. req, err := http.NewRequest("POST", reqURL, nil)
  30. assert.NoError(t, err)
  31. u, err := webhookProxy()(req)
  32. assert.NoError(t, err)
  33. if proxyURL == "" {
  34. assert.Nil(t, u)
  35. } else {
  36. assert.EqualValues(t, proxyURL, u.String())
  37. }
  38. }
  39. }
  40. func TestWebhookDeliverAuthorizationHeader(t *testing.T) {
  41. assert.NoError(t, unittest.PrepareTestDatabase())
  42. done := make(chan struct{}, 1)
  43. s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  44. assert.Equal(t, "/webhook", r.URL.Path)
  45. assert.Equal(t, "Bearer s3cr3t-t0ken", r.Header.Get("Authorization"))
  46. w.WriteHeader(200)
  47. done <- struct{}{}
  48. }))
  49. t.Cleanup(s.Close)
  50. hook := &webhook_model.Webhook{
  51. RepoID: 3,
  52. URL: s.URL + "/webhook",
  53. ContentType: webhook_model.ContentTypeJSON,
  54. IsActive: true,
  55. Type: webhook_module.GITEA,
  56. }
  57. err := hook.SetHeaderAuthorization("Bearer s3cr3t-t0ken")
  58. assert.NoError(t, err)
  59. assert.NoError(t, webhook_model.CreateWebhook(db.DefaultContext, hook))
  60. db.GetEngine(db.DefaultContext).NoAutoTime().DB().Logger.ShowSQL(true)
  61. hookTask := &webhook_model.HookTask{HookID: hook.ID, EventType: webhook_module.HookEventPush, Payloader: &api.PushPayload{}}
  62. hookTask, err = webhook_model.CreateHookTask(db.DefaultContext, hookTask)
  63. assert.NoError(t, err)
  64. if !assert.NotNil(t, hookTask) {
  65. return
  66. }
  67. assert.NoError(t, Deliver(context.Background(), hookTask))
  68. select {
  69. case <-done:
  70. case <-time.After(5 * time.Second):
  71. t.Fatal("waited to long for request to happen")
  72. }
  73. assert.True(t, hookTask.IsSucceed)
  74. }