Following the discussion in D112753, this moves the HTTPClient from Support to Debuginfod library so that tools depending on Support do not automatically depend on Curl as well. This also removes `HTTPClient::initialize()` and `HTTPClient::cleanup()` from `InitLLVM` so these steps should be implemented by user tools instead. Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D115131
95 lines
3.6 KiB
C++
95 lines
3.6 KiB
C++
//===-- llvm/unittest/Debuginfod/HTTPClientTests.cpp - unit tests ---------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Debuginfod/HTTPClient.h"
|
|
#include "llvm/Support/Errc.h"
|
|
#include "llvm/Testing/Support/Error.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
TEST(BufferedHTTPResponseHandler, Lifecycle) {
|
|
BufferedHTTPResponseHandler Handler;
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: 36\r\n"),
|
|
Succeeded());
|
|
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("body:"), Succeeded());
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("this puts the total at 36 chars"),
|
|
Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body->MemoryBuffer::getBuffer(),
|
|
"body:this puts the total at 36 chars");
|
|
|
|
// Additional content should be rejected by the handler.
|
|
EXPECT_THAT_ERROR(
|
|
Handler.handleBodyChunk("extra content past the content-length"),
|
|
Failed<llvm::StringError>());
|
|
|
|
// Test response code is set.
|
|
EXPECT_THAT_ERROR(Handler.handleStatusCode(200u), Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Code, 200u);
|
|
EXPECT_THAT_ERROR(Handler.handleStatusCode(400u), Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Code, 400u);
|
|
}
|
|
|
|
TEST(BufferedHTTPResponseHandler, NoContentLengthLifecycle) {
|
|
BufferedHTTPResponseHandler Handler;
|
|
EXPECT_EQ(Handler.ResponseBuffer.Code, 0u);
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
|
|
// A body chunk passed before the content-length header is an error.
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("body"),
|
|
Failed<llvm::StringError>());
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("a header line"), Succeeded());
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("body"),
|
|
Failed<llvm::StringError>());
|
|
}
|
|
|
|
TEST(BufferedHTTPResponseHandler, ZeroContentLength) {
|
|
BufferedHTTPResponseHandler Handler;
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: 0"), Succeeded());
|
|
EXPECT_NE(Handler.ResponseBuffer.Body, nullptr);
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body->getBufferSize(), 0u);
|
|
|
|
// All content should be rejected by the handler.
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("non-empty body content"),
|
|
Failed<llvm::StringError>());
|
|
}
|
|
|
|
TEST(BufferedHTTPResponseHandler, MalformedContentLength) {
|
|
// Check that several invalid content lengths are ignored.
|
|
BufferedHTTPResponseHandler Handler;
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: fff"),
|
|
Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: "),
|
|
Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
|
|
using namespace std::string_literals;
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: \0\0\0"s),
|
|
Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
|
|
EXPECT_THAT_ERROR(Handler.handleHeaderLine("Content-Length: -11"),
|
|
Succeeded());
|
|
EXPECT_EQ(Handler.ResponseBuffer.Body, nullptr);
|
|
|
|
// All content should be rejected by the handler because no valid
|
|
// Content-Length header has been received.
|
|
EXPECT_THAT_ERROR(Handler.handleBodyChunk("non-empty body content"),
|
|
Failed<llvm::StringError>());
|
|
}
|
|
|
|
#ifdef LLVM_ENABLE_CURL
|
|
|
|
TEST(HTTPClient, isAvailable) { EXPECT_TRUE(HTTPClient::isAvailable()); }
|
|
|
|
#endif
|