1052 testcase(
"disputes");
1054 using namespace csf;
1059 Tx
const txTrue{99};
1060 Tx
const txFalse{98};
1061 Tx
const txFollowingTrue{97};
1062 Tx
const txFollowingFalse{96};
1063 int const numPeers = 100;
1068 auto j = logs->journal(
"Test");
1077 Dispute proposingTrue{txTrue.id(),
true, numPeers, journal_};
1078 Dispute proposingFalse{txFalse.id(),
false, numPeers, journal_};
1079 Dispute followingTrue{txFollowingTrue.id(),
true, numPeers, journal_};
1080 Dispute followingFalse{txFollowingFalse.id(),
false, numPeers, journal_};
1081 BEAST_EXPECT(proposingTrue.ID() == 99);
1082 BEAST_EXPECT(proposingFalse.ID() == 98);
1083 BEAST_EXPECT(followingTrue.ID() == 97);
1084 BEAST_EXPECT(followingFalse.ID() == 96);
1087 for (
int i = 0; i < numPeers; ++i)
1089 BEAST_EXPECT(proposingTrue.setVote(PeerID(i), i < 50));
1090 BEAST_EXPECT(proposingFalse.setVote(PeerID(i), i < 50));
1091 BEAST_EXPECT(followingTrue.setVote(PeerID(i), i < 50));
1092 BEAST_EXPECT(followingFalse.setVote(PeerID(i), i < 50));
1095 BEAST_EXPECT(proposingTrue.setVote(PeerID(50),
true));
1096 BEAST_EXPECT(proposingFalse.setVote(PeerID(49),
false));
1097 BEAST_EXPECT(followingTrue.setVote(PeerID(50),
true));
1098 BEAST_EXPECT(followingFalse.setVote(PeerID(49),
false));
1101 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1102 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1103 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1104 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1105 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1106 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1107 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1108 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1109 BEAST_EXPECT(
clog->str().empty());
1112 BEAST_EXPECT(!proposingTrue.updateVote(5,
true, p));
1113 BEAST_EXPECT(!proposingFalse.updateVote(5,
true, p));
1114 BEAST_EXPECT(!followingTrue.updateVote(5,
false, p));
1115 BEAST_EXPECT(!followingFalse.updateVote(5,
false, p));
1117 BEAST_EXPECT(!proposingTrue.updateVote(10,
true, p));
1118 BEAST_EXPECT(!proposingFalse.updateVote(10,
true, p));
1119 BEAST_EXPECT(!followingTrue.updateVote(10,
false, p));
1120 BEAST_EXPECT(!followingFalse.updateVote(10,
false, p));
1123 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1124 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1125 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1126 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1127 BEAST_EXPECT(
clog->str().empty());
1131 BEAST_EXPECT(proposingTrue.updateVote(55,
true, p));
1132 BEAST_EXPECT(!proposingFalse.updateVote(55,
true, p));
1133 BEAST_EXPECT(!followingTrue.updateVote(55,
false, p));
1134 BEAST_EXPECT(!followingFalse.updateVote(55,
false, p));
1136 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1137 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1138 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1139 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1141 for (
int i = 0; i < 16; ++i)
1143 auto pTrue = PeerID(numPeers - i - 1);
1144 auto pFalse = PeerID(i);
1145 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1146 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1147 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1148 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1151 BEAST_EXPECT(proposingTrue.updateVote(60,
true, p));
1152 BEAST_EXPECT(!proposingFalse.updateVote(60,
true, p));
1153 BEAST_EXPECT(!followingTrue.updateVote(60,
false, p));
1154 BEAST_EXPECT(!followingFalse.updateVote(60,
false, p));
1156 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1157 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1158 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1159 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1162 BEAST_EXPECT(proposingTrue.updateVote(86,
true, p));
1163 BEAST_EXPECT(!proposingFalse.updateVote(86,
true, p));
1164 BEAST_EXPECT(!followingTrue.updateVote(86,
false, p));
1165 BEAST_EXPECT(!followingFalse.updateVote(86,
false, p));
1167 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1168 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1169 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1170 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1173 for (
int i = 16; i < 21; ++i)
1175 auto pTrue = PeerID(numPeers - i - 1);
1176 auto pFalse = PeerID(i);
1177 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1178 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1179 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1180 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1184 BEAST_EXPECT(proposingTrue.updateVote(90,
true, p));
1185 BEAST_EXPECT(!proposingFalse.updateVote(90,
true, p));
1186 BEAST_EXPECT(!followingTrue.updateVote(90,
false, p));
1187 BEAST_EXPECT(!followingFalse.updateVote(90,
false, p));
1189 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1190 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1191 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1192 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1195 BEAST_EXPECT(!proposingTrue.updateVote(150,
true, p));
1196 BEAST_EXPECT(!proposingFalse.updateVote(150,
true, p));
1197 BEAST_EXPECT(!followingTrue.updateVote(150,
false, p));
1198 BEAST_EXPECT(!followingFalse.updateVote(150,
false, p));
1200 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1201 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1202 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1203 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1206 BEAST_EXPECT(!proposingTrue.updateVote(190,
true, p));
1207 BEAST_EXPECT(!proposingFalse.updateVote(190,
true, p));
1208 BEAST_EXPECT(!followingTrue.updateVote(190,
false, p));
1209 BEAST_EXPECT(!followingFalse.updateVote(190,
false, p));
1211 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1212 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1213 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1214 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1217 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1218 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1219 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1220 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1221 BEAST_EXPECT(
clog->str().empty());
1224 BEAST_EXPECT(proposingTrue.updateVote(220,
true, p));
1225 BEAST_EXPECT(!proposingFalse.updateVote(220,
true, p));
1226 BEAST_EXPECT(!followingTrue.updateVote(220,
false, p));
1227 BEAST_EXPECT(!followingFalse.updateVote(220,
false, p));
1229 BEAST_EXPECT(proposingTrue.getOurVote() ==
false);
1230 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1231 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1232 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1235 for (
int i = 21; i < 46; ++i)
1237 auto pTrue = PeerID(numPeers - i - 1);
1238 auto pFalse = PeerID(i);
1239 BEAST_EXPECT(proposingTrue.setVote(pTrue,
true));
1240 BEAST_EXPECT(proposingFalse.setVote(pFalse,
false));
1241 BEAST_EXPECT(followingTrue.setVote(pTrue,
true));
1242 BEAST_EXPECT(followingFalse.setVote(pFalse,
false));
1246 BEAST_EXPECT(proposingTrue.updateVote(250,
true, p));
1247 BEAST_EXPECT(!proposingFalse.updateVote(250,
true, p));
1248 BEAST_EXPECT(!followingTrue.updateVote(250,
false, p));
1249 BEAST_EXPECT(!followingFalse.updateVote(250,
false, p));
1251 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1252 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1253 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1254 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1256 for (peersUnchanged = 0; peersUnchanged < 6; ++peersUnchanged)
1258 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1259 BEAST_EXPECT(!proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1260 BEAST_EXPECT(!followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1261 BEAST_EXPECT(!followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1262 BEAST_EXPECT(
clog->str().empty());
1265 auto expectStalled = [
this, &
clog](
1272 using namespace std::string_literals;
1274 auto const s =
clog->str();
1275 expect(s.find(
"stalled"), s, __FILE__, line);
1276 expect(s.starts_with(
"Transaction "s +
std::to_string(txid)), s, __FILE__, line);
1277 expect(s.find(
"voting "s + (ourVote ?
"YES" :
"NO")) != s.npos, s, __FILE__, line);
1279 s.find(
"for "s +
std::to_string(ourTime) +
" rounds."s) != s.npos,
1284 s.find(
"votes in "s +
std::to_string(peerTime) +
" rounds.") != s.npos,
1296 for (
int i = 0; i < 1; ++i)
1298 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1299 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1300 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1301 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1303 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1304 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1305 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1306 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1309 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1310 BEAST_EXPECT(
clog->str().empty());
1314 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1315 expectStalled(98,
false, 11, 0, 2, __LINE__);
1316 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1317 expectStalled(97,
true, 11, 0, 97, __LINE__);
1318 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1319 expectStalled(96,
false, 11, 0, 3, __LINE__);
1322 BEAST_EXPECT(!proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1323 BEAST_EXPECTS(
clog->str().empty(),
clog->str());
1327 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1328 expectStalled(98,
false, 11, 6, 2, __LINE__);
1329 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1330 expectStalled(97,
true, 11, 6, 97, __LINE__);
1331 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1332 expectStalled(96,
false, 11, 6, 3, __LINE__);
1334 for (
int i = 1; i < 3; ++i)
1336 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1337 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1338 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1339 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1341 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1342 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1343 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1344 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1348 BEAST_EXPECT(!proposingTrue.stalled(p,
true, 0, j,
clog));
1349 BEAST_EXPECTS(
clog->str().empty(),
clog->str());
1351 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1352 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1353 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1354 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1355 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1356 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1360 BEAST_EXPECT(proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1361 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1363 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1364 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1365 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1366 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1367 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1368 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);
1370 for (
int i = 3; i < 5; ++i)
1372 BEAST_EXPECT(!proposingTrue.updateVote(250 + (10 * i),
true, p));
1373 BEAST_EXPECT(!proposingFalse.updateVote(250 + (10 * i),
true, p));
1374 BEAST_EXPECT(!followingTrue.updateVote(250 + (10 * i),
false, p));
1375 BEAST_EXPECT(!followingFalse.updateVote(250 + (10 * i),
false, p));
1377 BEAST_EXPECT(proposingTrue.getOurVote() ==
true);
1378 BEAST_EXPECT(proposingFalse.getOurVote() ==
false);
1379 BEAST_EXPECT(followingTrue.getOurVote() ==
true);
1380 BEAST_EXPECT(followingFalse.getOurVote() ==
false);
1382 BEAST_EXPECT(proposingTrue.stalled(p,
true, 0, j,
clog));
1383 expectStalled(99,
true, 1 + i, 0, 97, __LINE__);
1384 BEAST_EXPECT(proposingFalse.stalled(p,
true, 0, j,
clog));
1385 expectStalled(98,
false, 11 + i, 0, 2, __LINE__);
1386 BEAST_EXPECT(followingTrue.stalled(p,
false, 0, j,
clog));
1387 expectStalled(97,
true, 11 + i, 0, 97, __LINE__);
1388 BEAST_EXPECT(followingFalse.stalled(p,
false, 0, j,
clog));
1389 expectStalled(96,
false, 11 + i, 0, 3, __LINE__);
1391 BEAST_EXPECT(proposingTrue.stalled(p,
true, peersUnchanged, j,
clog));
1392 expectStalled(99,
true, 1 + i, 6, 97, __LINE__);
1393 BEAST_EXPECT(proposingFalse.stalled(p,
true, peersUnchanged, j,
clog));
1394 expectStalled(98,
false, 11 + i, 6, 2, __LINE__);
1395 BEAST_EXPECT(followingTrue.stalled(p,
false, peersUnchanged, j,
clog));
1396 expectStalled(97,
true, 11 + i, 6, 97, __LINE__);
1397 BEAST_EXPECT(followingFalse.stalled(p,
false, peersUnchanged, j,
clog));
1398 expectStalled(96,
false, 11 + i, 6, 3, __LINE__);