選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

168 行
4.7 KiB

  1. // Copyright 2015 Google Inc. All rights reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package verify
  15. import (
  16. "bytes"
  17. "encoding/json"
  18. "fmt"
  19. "net/http"
  20. "net/http/httptest"
  21. "testing"
  22. "github.com/google/martian"
  23. )
  24. func TestHandlerServeHTTPUnsupportedMethod(t *testing.T) {
  25. h := NewHandler()
  26. for i, m := range []string{"POST", "PUT", "DELETE"} {
  27. req, err := http.NewRequest(m, "http://example.com", nil)
  28. if err != nil {
  29. t.Fatalf("%d. http.NewRequest(): got %v, want no error", i, err)
  30. }
  31. rw := httptest.NewRecorder()
  32. h.ServeHTTP(rw, req)
  33. if got, want := rw.Code, 405; got != want {
  34. t.Errorf("%d. rw.Code: got %d, want %d", i, got, want)
  35. }
  36. if got, want := rw.Header().Get("Allow"), "GET"; got != want {
  37. t.Errorf("%d. rw.Header().Get(%q): got %q, want %q", i, "Allow", got, want)
  38. }
  39. }
  40. }
  41. func TestHandlerServeHTTPNoVerifiers(t *testing.T) {
  42. h := NewHandler()
  43. req, err := http.NewRequest("GET", "http://example.com", nil)
  44. if err != nil {
  45. t.Fatalf("http.NewRequest(): got %v, want no error", err)
  46. }
  47. rw := httptest.NewRecorder()
  48. h.ServeHTTP(rw, req)
  49. if got, want := rw.Code, 200; got != want {
  50. t.Errorf("rw.Code: got %d, want %d", got, want)
  51. }
  52. }
  53. func TestHandlerServeHTTP(t *testing.T) {
  54. merr := martian.NewMultiError()
  55. merr.Add(fmt.Errorf("first response verification failure"))
  56. merr.Add(fmt.Errorf("second response verification failure"))
  57. v := &TestVerifier{
  58. RequestError: fmt.Errorf("request verification failure"),
  59. ResponseError: merr,
  60. }
  61. h := NewHandler()
  62. h.SetRequestVerifier(v)
  63. h.SetResponseVerifier(v)
  64. req, err := http.NewRequest("GET", "http://example.com", nil)
  65. if err != nil {
  66. t.Fatalf("http.NewRequest(): got %v, want no error", err)
  67. }
  68. rw := httptest.NewRecorder()
  69. h.ServeHTTP(rw, req)
  70. if got, want := rw.Code, 200; got != want {
  71. t.Errorf("rw.Code: got %d, want %d", got, want)
  72. }
  73. buf := new(bytes.Buffer)
  74. if err := json.Compact(buf, []byte(`{
  75. "errors": [
  76. { "message": "request verification failure" },
  77. { "message": "first response verification failure" },
  78. { "message": "second response verification failure" }
  79. ]
  80. }`)); err != nil {
  81. t.Fatalf("json.Compact(): got %v, want no error", err)
  82. }
  83. // json.(*Encoder).Encode writes a trailing newline, so we will too.
  84. // see: https://golang.org/src/encoding/json/stream.go
  85. buf.WriteByte('\n')
  86. if got, want := rw.Body.Bytes(), buf.Bytes(); !bytes.Equal(got, want) {
  87. t.Errorf("rw.Body: got %q, want %q", got, want)
  88. }
  89. }
  90. func TestResetHandlerServeHTTPUnsupportedMethod(t *testing.T) {
  91. h := NewResetHandler()
  92. for i, m := range []string{"GET", "PUT", "DELETE"} {
  93. req, err := http.NewRequest(m, "http://example.com", nil)
  94. if err != nil {
  95. t.Fatalf("%d. http.NewRequest(): got %v, want no error", i, err)
  96. }
  97. rw := httptest.NewRecorder()
  98. h.ServeHTTP(rw, req)
  99. if got, want := rw.Code, 405; got != want {
  100. t.Errorf("%d. rw.Code: got %d, want %d", i, got, want)
  101. }
  102. if got, want := rw.Header().Get("Allow"), "POST"; got != want {
  103. t.Errorf("%d. rw.Header().Get(%q): got %q, want %q", i, "Allow", got, want)
  104. }
  105. }
  106. }
  107. func TestResetHandlerServeHTTPNoVerifiers(t *testing.T) {
  108. h := NewResetHandler()
  109. req, err := http.NewRequest("POST", "http://example.com", nil)
  110. if err != nil {
  111. t.Fatalf("http.NewRequest(): got %v, want no error", err)
  112. }
  113. rw := httptest.NewRecorder()
  114. h.ServeHTTP(rw, req)
  115. if got, want := rw.Code, 204; got != want {
  116. t.Errorf("rw.Code: got %d, want %d", got, want)
  117. }
  118. }
  119. func TestResetHandlerServeHTTP(t *testing.T) {
  120. v := &TestVerifier{
  121. RequestError: fmt.Errorf("request verification failure"),
  122. ResponseError: fmt.Errorf("response verification failure"),
  123. }
  124. h := NewResetHandler()
  125. h.SetRequestVerifier(v)
  126. h.SetResponseVerifier(v)
  127. req, err := http.NewRequest("POST", "http://example.com", nil)
  128. if err != nil {
  129. t.Fatalf("http.NewRequest(): got %v, want no error", err)
  130. }
  131. rw := httptest.NewRecorder()
  132. h.ServeHTTP(rw, req)
  133. if got, want := rw.Code, 204; got != want {
  134. t.Errorf("rw.Code: got %d, want %d", got, want)
  135. }
  136. if err := v.VerifyRequests(); err != nil {
  137. t.Errorf("v.VerifyRequests(): got %v, want no error", err)
  138. }
  139. if err := v.VerifyResponses(); err != nil {
  140. t.Errorf("v.VerifyResponses(): got %v, want no error", err)
  141. }
  142. }