response_creator_unittests.cc 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this
  5. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
  6. #include <config.h>
  7. #include <http/request.h>
  8. #include <http/response.h>
  9. #include <http/response_creator.h>
  10. #include <http/response_json.h>
  11. #include <http/tests/response_test.h>
  12. #include <boost/shared_ptr.hpp>
  13. #include <gtest/gtest.h>
  14. using namespace isc::http;
  15. using namespace isc::http::test;
  16. namespace {
  17. typedef TestHttpResponseBase<HttpResponseJson> Response;
  18. typedef boost::shared_ptr<Response> ResponsePtr;
  19. class TestHttpResponseCreator : public HttpResponseCreator {
  20. private:
  21. virtual HttpResponsePtr
  22. createStockBadRequest(const ConstHttpRequestPtr& request) const {
  23. HttpVersion http_version(request->context()->http_version_major_,
  24. request->context()->http_version_minor_);
  25. ResponsePtr response(new Response(http_version,
  26. HttpStatusCode::BAD_REQUEST));
  27. return (response);
  28. }
  29. virtual HttpResponsePtr
  30. createDynamicHttpResponse(const ConstHttpRequestPtr& request) {
  31. ResponsePtr response(new Response(request->getHttpVersion(),
  32. HttpStatusCode::OK));
  33. return (response);
  34. }
  35. };
  36. TEST(HttpResponseCreatorTest, badRequest) {
  37. HttpResponsePtr response;
  38. HttpRequestPtr request(new HttpRequest());
  39. TestHttpResponseCreator creator;
  40. ASSERT_NO_THROW(response = creator.createHttpResponse(request));
  41. ASSERT_TRUE(response);
  42. EXPECT_EQ("HTTP/0.0 400 Bad Request\r\n"
  43. "Content-Type: application/json\r\n"
  44. "Date: Tue, 19 Dec 2016 18:53:35 GMT\r\n"
  45. "Content-Length: 40\r\n\r\n"
  46. "{ \"result\": 400, \"text\": \"Bad Request\" }", response->toString());
  47. }
  48. TEST(HttpResponseCreatorTest, goodRequest) {
  49. HttpResponsePtr response;
  50. HttpRequestPtr request(new HttpRequest());
  51. request->context()->http_version_major_ = 1;
  52. request->context()->http_version_minor_ = 0;
  53. request->context()->method_ = "GET";
  54. request->context()->uri_ = "/foo";
  55. ASSERT_NO_THROW(request->finalize());
  56. TestHttpResponseCreator creator;
  57. ASSERT_NO_THROW(response = creator.createHttpResponse(request));
  58. ASSERT_TRUE(response);
  59. EXPECT_EQ("HTTP/1.0 200 OK\r\n"
  60. "Content-Type: application/json\r\n"
  61. "Date: Tue, 19 Dec 2016 18:53:35 GMT\r\n\r\n",
  62. response->toString());
  63. }
  64. }