Skip to content

Commit 015509a

Browse files
HoOngEemajecty
authored andcommitted
Add test case: ban from the prisoners
1 parent 98748e9 commit 015509a

File tree

1 file changed

+104
-2
lines changed

1 file changed

+104
-2
lines changed

test/src/e2e.dynval/dv.double-vote.test.ts

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { faucetAddress, faucetSecret } from "../helper/constants";
3535
import { PromiseExpect } from "../helper/promise";
3636
import { Signer } from "../helper/spawn";
3737
import CodeChain from "../helper/spawn";
38-
import { withNodes, setTermTestTimeout } from "./setup";
38+
import { withNodes, setTermTestTimeout, findNode } from "./setup";
3939

4040
chai.use(chaiAsPromised);
4141

@@ -132,7 +132,6 @@ async function expectPossibleAuthors(
132132

133133
// FIXME: neeeds to use common refactored function when gets banned state accounts
134134
async function ensureAliceIsBanned(sdk: SDK, blockNumber: number) {
135-
await expectPossibleAuthors(sdk, otherDynValidators, blockNumber);
136135
const bannedAfter = (await stake.getBanned(sdk, blockNumber)).map(
137136
platformAddr => platformAddr.toString()
138137
);
@@ -237,6 +236,109 @@ describe("Report Double Vote", function() {
237236
});
238237
});
239238

239+
describe("Ban from the jailed state", async function() {
240+
const { nodes } = withNodes(this, {
241+
promiseExpect,
242+
validators: allDynValidators.map(signer => ({
243+
signer,
244+
delegation: 5_000,
245+
deposit: 10_000_000
246+
})),
247+
onBeforeEnable: async nodes => {
248+
// Kill the alice node first to make alice not to participate in the term 1.
249+
await findNode(nodes, alice).clean();
250+
}
251+
});
252+
253+
async function ensureAliceIsJailed(sdk: SDK, bestBlockNumber: number) {
254+
const jailedBefore = (await stake.getJailed(
255+
sdk,
256+
bestBlockNumber
257+
)).map(prisoner => prisoner.address.toString());
258+
expect(jailedBefore).to.includes(alice.platformAddress.toString());
259+
}
260+
261+
async function ensureAliceIsReleased(
262+
sdk: SDK,
263+
bestBlockNumber: number
264+
) {
265+
const jailedAfter = (await stake.getJailed(
266+
sdk,
267+
bestBlockNumber
268+
)).map(prisoner => prisoner.address.toString());
269+
expect(jailedAfter).not.to.includes(
270+
alice.platformAddress.toString()
271+
);
272+
}
273+
274+
it("alice should be banned from the prisoners", async function() {
275+
const termWaiter = setTermTestTimeout(this, {
276+
terms: 1.5
277+
});
278+
279+
const checkingNode = nodes[1];
280+
await termWaiter.waitNodeUntilTerm(checkingNode, {
281+
target: 2,
282+
termPeriods: 1
283+
});
284+
const blockNumber = await checkingNode.sdk.rpc.chain.getBestBlockNumber();
285+
const termMetadata = (await stake.getTermMetadata(
286+
checkingNode.sdk,
287+
blockNumber
288+
))!;
289+
expect(termMetadata!.currentTermId).to.be.equals(2);
290+
291+
await expectPossibleAuthors(checkingNode.sdk, otherDynValidators);
292+
await ensureAliceIsJailed(
293+
checkingNode.sdk,
294+
termMetadata.lastTermFinishedBlockNumber
295+
);
296+
297+
const aliceIdxInPrevTerm = await getAliceIndex(
298+
checkingNode.sdk,
299+
termMetadata.lastTermFinishedBlockNumber
300+
);
301+
302+
const [message1, message2] = createDoubleVoteMessages(
303+
{
304+
height: termMetadata.lastTermFinishedBlockNumber,
305+
view: 0,
306+
step: "precommit",
307+
privKey: alice.privateKey,
308+
signerIdx: aliceIdxInPrevTerm
309+
},
310+
H256.ensure(
311+
"a556240c3ac4f33acbf78b33235ce13bc359bf96a01df5cc674539ae3b4978d0"
312+
),
313+
H256.ensure(
314+
"9900a2c6f1166026013f76fd7c366846265fa15edcfe06c88fc1a87b79e9b787"
315+
)
316+
);
317+
318+
const reportTx = createReportDoubleVoteTransaction(
319+
checkingNode.sdk,
320+
message1,
321+
message2
322+
);
323+
const reportTxHash = await checkingNode.sdk.rpc.chain.sendSignedTransaction(
324+
reportTx.sign({
325+
secret: faucetSecret,
326+
seq: await checkingNode.sdk.rpc.chain.getSeq(faucetAddress),
327+
fee: 10
328+
})
329+
);
330+
const blockNumberAfterReport = await waitUntilAliceGetBanned(
331+
checkingNode,
332+
reportTxHash
333+
);
334+
await ensureAliceIsBanned(checkingNode.sdk, blockNumberAfterReport);
335+
await ensureAliceIsReleased(
336+
checkingNode.sdk,
337+
blockNumberAfterReport
338+
);
339+
});
340+
});
341+
240342
afterEach(async function() {
241343
promiseExpect.checkFulfilled();
242344
});

0 commit comments

Comments
 (0)