Skip to content

Commit

Permalink
テスト修正途中
Browse files Browse the repository at this point in the history
  • Loading branch information
na-trium-144 committed Sep 27, 2024
1 parent 2d1b38a commit f4d5385
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 151 deletions.
5 changes: 4 additions & 1 deletion client/include/webcface/internal/data_store2.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,10 @@ using ImageData = ImageFrame;

struct LogData {
std::deque<LogLineData> data;
std::size_t sent_lines;
std::size_t sent_lines = 0;

LogData() = default;
explicit LogData(const std::deque<LogLineData> &data) : data(data) {}

std::vector<LogLineData> getDiff() {
auto begin = data.cbegin() + static_cast<int>(sent_lines);
Expand Down
2 changes: 1 addition & 1 deletion client/src/client_msg_recv.cc
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ void internal::ClientData::onRecv(
auto &r = *static_cast<webcface::message::Res<webcface::message::Log> *>(obj.get());
std::lock_guard lock_s(this->log_store.mtx);
auto [member, field] =
this->view_store.getReq(r.req_id, r.sub_field);
this->log_store.getReq(r.req_id, r.sub_field);
auto log_s = this->log_store.getRecv(member, field);
if (!log_s) {
log_s = std::make_shared<LogData>();
Expand Down
144 changes: 81 additions & 63 deletions tests/client_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,9 @@ TEST_F(ClientTest, entry) {
EXPECT_EQ(m.funcEntries()[0].nameW(), L"a");

EXPECT_FALSE(m.log().exists());
dummy_s->send(message::LogEntry{{},10});
dummy_s->send(message::Entry<message::Log>{{}, 10, "a"_ss});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
EXPECT_TRUE(m.log().exists());
EXPECT_TRUE(m.log("a").exists());

m.onSync(callback<Member>());
dummy_s->send(message::Sync{10, std::chrono::system_clock::now()});
Expand All @@ -380,15 +380,15 @@ TEST_F(ClientTest, logSend) {
while (!dummy_s->connected() || !wcli_->connected()) {
wait();
}
auto ls =
std::make_shared<std::deque<LogLineData>>(std::deque<LogLineData>{
{0, std::chrono::system_clock::now(),
SharedString::fromU8String(std::string(100000, 'a'))},
{1, std::chrono::system_clock::now(), "b"_ss},
});
data_->log_store.setRecv(self_name, ls);
auto ls = std::make_shared<internal::LogData>(std::deque<LogLineData>{
{0, std::chrono::system_clock::now(),
SharedString::fromU8String(std::string(100000, 'a'))},
{1, std::chrono::system_clock::now(), "b"_ss},
});
data_->log_store.setSend("a"_ss, ls);
wcli_->sync();
dummy_s->waitRecv<message::Log>([&](const auto &obj) {
EXPECT_EQ(obj.field, "a"_ss);
EXPECT_EQ(obj.log->size(), 2u);
EXPECT_EQ(obj.log->at(0).level_, 0);
EXPECT_EQ(obj.log->at(0).message_.decode().size(), 100000u);
Expand All @@ -397,7 +397,9 @@ TEST_F(ClientTest, logSend) {
});

dummy_s->recvClear();
ls->push_back(LogLineData{2, std::chrono::system_clock::now(), "c"_ss});
ls->data.push_back(
LogLineData{2, std::chrono::system_clock::now(), "c"_ss});
data_->log_store.setSend("a"_ss, ls);
wcli_->sync();
dummy_s->waitRecv<message::Log>([&](const auto &obj) {
EXPECT_EQ(obj.log->size(), 1u);
Expand All @@ -411,79 +413,95 @@ TEST_F(ClientTest, logReq) {
while (!dummy_s->connected() || !wcli_->connected()) {
wait();
}
wcli_->member("a").log().tryGet();
dummy_s->waitRecv<message::LogReq>(
[&](const auto &obj) { EXPECT_EQ(obj.member.u8String(), "a"); });
wcli_->member("a").log().onChange(callback<Log>());
wcli_->member("a").log("b").tryGet();
dummy_s->waitRecv<message::Req<message::Log>>([&](const auto &obj) {
EXPECT_EQ(obj.member.u8String(), "a");
EXPECT_EQ(obj.field.u8String(), "b");
EXPECT_EQ(obj.req_id, 1u);
});
wcli_->member("a").log("b").onChange(callback<Log>());

dummy_s->send(message::SyncInit{{}, "a"_ss, 10, "", "", ""});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
dummy_s->send(message::Log{
10, std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{
0, std::chrono::system_clock::now(),
SharedString::fromU8String(std::string(100000, 'a'))}
.toMessage(),
LogLineData{1, std::chrono::system_clock::now(), "b"_ss}
.toMessage(),
})});
dummy_s->send(message::Res<message::Log>{
1, ""_ss,
std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{
0, std::chrono::system_clock::now(),
SharedString::fromU8String(std::string(100000, 'a'))}
.toMessage(),
LogLineData{1, std::chrono::system_clock::now(), "b"_ss}
.toMessage(),
})});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
EXPECT_EQ(callback_called, 1);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->size(), 2u);
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->at(0).level_, 0);
EXPECT_EQ(data_->log_store.getRecv("a"_ss)
EXPECT_TRUE(data_->log_store.getRecv("a"_ss, "b"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.size(),
2u);
EXPECT_EQ(
data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.at(0).level_, 0);
EXPECT_EQ(data_->log_store.getRecv("a"_ss, "b"_ss)
.value()
->at(0)
->data.at(0)
.message_.u8String()
.size(),
100000u);

dummy_s->send(message::Log{
10, std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{2, std::chrono::system_clock::now(), "c"_ss}
.toMessage(),
})});
dummy_s->send(message::Res<message::Log>{
1, ""_ss,
std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{2, std::chrono::system_clock::now(), "c"_ss}
.toMessage(),
})});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
EXPECT_EQ(callback_called, 2);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->size(), 3u);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss, "b"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.size(),
3u);

