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

mendersoftware / mender / 1583599051

11 Dec 2024 09:04AM UTC coverage: 76.259% (-0.2%) from 76.43%
1583599051

push

gitlab-ci

vpodzime
fix: Cancel the previous request before scheduling a new one in HTTP resumer

The `http::Client()` class is designed to always have only one
HTTP request in progress. Thus, before scheduling a new request
using the same `http::Client` instance, cancel the previous
request to make sure everything is properly reset for the new
one.

Ticket: MEN-7810
Changelog: Fix download resuming to reset the HTTP state and
avoid repeatedly hitting the same error in case of a bad state

Signed-off-by: Vratislav Podzimek <vratislav.podzimek@northern.tech>

1 of 1 new or added line in 1 file covered. (100.0%)

55 existing lines in 11 files now uncovered.

7375 of 9671 relevant lines covered (76.26%)

11182.97 hits per line

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

61.9
/src/common/processes/processes.cpp
1
// Copyright 2023 Northern.tech AS
2
//
3
//    Licensed under the Apache License, Version 2.0 (the "License");
4
//    you may not use this file except in compliance with the License.
5
//    You may obtain a copy of the License at
6
//
7
//        http://www.apache.org/licenses/LICENSE-2.0
8
//
9
//    Unless required by applicable law or agreed to in writing, software
10
//    distributed under the License is distributed on an "AS IS" BASIS,
11
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
//    See the License for the specific language governing permissions and
13
//    limitations under the License.
14

15
#include <common/processes.hpp>
16

17
#include <common/log.hpp>
18
#include <common/common.hpp>
19

20
namespace mender {
21
namespace common {
22
namespace processes {
23

24
namespace log = mender::common::log;
25

26
const chrono::seconds DEFAULT_GENERATE_LINE_DATA_TIMEOUT {10};
27

28
const ProcessesErrorCategoryClass ProcessesErrorCategory;
29

30
const char *ProcessesErrorCategoryClass::name() const noexcept {
×
31
        return "ProcessesErrorCategory";
×
32
}
33

34
string ProcessesErrorCategoryClass::message(int code) const {
86✔
35
        switch (code) {
86✔
36
        case NoError:
37
                return "Success";
×
38
        case SpawnError:
39
                return "Spawn error";
×
40
        case ProcessAlreadyStartedError:
41
                return "Process already started";
×
42
        case NonZeroExitStatusError:
43
                return "Process returned non-zero exit status";
86✔
44
        }
45
        assert(false);
46
        return "Unknown";
×
47
}
48

49
error::Error MakeError(ProcessesErrorCode code, const string &msg) {
1,758✔
50
        return error::Error(error_condition(code, ProcessesErrorCategory), msg);
1,758✔
51
};
52

53
void OutputHandler::operator()(const char *data, size_t size) {
794✔
54
        if (size == 0) {
794✔
55
                return;
×
56
        }
57
        // Get rid of exactly one trailing newline, if there is one. This is because
58
        // we unconditionally print one at the end of every log line. If the string
59
        // does not contain a trailing newline, add a "{...}" instead, since we
60
        // cannot avoid breaking the line apart then.
61
        string content(data, size);
794✔
62
        if (content.back() == '\n') {
794✔
63
                content.pop_back();
794✔
64
        } else {
UNCOV
65
                content.append("{...}");
×
66
        }
67
        auto lines = mender::common::SplitString(content, "\n");
2,382✔
68
        for (auto line : lines) {
1,615✔
69
                log::Info(prefix + line);
1,642✔
70
        }
71
}
72

73
} // namespace processes
74
} // namespace common
75
} // namespace mender
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

© 2025 Coveralls, Inc