Skip to content

Commit e62cd5c

Browse files
test: add NameTooLong aac test, #6627
1 parent dc157e4 commit e62cd5c

File tree

2 files changed

+234
-4
lines changed

2 files changed

+234
-4
lines changed

stackslib/src/chainstate/tests/parse_tests.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1515

1616
/// This module contains consensus tests related to Clarity Parse errors.
17-
use clarity::vm::ast::parser::v2::MAX_NESTING_DEPTH;
17+
use clarity::vm::ast::parser::v2::{MAX_NESTING_DEPTH, MAX_STRING_LEN};
1818
use clarity::vm::ast::stack_depth_checker::AST_CALL_STACK_DEPTH_BUFFER;
1919
use clarity::vm::MAX_CALL_STACK_DEPTH;
20-
#[allow(unused_imports)] // Just used for documentation purpose
21-
use clarity::vm::{ast::errors::ParseErrors, representations::ContractName};
20+
//#[allow(unused_imports)] // Just used for documentation purpose
21+
use clarity::vm::ast::errors::ParseErrors;
2222

2323
use crate::chainstate::tests::consensus::contract_deploy_consensus_test;
2424

@@ -256,6 +256,20 @@ fn test_unexpected_token() {
256256
);
257257
}
258258

259+
/// ParserError: [`ParseErrors::NameTooLong`]
260+
/// Caused by: identifier longer than [`MAX_STRING_LEN`]
261+
/// Outcome: block accepted
262+
#[test]
263+
fn test_name_too_long() {
264+
contract_deploy_consensus_test!(
265+
contract_name: "my-contract",
266+
contract_code: &{
267+
let name = "n".repeat(MAX_STRING_LEN + 1);
268+
format!("(define-public ({name}) (ok u1))")
269+
},
270+
);
271+
}
272+
259273
fn variant_coverage_report(variant: ParseErrors) {
260274
enum VariantCoverage {
261275
Unreachable_Functionally,
@@ -300,7 +314,7 @@ fn variant_coverage_report(variant: ParseErrors) {
300314
IllegalTraitName(_) => TODO,
301315
InvalidPrincipalLiteral => TODO,
302316
InvalidBuffer => TODO,
303-
NameTooLong(_) => TODO,
317+
NameTooLong(_) => Tested,
304318
UnexpectedToken(_) => Tested,
305319
TupleColonExpectedv2 => TODO,
306320
TupleCommaExpectedv2 => TODO,
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
---
2+
source: stackslib/src/chainstate/tests/parse_tests.rs
3+
expression: result
4+
---
5+
[
6+
Success(ExpectedBlockOutput(
7+
marf_hash: "ce3a6dbe78916361d949029be0b513a16af9d39c041c8296f31cae195c873eeb",
8+
evaluated_epoch: Epoch32,
9+
transactions: [
10+
ExpectedTransactionOutput(
11+
tx: "SmartContract(name: my-contract-Epoch3_2-Clarity1, code_body: [..], clarity_version: Some(Clarity1))",
12+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
13+
return_type: Response(ResponseData(
14+
committed: false,
15+
data: Optional(OptionalData(
16+
data: None,
17+
)),
18+
)),
19+
cost: ExecutionCost(
20+
write_length: 0,
21+
write_count: 0,
22+
read_length: 0,
23+
read_count: 0,
24+
runtime: 4266,
25+
),
26+
),
27+
],
28+
total_block_cost: ExecutionCost(
29+
write_length: 0,
30+
write_count: 0,
31+
read_length: 0,
32+
read_count: 0,
33+
runtime: 4266,
34+
),
35+
)),
36+
Success(ExpectedBlockOutput(
37+
marf_hash: "f20eec13b5f50b5488628255c831ea1cd76f82ea690812b97b32cb3445980dd2",
38+
evaluated_epoch: Epoch32,
39+
transactions: [
40+
ExpectedTransactionOutput(
41+
tx: "SmartContract(name: my-contract-Epoch3_2-Clarity2, code_body: [..], clarity_version: Some(Clarity2))",
42+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
43+
return_type: Response(ResponseData(
44+
committed: false,
45+
data: Optional(OptionalData(
46+
data: None,
47+
)),
48+
)),
49+
cost: ExecutionCost(
50+
write_length: 0,
51+
write_count: 0,
52+
read_length: 0,
53+
read_count: 0,
54+
runtime: 4266,
55+
),
56+
),
57+
],
58+
total_block_cost: ExecutionCost(
59+
write_length: 0,
60+
write_count: 0,
61+
read_length: 0,
62+
read_count: 0,
63+
runtime: 4266,
64+
),
65+
)),
66+
Success(ExpectedBlockOutput(
67+
marf_hash: "ef12e7ccde7b9e55b58c90b770042fbba7bb45db5bf1a79602c5a87621ec66e1",
68+
evaluated_epoch: Epoch32,
69+
transactions: [
70+
ExpectedTransactionOutput(
71+
tx: "SmartContract(name: my-contract-Epoch3_2-Clarity3, code_body: [..], clarity_version: Some(Clarity3))",
72+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
73+
return_type: Response(ResponseData(
74+
committed: false,
75+
data: Optional(OptionalData(
76+
data: None,
77+
)),
78+
)),
79+
cost: ExecutionCost(
80+
write_length: 0,
81+
write_count: 0,
82+
read_length: 0,
83+
read_count: 0,
84+
runtime: 4266,
85+
),
86+
),
87+
],
88+
total_block_cost: ExecutionCost(
89+
write_length: 0,
90+
write_count: 0,
91+
read_length: 0,
92+
read_count: 0,
93+
runtime: 4266,
94+
),
95+
)),
96+
Success(ExpectedBlockOutput(
97+
marf_hash: "f6de6f4c9fa822b6d3f70b5d4f1c90ae96199fbe5843b351c52acea71c6064da",
98+
evaluated_epoch: Epoch33,
99+
transactions: [
100+
ExpectedTransactionOutput(
101+
tx: "SmartContract(name: my-contract-Epoch3_3-Clarity1, code_body: [..], clarity_version: Some(Clarity1))",
102+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
103+
return_type: Response(ResponseData(
104+
committed: false,
105+
data: Optional(OptionalData(
106+
data: None,
107+
)),
108+
)),
109+
cost: ExecutionCost(
110+
write_length: 0,
111+
write_count: 0,
112+
read_length: 0,
113+
read_count: 0,
114+
runtime: 4266,
115+
),
116+
),
117+
],
118+
total_block_cost: ExecutionCost(
119+
write_length: 0,
120+
write_count: 0,
121+
read_length: 0,
122+
read_count: 0,
123+
runtime: 4266,
124+
),
125+
)),
126+
Success(ExpectedBlockOutput(
127+
marf_hash: "c0927e01324b2e05befe6e1bdfbfb81862d9ae8a4daba805fa243c6565597448",
128+
evaluated_epoch: Epoch33,
129+
transactions: [
130+
ExpectedTransactionOutput(
131+
tx: "SmartContract(name: my-contract-Epoch3_3-Clarity2, code_body: [..], clarity_version: Some(Clarity2))",
132+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
133+
return_type: Response(ResponseData(
134+
committed: false,
135+
data: Optional(OptionalData(
136+
data: None,
137+
)),
138+
)),
139+
cost: ExecutionCost(
140+
write_length: 0,
141+
write_count: 0,
142+
read_length: 0,
143+
read_count: 0,
144+
runtime: 4266,
145+
),
146+
),
147+
],
148+
total_block_cost: ExecutionCost(
149+
write_length: 0,
150+
write_count: 0,
151+
read_length: 0,
152+
read_count: 0,
153+
runtime: 4266,
154+
),
155+
)),
156+
Success(ExpectedBlockOutput(
157+
marf_hash: "d8966bd79892eb5a17be027cd67465089945d691fba859335fd58ceae5915b65",
158+
evaluated_epoch: Epoch33,
159+
transactions: [
160+
ExpectedTransactionOutput(
161+
tx: "SmartContract(name: my-contract-Epoch3_3-Clarity3, code_body: [..], clarity_version: Some(Clarity3))",
162+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
163+
return_type: Response(ResponseData(
164+
committed: false,
165+
data: Optional(OptionalData(
166+
data: None,
167+
)),
168+
)),
169+
cost: ExecutionCost(
170+
write_length: 0,
171+
write_count: 0,
172+
read_length: 0,
173+
read_count: 0,
174+
runtime: 4266,
175+
),
176+
),
177+
],
178+
total_block_cost: ExecutionCost(
179+
write_length: 0,
180+
write_count: 0,
181+
read_length: 0,
182+
read_count: 0,
183+
runtime: 4266,
184+
),
185+
)),
186+
Success(ExpectedBlockOutput(
187+
marf_hash: "68b36add6ed58a89a2dab505d542bf3626e48a14befb3e0ab3e95f196934c474",
188+
evaluated_epoch: Epoch33,
189+
transactions: [
190+
ExpectedTransactionOutput(
191+
tx: "SmartContract(name: my-contract-Epoch3_3-Clarity4, code_body: [..], clarity_version: Some(Clarity4))",
192+
vm_error: "Some(illegal name (too long), \'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn\') [NON-CONSENSUS BREAKING]",
193+
return_type: Response(ResponseData(
194+
committed: false,
195+
data: Optional(OptionalData(
196+
data: None,
197+
)),
198+
)),
199+
cost: ExecutionCost(
200+
write_length: 0,
201+
write_count: 0,
202+
read_length: 0,
203+
read_count: 0,
204+
runtime: 4266,
205+
),
206+
),
207+
],
208+
total_block_cost: ExecutionCost(
209+
write_length: 0,
210+
write_count: 0,
211+
read_length: 0,
212+
read_count: 0,
213+
runtime: 4266,
214+
),
215+
)),
216+
]

0 commit comments

Comments
 (0)