// keep_lines以上のログは保存しない
webcface::Log::keepLines(2);
dummy_s->send(message::Log{
10, std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{3, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
})});
dummy_s->send(message::Res<message::Log>{
1, ""_ss,
std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{3, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
})});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
EXPECT_EQ(callback_called, 3);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->size(), 2u);
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->at(0).level_, 2);
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->at(1).level_, 3);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss, "b"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.size(),
2u);
EXPECT_EQ(
data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.at(0).level_, 2);
EXPECT_EQ(
data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.at(1).level_, 3);

dummy_s->send(message::Log{
10, std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{4, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{5, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{6, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{7, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
})});
dummy_s->send(message::Res<message::Log>{
1, ""_ss,
std::make_shared<std::deque<message::LogLine>>(
std::deque<message::LogLine>{
LogLineData{4, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{5, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{6, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
LogLineData{7, std::chrono::system_clock::now(), "d"_ss}
.toMessage(),
})});
wcli_->loopSyncFor(std::chrono::milliseconds(WEBCFACE_TEST_TIMEOUT));
EXPECT_EQ(callback_called, 4);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->size(), 2u);
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->at(0).level_, 6);
EXPECT_EQ(data_->log_store.getRecv("a"_ss).value()->at(1).level_, 7);
EXPECT_TRUE(data_->log_store.getRecv("a"_ss, "b"_ss).has_value());
EXPECT_EQ(data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.size(),
2u);
EXPECT_EQ(
data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.at(0).level_, 6);
EXPECT_EQ(
data_->log_store.getRecv("a"_ss, "b"_ss).value()->data.at(1).level_, 7);

webcface::Log::keepLines(1000);
}
72 changes: 39 additions & 33 deletions tests/data_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,12 @@ class DataTest : public ::testing::Test {
Variant variant(const T1 &member, const T2 &name) {
return Variant{field(member, name)};
}
Log log(const SharedString &member) { return Log{Field{data_, member}}; }
Log log(std::string_view member) {
return Log{Field{data_, SharedString::fromU8String(member)}};
Log log(const SharedString &member, const SharedString &name) {
return Log{Field{data_, member, name}};
}
Log log(std::string_view member, std::string_view name) {
return Log{Field{data_, SharedString::fromU8String(member),
SharedString::fromU8String(name)}};
}
int callback_called;
template <typename V>
Expand All @@ -75,7 +78,7 @@ TEST_F(DataTest, field) {
EXPECT_EQ(text("a", "b").nameW(), L"b");
EXPECT_EQ(text("a", "b").child("c").name(), "b.c");
EXPECT_EQ(text("a", "b").child(L"c").name(), "b.c");
EXPECT_EQ(log("a").member().name(), "a");
EXPECT_EQ(log("a", "b").member().name(), "a");

EXPECT_THROW(Value().tryGet(), std::runtime_error);
EXPECT_THROW(Text().tryGet(), std::runtime_error);
Expand All @@ -97,8 +100,9 @@ TEST_F(DataTest, eventTarget) {
data_->text_change_event["a"_ss]["b"_ss]->operator()(field("a", "b"));
EXPECT_EQ(callback_called, 1);
callback_called = 0;
log("a").onChange(callback<Log>());
data_->log_append_event["a"_ss]->operator()(field("a"));

log("a", "b").onChange(callback<Log>());
data_->log_append_event["a"_ss]["b"_ss]->operator()(field("a"));
EXPECT_EQ(callback_called, 1);
callback_called = 0;
}
Expand Down Expand Up @@ -220,45 +224,47 @@ TEST_F(DataTest, textGet) {
TEST_F(DataTest, logGet) {
using namespace std::chrono;
auto logs =
std::make_shared<std::deque<LogLineData>>(std::deque<LogLineData>{
std::make_shared<webcface::internal::LogData>(std::deque<LogLineData>{
{1, system_clock::now(), "a"_ss},
{2, system_clock::now(), "b"_ss},
{3, system_clock::now(), "c"_ss},
});
data_->log_store.setRecv("a"_ss, logs);
EXPECT_EQ(log("a").tryGet().value().size(), 3u);
EXPECT_EQ(log("a").tryGetW().value().size(), 3u);
ASSERT_EQ(log("a").get().size(), 3u);
ASSERT_EQ(log("a").getW().size(), 3u);
EXPECT_EQ(log("a").get()[2].level(), 3);
EXPECT_EQ(log("a").getW()[2].level(), 3);
EXPECT_EQ(log("a").get()[2].message(), "c");
EXPECT_EQ(log("a").getW()[2].message(), L"c");
EXPECT_EQ(log("b").tryGet(), std::nullopt);
EXPECT_EQ(log("b").tryGetW(), std::nullopt);
EXPECT_EQ(log("b").get().size(), 0u);
EXPECT_EQ(log("b").getW().size(), 0u);
EXPECT_EQ(data_->log_store.transferReq().at("a"_ss), true);
EXPECT_EQ(data_->log_store.transferReq().at("b"_ss), true);
ASSERT_TRUE(log(self_name).tryGet().has_value());
ASSERT_TRUE(log(self_name).tryGetW().has_value());
EXPECT_EQ(log(self_name).tryGet()->size(), 0u);
EXPECT_EQ(log(self_name).tryGetW()->size(), 0u);
data_->log_store.setRecv("a"_ss, "b"_ss, logs);
EXPECT_EQ(log("a", "b").tryGet().value().size(), 3u);
EXPECT_EQ(log("a", "b").tryGetW().value().size(), 3u);
ASSERT_EQ(log("a", "b").get().size(), 3u);
ASSERT_EQ(log("a", "b").getW().size(), 3u);
EXPECT_EQ(log("a", "b").get()[2].level(), 3);
EXPECT_EQ(log("a", "b").getW()[2].level(), 3);
EXPECT_EQ(log("a", "b").get()[2].message(), "c");
EXPECT_EQ(log("a", "b").getW()[2].message(), L"c");
EXPECT_EQ(log("a", "c").tryGet(), std::nullopt);
EXPECT_EQ(log("a", "c").tryGetW(), std::nullopt);
EXPECT_EQ(log("a", "c").get().size(), 0u);
EXPECT_EQ(log("a", "c").getW().size(), 0u);
EXPECT_EQ(data_->log_store.transferReq().at("a"_ss).at("b"_ss), 1u);
EXPECT_EQ(data_->log_store.transferReq().at("a"_ss).at("c"_ss), 2u);
EXPECT_FALSE(log(self_name, "default"_ss).tryGet().has_value());
EXPECT_FALSE(log(self_name, "default"_ss).tryGetW().has_value());
EXPECT_FALSE(log(self_name, "a"_ss).tryGet().has_value());
EXPECT_FALSE(log(self_name, "a"_ss).tryGetW().has_value());
EXPECT_EQ(log(self_name, "a"_ss).get().size(), 0u);
EXPECT_EQ(log(self_name, "a"_ss).getW().size(), 0u);
EXPECT_EQ(data_->log_store.transferReq().count(self_name), 0u);
log("d").onChange(callback<Log>());
EXPECT_EQ(data_->log_store.transferReq().at("d"_ss), true);
log("a", "d").onChange(callback<Log>());
EXPECT_EQ(data_->log_store.transferReq().at("a"_ss).at("d"_ss), 3u);
}
TEST_F(DataTest, logClear) {
using namespace std::chrono;
auto logs =
std::make_shared<std::deque<LogLineData>>(std::deque<LogLineData>{
std::make_shared<webcface::internal::LogData>(std::deque<LogLineData>{
{1, system_clock::now(), "a"_ss},
{2, system_clock::now(), "b"_ss},
{3, system_clock::now(), "c"_ss},
});
data_->log_store.setRecv("a"_ss, logs);
log("a").clear();
EXPECT_EQ(log("a").tryGet().value().size(), 0u);
EXPECT_EQ(log("a").tryGetW().value().size(), 0u);
data_->log_store.setRecv("a"_ss, "b"_ss, logs);
log("a", "b").clear();
EXPECT_EQ(log("a", "b").tryGet().value().size(), 0u);
EXPECT_EQ(log("a", "b").tryGetW().value().size(), 0u);
}
// todo: hidden, free
2 changes: 1 addition & 1 deletion tests/func_listener_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ TEST_F(FuncListenerTest, listen) {
ValType::none_);
EXPECT_EQ(f.returnType(), ValType::none_);
EXPECT_EQ(func(self_name, "a").returnType(), ValType::none_);
EXPECT_EQ((*data_->func_store.getRecv(self_name, "a"_ss))->args.size(), 0u);
EXPECT_EQ((*data_->func_store.getRecv(self_name, "a"_ss))->args->size(), 0u);
EXPECT_EQ(f.args().size(), 0u);
EXPECT_EQ(func(self_name, "a").args().size(), 0u);

Expand Down
2 changes: 1 addition & 1 deletion tests/func_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ TEST_F(FuncTest, funcSet) {
ValType::none_);
EXPECT_EQ(f.returnType(), ValType::none_);
EXPECT_EQ(func(self_name, "a").returnType(), ValType::none_);
EXPECT_EQ((*data_->func_store.getRecv(self_name, "a"_ss))->args.size(), 0u);
EXPECT_EQ((*data_->func_store.getRecv(self_name, "a"_ss))->args->size(), 0u);
EXPECT_EQ(f.args().size(), 0u);
EXPECT_EQ(func(self_name, "a").args().size(), 0u);

Expand Down
Loading

0 comments on commit f4d5385

Please sign in to comment.