1105 testcase(
"disputes");
1107 using namespace csf;
1112 Tx
const txTrue{99};
1113 Tx
const txFalse{98};
1114 Tx
const txFollowingTrue{97};
1115 Tx
const txFollowingFalse{96};
1116 int const numPeers = 100;
1121 auto j = logs->journal(
"Test");
1130 Dispute proposingTrue{txTrue.id(),
true, numPeers, journal_};
1131 Dispute proposingFalse{txFalse.id(),
false, numPeers, journal_};
1132 Dispute followingTrue{
1133 txFollowingTrue.id(),
true, numPeers, journal_};
1134 Dispute followingFalse{
1135 txFollowingFalse.id(),
false, numPeers, journal_};
1136 BEAST_EXPECT(proposingTrue.ID() == 99);
1137 BEAST_EXPECT(proposingFalse.ID() == 98);
1138 BEAST_EXPECT(followingTrue.ID() == 97);
1139 BEAST_EXPECT(followingFalse.ID() == 96);
1142 for (
int i = 0; i < numPeers; ++i)
1144 BEAST_EXPECT(proposingTrue.setVote(PeerID(i), i < 50));
1145 BEAST_EXPECT(proposingFalse.setVote(PeerID(i), i < 50));
1146 BEAST_EXPECT(followingTrue.setVote(PeerID(i), i < 50));
1147 BEAST_EXPECT(followingFalse.setVote(PeerID(i), i < 50));
1150 BEAST_EXPECT(proposingTrue.setVote(PeerID(50),
true));
1151 BEAST_EXPECT(proposingFalse.setVote(PeerID(49),
false));
1152 BEAST_EXPECT(followingTrue.setVote(PeerID(50),
true));
1153 BEAST_EXPECT(followingFalse.setVote(PeerID(49),
false));
1156 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1157 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1158 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1159 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1161 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1163 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1165 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1167 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1168 BEAST_EXPECT(
clog->str() ==
"");
1171 BEAST_EXPECT(!proposingTrue.updateVote(5,
true, p));
1172 BEAST_EXPECT(!proposingFalse.updateVote(5,
true, p));
1173 BEAST_EXPECT(!followingTrue.updateVote(5,
false, p));
1174 BEAST_EXPECT(!followingFalse.updateVote(5,
false, p));
1176 BEAST_EXPECT(!proposingTrue.updateVote(10,
true, p));
1177 BEAST_EXPECT(!proposingFalse.updateVote(10,
true, p));
1178 BEAST_EXPECT(!followingTrue.updateVote(10,
false, p));
1179 BEAST_EXPECT(!followingFalse.updateVote(10,
false, p));
1183 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1185 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1187 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1189 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1190 BEAST_EXPECT(
clog->str() ==
"");
1194 BEAST_EXPECT(proposingTrue.updateVote(55,
true, p));
1195 BEAST_EXPECT(!proposingFalse.updateVote(55,
true, p));
1196 BEAST_EXPECT(!followingTrue.updateVote(55,
false, p));
1197 BEAST_EXPECT(!followingFalse.updateVote(55,
false, p));
1199 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1200 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1201 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1202 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1204 for (
int i = 0; i < 16; ++i)
1206 auto pTrue = PeerID(numPeers - i - 1);
1207 auto pFalse = PeerID(i);
1208 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1209 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1210 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1211 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1214 BEAST_EXPECT(proposingTrue.updateVote(60,
true, p));
1215 BEAST_EXPECT(!proposingFalse.updateVote(60,
true, p));
1216 BEAST_EXPECT(!followingTrue.updateVote(60,
false, p));
1217 BEAST_EXPECT(!followingFalse.updateVote(60,
false, p));
1219 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1220 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1221 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1222 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1225 BEAST_EXPECT(proposingTrue.updateVote(86,
true, p));
1226 BEAST_EXPECT(!proposingFalse.updateVote(86,
true, p));
1227 BEAST_EXPECT(!followingTrue.updateVote(86,
false, p));
1228 BEAST_EXPECT(!followingFalse.updateVote(86,
false, p));
1230 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1231 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1232 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1233 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1236 for (
int i = 16; i < 21; ++i)
1238 auto pTrue = PeerID(numPeers - i - 1);
1239 auto pFalse = PeerID(i);
1240 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1241 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1242 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1243 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1247 BEAST_EXPECT(proposingTrue.updateVote(90,
true, p));
1248 BEAST_EXPECT(!proposingFalse.updateVote(90,
true, p));
1249 BEAST_EXPECT(!followingTrue.updateVote(90,
false, p));
1250 BEAST_EXPECT(!followingFalse.updateVote(90,
false, p));
1252 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1253 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1254 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1255 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1258 BEAST_EXPECT(!proposingTrue.updateVote(150,
true, p));
1259 BEAST_EXPECT(!proposingFalse.updateVote(150,
true, p));
1260 BEAST_EXPECT(!followingTrue.updateVote(150,
false, p));
1261 BEAST_EXPECT(!followingFalse.updateVote(150,
false, p));
1263 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1264 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1265 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1266 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1269 BEAST_EXPECT(!proposingTrue.updateVote(190,
true, p));
1270 BEAST_EXPECT(!proposingFalse.updateVote(190,
true, p));
1271 BEAST_EXPECT(!followingTrue.updateVote(190,
false, p));
1272 BEAST_EXPECT(!followingFalse.updateVote(190,
false, p));
1274 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1275 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1276 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1277 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1281 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1283 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1285 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1287 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1288 BEAST_EXPECT(
clog->str() ==
"");
1291 BEAST_EXPECT(proposingTrue.updateVote(220,
true, p));
1292 BEAST_EXPECT(!proposingFalse.updateVote(220,
true, p));
1293 BEAST_EXPECT(!followingTrue.updateVote(220,
false, p));
1294 BEAST_EXPECT(!followingFalse.updateVote(220,
false, p));
1296 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1297 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1298 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1299 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1302 for (
int i = 21; i < 46; ++i)
1304 auto pTrue = PeerID(numPeers - i - 1);
1305 auto pFalse = PeerID(i);
1306 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1307 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1308 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1309 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1313 BEAST_EXPECT(proposingTrue.updateVote(250,
true, p));
1314 BEAST_EXPECT(!proposingFalse.updateVote(250,
true, p));
1315 BEAST_EXPECT(!followingTrue.updateVote(250,
false, p));
1316 BEAST_EXPECT(!followingFalse.updateVote(250,
false, p));
1318 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1319 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1320 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1321 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1323 for (peersUnchanged = 0; peersUnchanged < 6; ++peersUnchanged)
1326 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1328 !proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1330 !followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1332 !followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1333 BEAST_EXPECT(
clog->str() ==
"");
1336 auto expectStalled = [
this, &
clog](
1343 using namespace std::string_literals;
1345 auto const s =
clog->str();
1346 expect(s.find(
"stalled"), s, __FILE__, line);
1353 s.find(
"voting "s + (ourVote ?
"YES" :
"NO")) != s.npos,
1379 for (
int i = 0; i < 1; ++i)
1381 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1382 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1383 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1385 !followingFalse.updateVote(250 + 10 * i,
false, p));
1387 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1388 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1389 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1390 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1393 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1394 BEAST_EXPECT(
clog->str() ==
"");
1398 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1399 expectStalled(98,
false, 11, 0, 2, __LINE__);
1400 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1401 expectStalled(97,
true, 11, 0, 97, __LINE__);
1402 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1403 expectStalled(96,
false, 11, 0, 3, __LINE__);
1407 !proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1408 BEAST_EXPECTS(
clog->str() ==
"",
clog->str());
1413 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1414 expectStalled(98,
false, 11, 6, 2, __LINE__);
1416 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1417 expectStalled(97,
true, 11, 6, 97, __LINE__);
1419 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1420 expectStalled(96,
false, 11, 6, 3, __LINE__);
1422 for (
int i = 1; i < 3; ++i)
1424 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1425 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1426 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1428 !followingFalse.updateVote(250 + 10 * i,
false, p));
1430 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1431 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1432 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1433 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1437 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1438 BEAST_EXPECTS(
clog->str() ==
"",
clog->str());
1440 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1441 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1442 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1443 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1444 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1445 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1450 proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1451 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1454 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1455 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1457 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1458 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1460 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1461 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);
1463 for (
int i = 3; i < 5; ++i)
1465 BEAST_EXPECT(!proposingTrue.updateVote(250 + 10 * i,
true, p));
1466 BEAST_EXPECT(!proposingFalse.updateVote(250 + 10 * i,
true, p));
1467 BEAST_EXPECT(!followingTrue.updateVote(250 + 10 * i,
false, p));
1469 !followingFalse.updateVote(250 + 10 * i,
false, p));
1471 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1472 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1473 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1474 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1476 BEAST_EXPECT(proposingTrue.stalled(p,
true, 0, j,
clog));
1477 expectStalled(99,
true, 1 + i, 0, 97, __LINE__);
1478 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1479 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1480 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1481 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1482 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1483 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1486 proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1487 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1489 proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1490 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1492 followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1493 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1495 followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1496 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);