Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: blimp/net/helium/lww_register_unittest.cc

Issue 2400303002: Add LwwRegister CRDT (Closed)
Patch Set: Add LwwRegister and tests to build Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "blimp/net/helium/lww_register.h"
6
7 #include "blimp/common/proto/helium.pb.h"
8 #include "blimp/net/helium/vector_clock.h"
9 #include "blimp/net/helium/vector_clock_generator.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace blimp {
13 namespace {
14
15 class LwwRegisterTest : public testing::Test {
16 public:
17 void SetUp() override {
18 local_gen_ = base::MakeUnique<VectorClockGenerator>();
19 remote_gen_ = base::MakeUnique<VectorClockGenerator>();
20 local_client_wins_lww_register_ =
21 base::MakeUnique<LwwRegister<int, LwwBias::ClientWins>>(
22 local_gen_.get(), RunningAs::RunningAsClient);
23 remote_client_wins_lww_register_ =
24 base::MakeUnique<LwwRegister<int, LwwBias::ClientWins>>(
25 remote_gen_.get(), RunningAs::RunningAsEngine);
26 local_engine_wins_lww_register_ =
27 base::MakeUnique<LwwRegister<int, LwwBias::EngineWins>>(
28 local_gen_.get(), RunningAs::RunningAsClient);
29 remote_engine_wins_lww_register_ =
30 base::MakeUnique<LwwRegister<int, LwwBias::EngineWins>>(
31 remote_gen_.get(), RunningAs::RunningAsEngine);
32
33 lww_register_ = local_client_wins_lww_register_.get();
34 }
35
36 protected:
37 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset_;
38 std::unique_ptr<VectorClockGenerator> local_gen_;
39 std::unique_ptr<VectorClockGenerator> remote_gen_;
40 std::unique_ptr<LwwRegister<int, LwwBias::ClientWins>>
41 local_client_wins_lww_register_;
42 std::unique_ptr<LwwRegister<int, LwwBias::ClientWins>>
43 remote_client_wins_lww_register_;
44 std::unique_ptr<LwwRegister<int, LwwBias::EngineWins>>
45 local_engine_wins_lww_register_;
46 std::unique_ptr<LwwRegister<int, LwwBias::EngineWins>>
47 remote_engine_wins_lww_register_;
48 LwwRegister<int, LwwBias::ClientWins>* lww_register_;
49 };
scf 2016/10/10 19:45:47 It would be great if the test could be written a b
steimel 2016/10/11 16:39:17 Done.
50
51 TEST_F(LwwRegisterTest, SetSetsStateAndIncrementsLocalVersion) {
52 Revision current_local_revision = local_gen_->current().local_revision();
53 lww_register_->set(42);
54
55 EXPECT_EQ(42, lww_register_->state());
56 EXPECT_EQ(current_local_revision + 1, local_gen_->current().local_revision());
scf 2016/10/10 19:45:47 you probably don't want to make assumptions wrt co
steimel 2016/10/11 16:39:17 Done.
57 }
58
59 TEST_F(LwwRegisterTest, ModifiedSinceWorks) {
scf 2016/10/10 19:45:47 probably want to merge with the previous test.
steimel 2016/10/11 16:39:17 Done.
60 VectorClock earlier_revision = local_gen_->current();
61 lww_register_->set(229);
62 VectorClock current_revision = local_gen_->current();
63 VectorClock later_revision = VectorClock(current_revision);
64 later_revision.IncrementLocal();
scf 2016/10/10 19:45:47 i dont think you need this, if its greater than ea
steimel 2016/10/11 16:39:17 Done.
65
66 EXPECT_TRUE(lww_register_->ModifiedSince(earlier_revision));
67 EXPECT_FALSE(lww_register_->ModifiedSince(current_revision));
68 EXPECT_FALSE(lww_register_->ModifiedSince(later_revision));
69 }
70
71 TEST_F(LwwRegisterTest, CreateChangesetToCurrentReturnsMessageWithState) {
72 lww_register_->set(1992);
73 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
74 lww_register_->CreateChangesetToCurrent(remote_gen_->current());
75
76 EXPECT_EQ(1992, changeset->integer_value());
77 }
78
79 TEST_F(LwwRegisterTest, ApplyChangesetLaterChangesetChangesState) {
80 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
81 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
82 changeset->set_integer_value(111);
83 VectorClock from(remote_gen_->current());
84 VectorClock to(from);
85 to.IncrementLocal();
86 from = from.Invert();
87 to = to.Invert();
88
89 lww_register_->ApplyChangeset(from, to, std::move(changeset));
scf 2016/10/10 19:45:47 probably want to encapsulate this to something lik
steimel 2016/10/11 16:39:17 Done.
90
91 EXPECT_EQ(111, lww_register_->state());
92 }
93
94 TEST_F(LwwRegisterTest, ApplyChangesetEarlierChangesetDoesNotChangeState) {
95 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
96 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
97 changeset->set_integer_value(111);
98 VectorClock from(local_gen_->current());
99 VectorClock to(from);
100 from = from.Invert();
101 to = to.Invert();
102
103 lww_register_->set(20);
104
105 lww_register_->ApplyChangeset(from, to, std::move(changeset));
106
107 EXPECT_EQ(20, lww_register_->state());
108 }
109
110 TEST_F(LwwRegisterTest,
111 ApplyChangesetConflictClientWinsClientDoesNotChangeState) {
112 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
113 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
114 changeset->set_integer_value(8);
115 VectorClock from(remote_gen_->current());
116 VectorClock to(from);
117 to.IncrementLocal();
118 from = from.Invert();
119 to = to.Invert();
120 local_client_wins_lww_register_->set(29);
121
122 local_client_wins_lww_register_->ApplyChangeset(from, to,
123 std::move(changeset));
124
125 EXPECT_EQ(29, local_client_wins_lww_register_->state());
126 }
127
128 TEST_F(LwwRegisterTest, ApplyChangesetConflictClientWinsRemoteChangesState) {
129 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
130 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
131 changeset->set_integer_value(8);
132 VectorClock from(local_gen_->current());
133 VectorClock to(from);
134 to.IncrementLocal();
135 from = from.Invert();
136 to = to.Invert();
137 remote_client_wins_lww_register_->set(29);
138
139 remote_client_wins_lww_register_->ApplyChangeset(from, to,
140 std::move(changeset));
141
142 EXPECT_EQ(8, remote_client_wins_lww_register_->state());
143 }
144
145 TEST_F(LwwRegisterTest, ApplyChangesetConflictEngineWinsClientChangesState) {
146 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
147 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
148 changeset->set_integer_value(8);
149 VectorClock from(remote_gen_->current());
150 VectorClock to(from);
151 to.IncrementLocal();
152 from = from.Invert();
153 to = to.Invert();
154 local_engine_wins_lww_register_->set(29);
155
156 local_engine_wins_lww_register_->ApplyChangeset(from, to,
157 std::move(changeset));
158
159 EXPECT_EQ(8, local_engine_wins_lww_register_->state());
160 }
161
162 TEST_F(LwwRegisterTest,
163 ApplyChangesetConflictEngineWinsRemoteDoesNotChangeState) {
164 std::unique_ptr<proto::LwwRegisterChangesetMessage> changeset =
165 base::MakeUnique<proto::LwwRegisterChangesetMessage>();
166 changeset->set_integer_value(8);
167 VectorClock from(local_gen_->current());
168 VectorClock to(from);
169 to.IncrementLocal();
170 from = from.Invert();
171 to = to.Invert();
172 remote_engine_wins_lww_register_->set(29);
173
174 remote_engine_wins_lww_register_->ApplyChangeset(from, to,
175 std::move(changeset));
176
177 EXPECT_EQ(29, remote_engine_wins_lww_register_->state());
178 }
179
180 TEST_F(LwwRegisterTest, ApplyingCreatedChangesetWorks) {
181 VectorClock from = remote_gen_->current();
182 remote_engine_wins_lww_register_->set(29);
183 VectorClock to = remote_gen_->current();
184 from = from.Invert();
185 to = to.Invert();
186 local_engine_wins_lww_register_->ApplyChangeset(
187 from, to,
188 remote_engine_wins_lww_register_->CreateChangesetToCurrent(from));
189 EXPECT_EQ(29, local_engine_wins_lww_register_->state());
190 }
191
192 } // namespace
193 } // namespace blimp
OLDNEW
« blimp/net/helium/lww_register_serializer.h ('K') | « blimp/net/helium/lww_register_serializer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698