container_test.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package restful
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "testing"
  6. )
  7. // go test -v -test.run TestContainer_computeAllowedMethods ...restful
  8. func TestContainer_computeAllowedMethods(t *testing.T) {
  9. wc := NewContainer()
  10. ws1 := new(WebService).Path("/users")
  11. ws1.Route(ws1.GET("{i}").To(dummy))
  12. ws1.Route(ws1.POST("{i}").To(dummy))
  13. wc.Add(ws1)
  14. httpRequest, _ := http.NewRequest("GET", "http://api.his.com/users/1", nil)
  15. rreq := Request{Request: httpRequest}
  16. m := wc.computeAllowedMethods(&rreq)
  17. if len(m) != 2 {
  18. t.Errorf("got %d expected 2 methods, %v", len(m), m)
  19. }
  20. }
  21. func TestContainer_HandleWithFilter(t *testing.T) {
  22. prefilterCalled := false
  23. postfilterCalled := false
  24. httpHandlerCalled := false
  25. wc := NewContainer()
  26. wc.Filter(func(request *Request, response *Response, chain *FilterChain) {
  27. prefilterCalled = true
  28. chain.ProcessFilter(request, response)
  29. })
  30. wc.HandleWithFilter("/", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
  31. httpHandlerCalled = true
  32. w.Write([]byte("ok"))
  33. }))
  34. wc.Filter(func(request *Request, response *Response, chain *FilterChain) {
  35. postfilterCalled = true
  36. chain.ProcessFilter(request, response)
  37. })
  38. recorder := httptest.NewRecorder()
  39. request, _ := http.NewRequest("GET", "/", nil)
  40. wc.ServeHTTP(recorder, request)
  41. if recorder.Code != http.StatusOK {
  42. t.Errorf("unexpected code %d", recorder.Code)
  43. }
  44. if recorder.Body.String() != "ok" {
  45. t.Errorf("unexpected body %s", recorder.Body.String())
  46. }
  47. if !prefilterCalled {
  48. t.Errorf("filter added before calling HandleWithFilter wasn't called")
  49. }
  50. if !postfilterCalled {
  51. t.Errorf("filter added after calling HandleWithFilter wasn't called")
  52. }
  53. if !httpHandlerCalled {
  54. t.Errorf("handler added by calling HandleWithFilter wasn't called")
  55. }
  56. }
  57. func TestContainerAddAndRemove(t *testing.T) {
  58. ws1 := new(WebService).Path("/")
  59. ws2 := new(WebService).Path("/users")
  60. wc := NewContainer()
  61. wc.Add(ws1)
  62. wc.Add(ws2)
  63. wc.Remove(ws2)
  64. if len(wc.webServices) != 1 {
  65. t.Errorf("expected one webservices")
  66. }
  67. if !wc.isRegisteredOnRoot {
  68. t.Errorf("expected on root registered")
  69. }
  70. wc.Remove(ws1)
  71. if len(wc.webServices) > 0 {
  72. t.Errorf("expected zero webservices")
  73. }
  74. if wc.isRegisteredOnRoot {
  75. t.Errorf("expected not on root registered")
  76. }
  77. }