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__);