File: Fd.cpp

package info (click to toggle)
hyprutils 0.11.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 560 kB
  • sloc: cpp: 5,332; sh: 10; makefile: 3
file content (45 lines) | stat: -rw-r--r-- 1,185 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <hyprutils/os/FileDescriptor.hpp>

#include <gtest/gtest.h>
#include <sys/mman.h>

using namespace Hyprutils::OS;

TEST(OS, fd) {
    std::string     name = "/test_filedescriptors";
    CFileDescriptor fd(shm_open(name.c_str(), O_RDWR | O_CREAT | O_EXCL, 0600));

    EXPECT_EQ(fd.isValid(), true);
    EXPECT_EQ(fd.isReadable(), true);

    int flags = fd.getFlags();
    EXPECT_EQ(fd.getFlags(), FD_CLOEXEC);
    flags &= ~FD_CLOEXEC;
    fd.setFlags(flags);
    EXPECT_EQ(fd.getFlags(), !FD_CLOEXEC);

    CFileDescriptor fd2 = fd.duplicate();
    EXPECT_EQ(fd.isValid(), true);
    EXPECT_EQ(fd.isReadable(), true);
    EXPECT_EQ(fd2.isValid(), true);
    EXPECT_EQ(fd2.isReadable(), true);

    CFileDescriptor fd3(fd2.take());
    EXPECT_EQ(fd.isValid(), true);
    EXPECT_EQ(fd.isReadable(), true);
    EXPECT_EQ(fd2.isValid(), false);
    EXPECT_EQ(fd2.isReadable(), false);

    // .duplicate default flags is FD_CLOEXEC
    EXPECT_EQ(fd3.getFlags(), FD_CLOEXEC);

    fd.reset();
    fd2.reset();
    fd3.reset();

    EXPECT_EQ(fd.isReadable(), false);
    EXPECT_EQ(fd2.isReadable(), false);
    EXPECT_EQ(fd3.isReadable(), false);

    shm_unlink(name.c_str());
}