Coverage Report

Created: 2026-09-14 06:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/estoraged/include/util.hpp
Line
Count
Source
1
#pragma once
2
#include "getConfig.hpp"
3
4
#include <filesystem>
5
#include <optional>
6
#include <string>
7
8
namespace estoraged
9
{
10
namespace util
11
{
12
13
struct DeviceInfo
14
{
15
    std::filesystem::path deviceFile;
16
    std::filesystem::path sysfsDir;
17
    std::string luksName;
18
    std::string locationCode;
19
    uint64_t eraseMaxGeometry;
20
    uint64_t eraseMinGeometry;
21
    std::string driveType;
22
    std::string driveProtocol;
23
24
    DeviceInfo(std::filesystem::path& deviceFile,
25
               std::filesystem::path& sysfsDir, std::string& luksName,
26
               std::string& locationCode, uint64_t eraseMaxGeometry,
27
               uint64_t eraseMinGeometry, std::string& driveType,
28
               std::string& driveProtocol) :
29
0
        deviceFile(deviceFile), sysfsDir(sysfsDir), luksName(luksName),
30
0
        locationCode(locationCode), eraseMaxGeometry(eraseMaxGeometry),
31
0
        eraseMinGeometry(eraseMinGeometry), driveType(driveType),
32
0
        driveProtocol(driveProtocol)
33
0
    {}
34
};
35
36
/** @brief finds the size of the linux block device in bytes
37
 *  @param[in] devpath - the name of the linux block device
38
 *  @return size of a block device using the devPath
39
 */
40
uint64_t findSizeOfBlockDevice(const std::string& devPath);
41
42
/** @brief finds the predicted life left for a eMMC device
43
 *  @param[in] sysfsPath - The path to the linux sysfs interface
44
 *  @return the life remaining for the emmc, as a percentage.
45
 */
46
uint8_t findPredictedMediaLifeLeftPercent(const std::string& sysfsPath);
47
48
/** @brief Get the part number (aka part name) for the storage device
49
 *  @param[in] sysfsPath - The path to the linux sysfs interface.
50
 *  @return part name as a string (or "unknown" if it couldn't be retrieved)
51
 */
52
std::string getPartNumber(const std::filesystem::path& sysfsPath);
53
54
/** @brief Get the serial number for the storage device
55
 *  @param[in] sysfsPath - The path to the linux sysfs interface.
56
 *  @return serial name as a string (or "unknown" if it couldn't be retrieved)
57
 */
58
std::string getSerialNumber(const std::filesystem::path& sysfsPath);
59
60
/** @brief Look for the device described by the provided StorageData.
61
 *  @details Currently, this function assumes that there's only one eMMC.
62
 *    When we need to support multiple eMMCs, we will put more information in
63
 *    the EntityManager config, to differentiate between them. Also, if we
64
 *    want to support other types of storage devices, this function will need
65
 *    to be updated.
66
 *
67
 *  @param[in] data - map of properties from the config object.
68
 *  @param[in] searchDir - directory to search for devices in sysfs, e.g.
69
 *    /sys/block
70
 *  @return DeviceInfo - metadata for the device if device is found. Null
71
 *  otherwise.
72
 */
73
std::optional<DeviceInfo> findDevice(const StorageData& data,
74
                                     const std::filesystem::path& searchDir);
75
76
} // namespace util
77
78
} // namespace estoraged