18
18
19
19
use clap:: Parser ;
20
20
use color_eyre:: eyre;
21
- use polkadot_cli:: Cli ;
22
21
23
22
pub ( crate ) mod interceptor;
24
23
pub ( crate ) mod shared;
@@ -33,9 +32,9 @@ use variants::*;
33
32
#[ clap( rename_all = "kebab-case" ) ]
34
33
enum NemesisVariant {
35
34
/// Suggest a candidate with an invalid proof of validity.
36
- SuggestGarbageCandidate ( Cli ) ,
35
+ SuggestGarbageCandidate ( SuggestGarbageCandidateOptions ) ,
37
36
/// Back a candidate with a specifically crafted proof of validity.
38
- BackGarbageCandidate ( Cli ) ,
37
+ BackGarbageCandidate ( BackGarbageCandidateOptions ) ,
39
38
/// Delayed disputing of ancestors that are perfectly fine.
40
39
DisputeAncestor ( DisputeAncestorOptions ) ,
41
40
@@ -62,16 +61,31 @@ impl MalusCli {
62
61
fn launch ( self ) -> eyre:: Result < ( ) > {
63
62
let finality_delay = self . finality_delay ;
64
63
match self . variant {
65
- NemesisVariant :: BackGarbageCandidate ( cli) =>
66
- polkadot_cli:: run_node ( cli, BackGarbageCandidate , finality_delay) ?,
67
- NemesisVariant :: SuggestGarbageCandidate ( cli) =>
68
- polkadot_cli:: run_node ( cli, BackGarbageCandidateWrapper , finality_delay) ?,
64
+ NemesisVariant :: BackGarbageCandidate ( opts) => {
65
+ let BackGarbageCandidateOptions { percentage, cli } = opts;
66
+
67
+ polkadot_cli:: run_node ( cli, BackGarbageCandidates { percentage } , finality_delay) ?
68
+ } ,
69
+ NemesisVariant :: SuggestGarbageCandidate ( opts) => {
70
+ let SuggestGarbageCandidateOptions { percentage, cli } = opts;
71
+
72
+ polkadot_cli:: run_node (
73
+ cli,
74
+ SuggestGarbageCandidates { percentage } ,
75
+ finality_delay,
76
+ ) ?
77
+ } ,
69
78
NemesisVariant :: DisputeAncestor ( opts) => {
70
- let DisputeAncestorOptions { fake_validation, fake_validation_error, cli } = opts;
79
+ let DisputeAncestorOptions {
80
+ fake_validation,
81
+ fake_validation_error,
82
+ percentage,
83
+ cli,
84
+ } = opts;
71
85
72
86
polkadot_cli:: run_node (
73
87
cli,
74
- DisputeValidCandidates { fake_validation, fake_validation_error } ,
88
+ DisputeValidCandidates { fake_validation, fake_validation_error, percentage } ,
75
89
finality_delay,
76
90
) ?
77
91
} ,
@@ -129,4 +143,77 @@ mod tests {
129
143
assert!( run. cli. run. base. bob) ;
130
144
} ) ;
131
145
}
146
+
147
+ #[ test]
148
+ fn percentage_works_suggest_garbage ( ) {
149
+ let cli = MalusCli :: try_parse_from ( IntoIterator :: into_iter ( [
150
+ "malus" ,
151
+ "suggest-garbage-candidate" ,
152
+ "--percentage" ,
153
+ "100" ,
154
+ "--bob" ,
155
+ ] ) )
156
+ . unwrap ( ) ;
157
+ assert_matches:: assert_matches!( cli, MalusCli {
158
+ variant: NemesisVariant :: SuggestGarbageCandidate ( run) ,
159
+ ..
160
+ } => {
161
+ assert!( run. cli. run. base. bob) ;
162
+ } ) ;
163
+ }
164
+
165
+ #[ test]
166
+ fn percentage_works_dispute_ancestor ( ) {
167
+ let cli = MalusCli :: try_parse_from ( IntoIterator :: into_iter ( [
168
+ "malus" ,
169
+ "dispute-ancestor" ,
170
+ "--percentage" ,
171
+ "100" ,
172
+ "--bob" ,
173
+ ] ) )
174
+ . unwrap ( ) ;
175
+ assert_matches:: assert_matches!( cli, MalusCli {
176
+ variant: NemesisVariant :: DisputeAncestor ( run) ,
177
+ ..
178
+ } => {
179
+ assert!( run. cli. run. base. bob) ;
180
+ } ) ;
181
+ }
182
+
183
+ #[ test]
184
+ fn percentage_works_back_garbage ( ) {
185
+ let cli = MalusCli :: try_parse_from ( IntoIterator :: into_iter ( [
186
+ "malus" ,
187
+ "back-garbage-candidate" ,
188
+ "--percentage" ,
189
+ "100" ,
190
+ "--bob" ,
191
+ ] ) )
192
+ . unwrap ( ) ;
193
+ assert_matches:: assert_matches!( cli, MalusCli {
194
+ variant: NemesisVariant :: BackGarbageCandidate ( run) ,
195
+ ..
196
+ } => {
197
+ assert!( run. cli. run. base. bob) ;
198
+ } ) ;
199
+ }
200
+
201
+ #[ test]
202
+ #[ should_panic]
203
+ fn validate_range_for_percentage ( ) {
204
+ let cli = MalusCli :: try_parse_from ( IntoIterator :: into_iter ( [
205
+ "malus" ,
206
+ "suggest-garbage-candidate" ,
207
+ "--percentage" ,
208
+ "101" ,
209
+ "--bob" ,
210
+ ] ) )
211
+ . unwrap ( ) ;
212
+ assert_matches:: assert_matches!( cli, MalusCli {
213
+ variant: NemesisVariant :: DisputeAncestor ( run) ,
214
+ ..
215
+ } => {
216
+ assert!( run. cli. run. base. bob) ;
217
+ } ) ;
218
+ }
132
219
}
0 commit comments