Commit 624d408e authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Merge branch '13-std-filesystem-filesystem_error-s-not-reported-in-log' into 'main'

Resolve "`std::filesystem::filesystem_error`s not reported in log"

Closes #13

See merge request !9
parents 5aba378d 49196d1d
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ class error_code {
        not_implemented = 2,
        no_such_transfer = 3,
        transfer_in_progress = 4,
        /* ... */
        other = 127,
    };

public:
@@ -52,6 +54,8 @@ public:
    static const error_code not_implemented;
    static const error_code no_such_transfer;
    static const error_code transfer_in_progress;
    /* ... */
    static const error_code other;

    constexpr error_code() : error_code(error_value::success) {}
    constexpr explicit error_code(error_value v)
@@ -99,6 +103,8 @@ constexpr error_code error_code::no_such_transfer{
        error_value::no_such_transfer};
constexpr error_code error_code::transfer_in_progress{
        error_value::transfer_in_progress};
/* ... */
constexpr error_code error_code::other{error_value::other};

static constexpr cargo::error_code
make_system_error(std::uint32_t ec) {
+6 −0
Original line number Diff line number Diff line
@@ -281,6 +281,9 @@ error_code::name() const {
            return "CARGO_NO_SUCH_TRANSFER";
        case error_value::transfer_in_progress:
            return "CARGO_TRANSFER_IN_PROGRESS";
            /* ... */
        case error_value::other:
            return "CARGO_OTHER";
        default:
            return "CARGO_UNKNOWN_ERROR";
    }
@@ -302,6 +305,9 @@ error_code::message() const {
                    return "no such transfer";
                case error_value::transfer_in_progress:
                    return "transfer in progress";
                    /* ... */
                case error_value::other:
                    return "other";
                default:
                    return "unknown error";
            }
+5 −1
Original line number Diff line number Diff line
@@ -144,8 +144,12 @@ mpio_read::operator()() const {
    } catch(const posix_file::io_error& e) {
        LOGGER_ERROR("{}() failed: {}", e.where(), e.what());
        return make_system_error(e.error_code());
    } catch (const std::system_error& e) {
        LOGGER_ERROR("Unexpected system error: {}", e.what());
        return make_system_error(e.code().value());
    } catch(const std::exception& e) {
        std::cerr << e.what() << '\n';
        LOGGER_ERROR("Unexpected exception: {}", e.what());
        return error_code::other;
    }

    return error_code::success;
+5 −1
Original line number Diff line number Diff line
@@ -146,8 +146,12 @@ mpio_write::operator()() const {
    } catch(const posix_file::io_error& e) {
        LOGGER_ERROR("{}() failed: {}", e.where(), e.what());
        return make_system_error(e.error_code());
    } catch (const std::system_error& e) {
        LOGGER_ERROR("Unexpected system error: {}", e.what());
        return make_system_error(e.code().value());
    } catch(const std::exception& e) {
        std::cerr << e.what() << '\n';
        LOGGER_ERROR("Unexpected exception: {}", e.what());
        return error_code::other;
    }

    return error_code::success;
+11 −5
Original line number Diff line number Diff line
@@ -40,11 +40,15 @@
using namespace std::literals;
using namespace std::chrono_literals;

std::ostream&
operator<<(std::ostream& os, const cargo::error_code& ec) {
    os << ec.name();
    return os;
namespace Catch {
template <>
struct StringMaker<cargo::error_code> {
    static std::string
    convert(const cargo::error_code& ec) {
        return std::string{ec.name()};
    }
};
} // namespace Catch

CATCH_REGISTER_ENUM(cargo::transfer_state, cargo::transfer_state::pending,
                    cargo::transfer_state::running,
@@ -240,6 +244,7 @@ SCENARIO("Parallel reads", "[flex_stager][parallel_reads]") {
            // wait for the transfer to complete
            auto s = tx.wait();

            CAPTURE(s.error());
            REQUIRE(s.state() == cargo::transfer_state::completed);
            REQUIRE(s.error() == cargo::error_code::success);

@@ -301,6 +306,7 @@ SCENARIO("Parallel writes", "[flex_stager][parallel_writes]") {
            // wait for the transfer to complete
            auto s = tx.wait();

            CAPTURE(s.error());
            REQUIRE(s.state() == cargo::transfer_state::completed);
            REQUIRE(s.error() == cargo::error_code::success);