blob: 452592fc22433ac6de595d1c88a1abec1baf15f0 [file] [log] [blame]
Alexei Strots01395492023-03-20 13:59:56 -07001#include "aos/events/logging/log_backend.h"
2
3#include <filesystem>
4
5#include "aos/testing/tmpdir.h"
6#include "gtest/gtest.h"
7
8namespace aos::logger::testing {
9TEST(LogBackendTest, CreateSimpleFile) {
10 const std::string logevent = aos::testing::TestTmpDir() + "/logevent/";
11 FileBackend backend(logevent);
12 auto file = backend.RequestFile("test.log");
13 ASSERT_EQ(file->OpenForWrite(), WriteCode::kOk);
14 auto result = write(file->fd(), "test", 4);
15 EXPECT_GT(result, 0);
16 EXPECT_EQ(file->Close(), WriteCode::kOk);
17 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log"));
18}
19
20TEST(LogBackendTest, CreateRenamableFile) {
21 const std::string logevent = aos::testing::TestTmpDir() + "/logevent/";
22 RenamableFileBackend backend(logevent);
23 auto file = backend.RequestFile("test.log");
24 ASSERT_EQ(file->OpenForWrite(), WriteCode::kOk);
25 auto result = write(file->fd(), "testtest", 8);
26 EXPECT_GT(result, 0);
27 EXPECT_EQ(file->Close(), WriteCode::kOk);
28 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log"));
29}
30
31TEST(LogBackendTest, UseTempRenamableFile) {
32 const std::string logevent = aos::testing::TestTmpDir() + "/logevent/";
33 RenamableFileBackend backend(logevent);
34 backend.EnableTempFiles();
35 auto file = backend.RequestFile("test.log");
36 ASSERT_EQ(file->OpenForWrite(), WriteCode::kOk);
37 auto result = write(file->fd(), "testtest", 8);
38 EXPECT_GT(result, 0);
39 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log.tmp"));
40
41 EXPECT_EQ(file->Close(), WriteCode::kOk);
42 // Check that file is renamed.
43 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log"));
44}
45
46TEST(LogBackendTest, RenameBaseAfterWrite) {
47 const std::string logevent = aos::testing::TestTmpDir() + "/logevent/";
48 RenamableFileBackend backend(logevent);
49 auto file = backend.RequestFile("test.log");
50 ASSERT_EQ(file->OpenForWrite(), WriteCode::kOk);
51 auto result = write(file->fd(), "testtest", 8);
52 EXPECT_GT(result, 0);
53 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log"));
54
55 std::string renamed = aos::testing::TestTmpDir() + "/renamed/";
56 backend.RenameLogBase(renamed);
57
58 EXPECT_FALSE(std::filesystem::exists(logevent + "test.log"));
59 EXPECT_TRUE(std::filesystem::exists(renamed + "test.log"));
60
61 EXPECT_EQ(file->Close(), WriteCode::kOk);
62 // Check that file is renamed.
63 EXPECT_TRUE(std::filesystem::exists(renamed + "test.log"));
64}
65
66TEST(LogBackendTest, UseTestAndRenameBaseAfterWrite) {
67 const std::string logevent = aos::testing::TestTmpDir() + "/logevent/";
68 RenamableFileBackend backend(logevent);
69 backend.EnableTempFiles();
70 auto file = backend.RequestFile("test.log");
71 ASSERT_EQ(file->OpenForWrite(), WriteCode::kOk);
72 auto result = write(file->fd(), "testtest", 8);
73 EXPECT_GT(result, 0);
74 EXPECT_TRUE(std::filesystem::exists(logevent + "test.log.tmp"));
75
76 std::string renamed = aos::testing::TestTmpDir() + "/renamed/";
77 backend.RenameLogBase(renamed);
78
79 EXPECT_FALSE(std::filesystem::exists(logevent + "test.log.tmp"));
80 EXPECT_TRUE(std::filesystem::exists(renamed + "test.log.tmp"));
81
82 EXPECT_EQ(file->Close(), WriteCode::kOk);
83 // Check that file is renamed.
84 EXPECT_TRUE(std::filesystem::exists(renamed + "test.log"));
85}
86
87} // namespace aos::logger::testing