1075 using namespace csf;
1080 Tx
const txTrue{99};
1081 Tx
const txFalse{98};
1082 Tx
const txFollowingTrue{97};
1083 Tx
const txFollowingFalse{96};
1084 int const numPeers = 100;
1089 auto j = logs->journal(
"Test");
1098 Dispute proposingTrue{txTrue.id(),
true, numPeers,
journal_};
1099 Dispute proposingFalse{txFalse.id(),
false, numPeers,
journal_};
1100 Dispute followingTrue{txFollowingTrue.id(),
true, numPeers,
journal_};
1101 Dispute followingFalse{txFollowingFalse.id(),
false, numPeers,
journal_};
1102 BEAST_EXPECT(proposingTrue.id() == 99);
1103 BEAST_EXPECT(proposingFalse.id() == 98);
1104 BEAST_EXPECT(followingTrue.id() == 97);
1105 BEAST_EXPECT(followingFalse.id() == 96);
1108 for (
int i = 0; i < numPeers; ++i)
1110 BEAST_EXPECT(proposingTrue.setVote(PeerID(i), i < 50));
1111 BEAST_EXPECT(proposingFalse.setVote(PeerID(i), i < 50));
1112 BEAST_EXPECT(followingTrue.setVote(PeerID(i), i < 50));
1113 BEAST_EXPECT(followingFalse.setVote(PeerID(i), i < 50));
1116 BEAST_EXPECT(proposingTrue.setVote(PeerID(50),
true));
1117 BEAST_EXPECT(proposingFalse.setVote(PeerID(49),
false));
1118 BEAST_EXPECT(followingTrue.setVote(PeerID(50),
true));
1119 BEAST_EXPECT(followingFalse.setVote(PeerID(49),
false));
1122 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1123 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1124 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1125 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1126 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1127 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1128 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1129 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1130 BEAST_EXPECT(
clog->str().empty());
1133 BEAST_EXPECT(!proposingTrue.updateVote(5,
true, p));
1134 BEAST_EXPECT(!proposingFalse.updateVote(5,
true, p));
1135 BEAST_EXPECT(!followingTrue.updateVote(5,
false, p));
1136 BEAST_EXPECT(!followingFalse.updateVote(5,
false, p));
1138 BEAST_EXPECT(!proposingTrue.updateVote(10,
true, p));
1139 BEAST_EXPECT(!proposingFalse.updateVote(10,
true, p));
1140 BEAST_EXPECT(!followingTrue.updateVote(10,
false, p));
1141 BEAST_EXPECT(!followingFalse.updateVote(10,
false, p));
1144 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1145 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1146 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1147 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1148 BEAST_EXPECT(
clog->str().empty());
1152 BEAST_EXPECT(proposingTrue.updateVote(55,
true, p));
1153 BEAST_EXPECT(!proposingFalse.updateVote(55,
true, p));
1154 BEAST_EXPECT(!followingTrue.updateVote(55,
false, p));
1155 BEAST_EXPECT(!followingFalse.updateVote(55,
false, p));
1157 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1158 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1159 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1160 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1162 for (
int i = 0; i < 16; ++i)
1164 auto pTrue = PeerID(numPeers - i - 1);
1165 auto pFalse = PeerID(i);
1166 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1167 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1168 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1169 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1172 BEAST_EXPECT(proposingTrue.updateVote(60,
true, p));
1173 BEAST_EXPECT(!proposingFalse.updateVote(60,
true, p));
1174 BEAST_EXPECT(!followingTrue.updateVote(60,
false, p));
1175 BEAST_EXPECT(!followingFalse.updateVote(60,
false, p));
1177 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1178 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1179 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1180 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1183 BEAST_EXPECT(proposingTrue.updateVote(86,
true, p));
1184 BEAST_EXPECT(!proposingFalse.updateVote(86,
true, p));
1185 BEAST_EXPECT(!followingTrue.updateVote(86,
false, p));
1186 BEAST_EXPECT(!followingFalse.updateVote(86,
false, p));
1188 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1189 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1190 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1191 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1194 for (
int i = 16; i < 21; ++i)
1196 auto pTrue = PeerID(numPeers - i - 1);
1197 auto pFalse = PeerID(i);
1198 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1199 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1200 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1201 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1205 BEAST_EXPECT(proposingTrue.updateVote(90,
true, p));
1206 BEAST_EXPECT(!proposingFalse.updateVote(90,
true, p));
1207 BEAST_EXPECT(!followingTrue.updateVote(90,
false, p));
1208 BEAST_EXPECT(!followingFalse.updateVote(90,
false, p));
1210 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1211 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1212 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1213 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1216 BEAST_EXPECT(!proposingTrue.updateVote(150,
true, p));
1217 BEAST_EXPECT(!proposingFalse.updateVote(150,
true, p));
1218 BEAST_EXPECT(!followingTrue.updateVote(150,
false, p));
1219 BEAST_EXPECT(!followingFalse.updateVote(150,
false, p));
1221 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1222 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1223 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1224 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1227 BEAST_EXPECT(!proposingTrue.updateVote(190,
true, p));
1228 BEAST_EXPECT(!proposingFalse.updateVote(190,
true, p));
1229 BEAST_EXPECT(!followingTrue.updateVote(190,
false, p));
1230 BEAST_EXPECT(!followingFalse.updateVote(190,
false, p));
1232 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1233 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1234 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1235 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1238 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1239 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1240 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1241 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1242 BEAST_EXPECT(
clog->str().empty());
1245 BEAST_EXPECT(proposingTrue.updateVote(220,
true, p));
1246 BEAST_EXPECT(!proposingFalse.updateVote(220,
true, p));
1247 BEAST_EXPECT(!followingTrue.updateVote(220,
false, p));
1248 BEAST_EXPECT(!followingFalse.updateVote(220,
false, p));
1250 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1251 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1252 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1253 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1256 for (
int i = 21; i < 46; ++i)
1258 auto pTrue = PeerID(numPeers - i - 1);
1259 auto pFalse = PeerID(i);
1260 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1261 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1262 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1263 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1267 BEAST_EXPECT(proposingTrue.updateVote(250,
true, p));
1268 BEAST_EXPECT(!proposingFalse.updateVote(250,
true, p));
1269 BEAST_EXPECT(!followingTrue.updateVote(250,
false, p));
1270 BEAST_EXPECT(!followingFalse.updateVote(250,
false, p));
1272 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1273 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1274 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1275 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1277 for (peersUnchanged = 0; peersUnchanged < 6; ++peersUnchanged)
1279 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1280 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1281 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1282 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1283 BEAST_EXPECT(
clog->str().empty());
1286 auto expectStalled = [
this, &
clog](
1293 using namespace std::string_literals;
1295 auto const s =
clog->str();
1296 expect(s.find(
"stalled"), s, __FILE__, line);
1298 expect(s.contains(
"voting "s + (ourVote ?
"YES" :
"NO")), s, __FILE__, line);
1300 s.contains(
"for "s +
std::to_string(ourTime) +
" rounds."s), s, __FILE__, line);
1302 s.contains(
"votes in "s +
std::to_string(peerTime) +
" rounds."),
1314 for (
int i = 0; i < 1; ++i)
1316 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1317 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1318 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1319 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1321 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1322 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1323 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1324 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1327 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1328 BEAST_EXPECT(
clog->str().empty());
1332 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1333 expectStalled(98,
false, 11, 0, 2, __LINE__);
1334 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1335 expectStalled(97,
true, 11, 0, 97, __LINE__);
1336 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1337 expectStalled(96,
false, 11, 0, 3, __LINE__);
1340 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1341 BEAST_EXPECTS(
clog->str().empty(),
clog->str());
1345 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1346 expectStalled(98,
false, 11, 6, 2, __LINE__);
1347 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1348 expectStalled(97,
true, 11, 6, 97, __LINE__);
1349 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1350 expectStalled(96,
false, 11, 6, 3, __LINE__);
1352 for (
int i = 1; i < 3; ++i)
1354 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1355 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1356 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1357 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1359 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1360 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1361 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1362 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1366 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1367 BEAST_EXPECTS(
clog->str().empty(),
clog->str());
1369 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1370 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1371 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1372 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1373 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1374 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1378 BEAST_EXPECT(proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1379 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1381 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1382 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1383 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1384 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1385 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1386 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);
1388 for (
int i = 3; i < 5; ++i)
1390 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1391 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1392 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1393 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1395 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1396 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1397 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1398 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1400 BEAST_EXPECT(proposingTrue.stalled(p,
true, 0, j,
clog));
1401 expectStalled(99,
true, 1 + i, 0, 97, __LINE__);
1402 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1403 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1404 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1405 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1406 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1407 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1409 BEAST_EXPECT(proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1410 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1411 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1412 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1413 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1414 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1415 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1416 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);