• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

llnl / dftracer-utils / 28496595030

01 Jul 2026 05:50AM UTC coverage: 50.727% (-1.6%) from 52.278%
28496595030

Pull #83

github

web-flow
Merge 8f1ff4df5 into 2efed6649
Pull Request #83: refactor and improve code QoL

31872 of 80367 branches covered (39.66%)

Branch coverage included in aggregate %.

770 of 1591 new or added lines in 85 files covered. (48.4%)

5070 existing lines in 182 files now uncovered.

32742 of 47009 relevant lines covered (69.65%)

9887.52 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

69.57
/src/dftracer/utils/server/http_response.cpp
1
#include <dftracer/utils/server/http_response.h>
2

3
#include <algorithm>
4
#include <cctype>
5

6
namespace dftracer::utils::server {
7

8
namespace {
9

10
bool icase_equal(std::string_view a, std::string_view b) {
20✔
11
    if (a.size() != b.size()) return false;
20✔
12
    return std::equal(a.begin(), a.end(), b.begin(), [](char ca, char cb) {
15✔
13
        return std::tolower(static_cast<unsigned char>(ca)) ==
28✔
14
               std::tolower(static_cast<unsigned char>(cb));
14✔
15
    });
16
}
20✔
17

18
bool has_content_length(
20✔
19
    const std::vector<std::pair<std::string, std::string>> &headers) {
20
    return std::any_of(headers.begin(), headers.end(), [](const auto &h) {
40✔
21
        return icase_equal(h.first, "Content-Length");
20✔
22
    });
23
}
24

25
}  // namespace
26

27
std::string HttpResponse::serialize_headers() const {
24✔
28
    std::string out;
24✔
29
    out.reserve(256);
24!
30

31
    out += "HTTP/1.1 ";
24!
32
    out += std::to_string(status_code);
24!
33
    out += ' ';
24!
34
    out += status_text;
24!
35
    out += "\r\n";
24!
36

37
    for (const auto &[name, value] : headers) {
80✔
38
        out += name;
28!
39
        out += ": ";
28!
40
        out += value;
28!
41
        out += "\r\n";
28!
42
    }
43

44
    if (!body.empty() && !has_content_length(headers)) {
24!
45
        out += "Content-Length: ";
19!
46
        out += std::to_string(body.size());
19!
47
        out += "\r\n";
19!
48
    }
19✔
49

50
    out += "\r\n";
24!
51
    return out;
24✔
52
}
24!
53

54
std::string HttpResponse::serialize() const {
18✔
55
    auto out = serialize_headers();
18✔
56
    out += body;
18!
57
    return out;
18✔
58
}
18!
59

60
HttpResponse HttpResponse::ok() {
2✔
61
    return HttpResponse{
10✔
62
        .status_code = 200, .status_text = "OK", .headers = {}, .body = {}};
8✔
63
}
64

65
HttpResponse HttpResponse::ok(const std::string &body,
17✔
66
                              const std::string &content_type) {
67
    return HttpResponse{.status_code = 200,
51!
68
                        .status_text = "OK",
17✔
69
                        .headers = {{"Content-Type", content_type}},
17!
70
                        .body = body};
17!
UNCOV
71
}
×
72

73
HttpResponse HttpResponse::not_found() {
3✔
74
    return HttpResponse{.status_code = 404,
9!
75
                        .status_text = "Not Found",
3✔
76
                        .headers = {{"Content-Type", "text/plain"}},
3!
77
                        .body = "Not Found"};
3!
UNCOV
78
}
×
79

80
HttpResponse HttpResponse::bad_request(const std::string &msg) {
3✔
81
    return HttpResponse{.status_code = 400,
9!
82
                        .status_text = "Bad Request",
3✔
83
                        .headers = {{"Content-Type", "text/plain"}},
3!
84
                        .body = msg};
3!
UNCOV
85
}
×
86

87
HttpResponse HttpResponse::internal_error(const std::string &msg) {
1✔
88
    return HttpResponse{.status_code = 500,
3!
89
                        .status_text = "Internal Server Error",
1✔
90
                        .headers = {{"Content-Type", "text/plain"}},
1!
91
                        .body = msg};
1!
UNCOV
92
}
×
93

94
HttpResponse HttpResponse::streaming(std::unique_ptr<StreamGenerator> gen,
2✔
95
                                     const std::string &content_type) {
96
    HttpResponse resp;
2✔
97
    resp.status_code = 200;
2✔
98
    resp.status_text = "OK";
2!
99
    resp.headers = {{"Content-Type", content_type},
2!
100
                    {"Transfer-Encoding", "chunked"}};
2!
101
    resp.stream = std::move(gen);
2✔
102
    return resp;
2✔
103
}
2!
104

105
}  // namespace dftracer::utils::server
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc