示例#1
0
TEST(EncoderTest, Response)
{
  Request request;
  const OK response("body");

  // Encode the response.
  const string encoded = HttpResponseEncoder::encode(response, request);

  // Now decode it back, and verify the encoding was correct.
  ResponseDecoder decoder;
  deque<Response*> responses = decoder.decode(encoded.data(), encoded.length());
  ASSERT_FALSE(decoder.failed());
  ASSERT_EQ(1, responses.size());

  Response* decoded = responses[0];
  EXPECT_EQ("200 OK", decoded->status);
  EXPECT_EQ("body", decoded->body);

  // Encoding should have inserted the 'Date' and 'Content-Length' headers.
  EXPECT_EQ(2, decoded->headers.size());
  EXPECT_TRUE(decoded->headers.contains("Date"));
  EXPECT_SOME_EQ(
      stringify(response.body.size()),
      decoded->headers.get("Content-Length"));
}
示例#2
0
TEST(DecoderTest, Response)
{
  ResponseDecoder decoder;

  const string data =
    "HTTP/1.1 200 OK\r\n"
    "Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n"
    "Content-Type: text/plain\r\n"
    "Content-Length: 2\r\n"
    "\r\n"
    "hi";

  deque<Response*> responses = decoder.decode(data.data(), data.length());
  ASSERT_FALSE(decoder.failed());
  ASSERT_EQ(1, responses.size());

  Response* response = responses[0];

  EXPECT_EQ("200 OK", response->status);
  EXPECT_EQ(Response::BODY, response->type);
  EXPECT_EQ("hi", response->body);

  EXPECT_EQ(3, response->headers.size());

  delete response;
}
示例#3
0
文件: http.cpp 项目: Hadoyy/mesos
Future<Response> decode(const string& buffer)
{
  ResponseDecoder decoder;
  deque<Response*> responses = decoder.decode(buffer.c_str(), buffer.length());

  if (decoder.failed() || responses.empty()) {
    for (size_t i = 0; i < responses.size(); ++i) {
      delete responses[i];
    }
    return Failure("Failed to decode HTTP response:\n" + buffer + "\n");
  } else if (responses.size() > 1) {
    PLOG(ERROR) << "Received more than 1 HTTP Response";
  }

  Response response = *responses[0];
  for (size_t i = 0; i < responses.size(); ++i) {
    delete responses[i];
  }

  return response;
}