| 38 | ) |
| 39 | |
| 40 | func TestHandler_ServeHTTP(t *testing.T) { |
| 41 | t.Parallel() |
| 42 | path, handler := pingv1connect.NewPingServiceHandler(successPingServer{}) |
| 43 | prefixed := http.NewServeMux() |
| 44 | prefixed.Handle(path, handler) |
| 45 | mux := http.NewServeMux() |
| 46 | mux.Handle(path, handler) |
| 47 | mux.Handle("/prefixed/", http.StripPrefix("/prefixed", prefixed)) |
| 48 | const pingProcedure = pingv1connect.PingServicePingProcedure |
| 49 | const sumProcedure = pingv1connect.PingServiceSumProcedure |
| 50 | server := memhttptest.NewServer(t, mux) |
| 51 | client := server.Client() |
| 52 | |
| 53 | t.Run("get_method_no_encoding", func(t *testing.T) { |
| 54 | t.Parallel() |
| 55 | request, err := http.NewRequestWithContext( |
| 56 | t.Context(), |
| 57 | http.MethodGet, |
| 58 | server.URL()+pingProcedure, |
| 59 | strings.NewReader(""), |
| 60 | ) |
| 61 | assert.Nil(t, err) |
| 62 | resp, err := client.Do(request) |
| 63 | assert.Nil(t, err) |
| 64 | defer resp.Body.Close() |
| 65 | assert.Equal(t, resp.StatusCode, http.StatusUnsupportedMediaType) |
| 66 | }) |
| 67 | |
| 68 | t.Run("get_method_bad_encoding", func(t *testing.T) { |
| 69 | t.Parallel() |
| 70 | request, err := http.NewRequestWithContext( |
| 71 | t.Context(), |
| 72 | http.MethodGet, |
| 73 | server.URL()+pingProcedure+`?encoding=unk&message={}`, |
| 74 | strings.NewReader(""), |
| 75 | ) |
| 76 | assert.Nil(t, err) |
| 77 | resp, err := client.Do(request) |
| 78 | assert.Nil(t, err) |
| 79 | defer resp.Body.Close() |
| 80 | assert.Equal(t, resp.StatusCode, http.StatusUnsupportedMediaType) |
| 81 | }) |
| 82 | |
| 83 | t.Run("get_method_body_not_allowed", func(t *testing.T) { |
| 84 | t.Parallel() |
| 85 | const queryStringSuffix = `?encoding=json&message={}` |
| 86 | request, err := http.NewRequestWithContext( |
| 87 | t.Context(), |
| 88 | http.MethodGet, |
| 89 | server.URL()+pingProcedure+queryStringSuffix, |
| 90 | strings.NewReader("!"), // non-empty body |
| 91 | ) |
| 92 | assert.Nil(t, err) |
| 93 | resp, err := client.Do(request) |
| 94 | assert.Nil(t, err) |
| 95 | defer resp.Body.Close() |
| 96 | assert.Equal(t, resp.StatusCode, http.StatusUnsupportedMediaType) |
| 97 | |