1124 testcase(
"disputes");
1126 using namespace csf;
1131 Tx
const txTrue{99};
1132 Tx
const txFalse{98};
1133 Tx
const txFollowingTrue{97};
1134 Tx
const txFollowingFalse{96};
1135 int const numPeers = 100;
1140 auto j = logs->journal(
"Test");
1149 Dispute proposingTrue{txTrue.id(),
true, numPeers, journal_};
1150 Dispute proposingFalse{txFalse.id(),
false, numPeers, journal_};
1151 Dispute followingTrue{
1152 txFollowingTrue.id(),
true, numPeers, journal_};
1153 Dispute followingFalse{
1154 txFollowingFalse.id(),
false, numPeers, journal_};
1155 BEAST_EXPECT(proposingTrue.ID() == 99);
1156 BEAST_EXPECT(proposingFalse.ID() == 98);
1157 BEAST_EXPECT(followingTrue.ID() == 97);
1158 BEAST_EXPECT(followingFalse.ID() == 96);
1161 for (
int i = 0; i < numPeers; ++i)
1163 BEAST_EXPECT(proposingTrue.setVote(PeerID(i), i < 50));
1164 BEAST_EXPECT(proposingFalse.setVote(PeerID(i), i < 50));
1165 BEAST_EXPECT(followingTrue.setVote(PeerID(i), i < 50));
1166 BEAST_EXPECT(followingFalse.setVote(PeerID(i), i < 50));
1169 BEAST_EXPECT(proposingTrue.setVote(PeerID(50),
true));
1170 BEAST_EXPECT(proposingFalse.setVote(PeerID(49),
false));
1171 BEAST_EXPECT(followingTrue.setVote(PeerID(50),
true));
1172 BEAST_EXPECT(followingFalse.setVote(PeerID(49),
false));
1175 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1176 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1177 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1178 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1180 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1182 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1184 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1186 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1187 BEAST_EXPECT(
clog->str() ==
"");
1190 BEAST_EXPECT(!proposingTrue.updateVote(5,
true, p));
1191 BEAST_EXPECT(!proposingFalse.updateVote(5,
true, p));
1192 BEAST_EXPECT(!followingTrue.updateVote(5,
false, p));
1193 BEAST_EXPECT(!followingFalse.updateVote(5,
false, p));
1195 BEAST_EXPECT(!proposingTrue.updateVote(10,
true, p));
1196 BEAST_EXPECT(!proposingFalse.updateVote(10,
true, p));
1197 BEAST_EXPECT(!followingTrue.updateVote(10,
false, p));
1198 BEAST_EXPECT(!followingFalse.updateVote(10,
false, p));
1202 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1204 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1206 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1208 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1209 BEAST_EXPECT(
clog->str() ==
"");
1213 BEAST_EXPECT(proposingTrue.updateVote(55,
true, p));
1214 BEAST_EXPECT(!proposingFalse.updateVote(55,
true, p));
1215 BEAST_EXPECT(!followingTrue.updateVote(55,
false, p));
1216 BEAST_EXPECT(!followingFalse.updateVote(55,
false, p));
1218 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1219 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1220 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1221 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1223 for (
int i = 0; i < 16; ++i)
1225 auto pTrue = PeerID(numPeers - i - 1);
1226 auto pFalse = PeerID(i);
1227 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1228 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1229 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1230 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1233 BEAST_EXPECT(proposingTrue.updateVote(60,
true, p));
1234 BEAST_EXPECT(!proposingFalse.updateVote(60,
true, p));
1235 BEAST_EXPECT(!followingTrue.updateVote(60,
false, p));
1236 BEAST_EXPECT(!followingFalse.updateVote(60,
false, p));
1238 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1239 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1240 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1241 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1244 BEAST_EXPECT(proposingTrue.updateVote(86,
true, p));
1245 BEAST_EXPECT(!proposingFalse.updateVote(86,
true, p));
1246 BEAST_EXPECT(!followingTrue.updateVote(86,
false, p));
1247 BEAST_EXPECT(!followingFalse.updateVote(86,
false, p));
1249 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1250 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1251 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1252 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1255 for (
int i = 16; i < 21; ++i)
1257 auto pTrue = PeerID(numPeers - i - 1);
1258 auto pFalse = PeerID(i);
1259 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1260 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1261 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1262 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1266 BEAST_EXPECT(proposingTrue.updateVote(90,
true, p));
1267 BEAST_EXPECT(!proposingFalse.updateVote(90,
true, p));
1268 BEAST_EXPECT(!followingTrue.updateVote(90,
false, p));
1269 BEAST_EXPECT(!followingFalse.updateVote(90,
false, p));
1271 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1272 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1273 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1274 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1277 BEAST_EXPECT(!proposingTrue.updateVote(150,
true, p));
1278 BEAST_EXPECT(!proposingFalse.updateVote(150,
true, p));
1279 BEAST_EXPECT(!followingTrue.updateVote(150,
false, p));
1280 BEAST_EXPECT(!followingFalse.updateVote(150,
false, p));
1282 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1283 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1284 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1285 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1288 BEAST_EXPECT(!proposingTrue.updateVote(190,
true, p));
1289 BEAST_EXPECT(!proposingFalse.updateVote(190,
true, p));
1290 BEAST_EXPECT(!followingTrue.updateVote(190,
false, p));
1291 BEAST_EXPECT(!followingFalse.updateVote(190,
false, p));
1293 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1294 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1295 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1296 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1300 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1302 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1304 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1306 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1307 BEAST_EXPECT(
clog->str() ==
"");
1310 BEAST_EXPECT(proposingTrue.updateVote(220,
true, p));
1311 BEAST_EXPECT(!proposingFalse.updateVote(220,
true, p));
1312 BEAST_EXPECT(!followingTrue.updateVote(220,
false, p));
1313 BEAST_EXPECT(!followingFalse.updateVote(220,
false, p));
1315 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1316 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1317 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1318 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1321 for (
int i = 21; i < 46; ++i)
1323 auto pTrue = PeerID(numPeers - i - 1);
1324 auto pFalse = PeerID(i);
1325 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1326 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1327 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1328 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1332 BEAST_EXPECT(proposingTrue.updateVote(250,
true, p));
1333 BEAST_EXPECT(!proposingFalse.updateVote(250,
true, p));
1334 BEAST_EXPECT(!followingTrue.updateVote(250,
false, p));
1335 BEAST_EXPECT(!followingFalse.updateVote(250,
false, p));
1337 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1338 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1339 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1340 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1342 for (peersUnchanged = 0; peersUnchanged < 6; ++peersUnchanged)
1345 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1347 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1349 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1351 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1352 BEAST_EXPECT(
clog->str() ==
"");
1355 auto expectStalled = [
this, &
clog](
1362 using namespace std::string_literals;
1364 auto const s =
clog->str();
1365 expect(s.find(
"stalled"), s, __FILE__, line);
1372 s.find(
"voting "s + (ourVote ?
"YES" :
"NO")) != s.npos,
1398 for (
int i = 0; i < 1; ++i)
1400 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1401 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1402 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1404 !followingFalse.updateVote(250 + 10 * i,
false, p));
1406 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1407 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1408 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1409 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1412 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1413 BEAST_EXPECT(
clog->str() ==
"");
1417 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1418 expectStalled(98,
false, 11, 0, 2, __LINE__);
1419 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1420 expectStalled(97,
true, 11, 0, 97, __LINE__);
1421 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1422 expectStalled(96,
false, 11, 0, 3, __LINE__);
1426 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1427 BEAST_EXPECTS(
clog->str() ==
"",
clog->str());
1432 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1433 expectStalled(98,
false, 11, 6, 2, __LINE__);
1435 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1436 expectStalled(97,
true, 11, 6, 97, __LINE__);
1438 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1439 expectStalled(96,
false, 11, 6, 3, __LINE__);
1441 for (
int i = 1; i < 3; ++i)
1443 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1444 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1445 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1447 !followingFalse.updateVote(250 + 10 * i,
false, p));
1449 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1450 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1451 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1452 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1456 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1457 BEAST_EXPECTS(
clog->str() ==
"",
clog->str());
1459 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1460 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1461 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1462 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1463 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1464 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1469 proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1470 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1473 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1474 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1476 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1477 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1479 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1480 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);
1482 for (
int i = 3; i < 5; ++i)
1484 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1485 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1486 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1488 !followingFalse.updateVote(250 + 10 * i,
false, p));
1490 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1491 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1492 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1493 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1495 BEAST_EXPECT(proposingTrue.stalled(p,
true, 0, j,
clog));
1496 expectStalled(99,
true, 1 + i, 0, 97, __LINE__);
1497 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1498 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1499 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1500 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1501 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1502 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1505 proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1506 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1508 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1509 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1511 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1512 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1514 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1515 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);