1- import { computeTemplateAccesses } from './access-recorder' ;
1+ import { AccessRecorderEngine } from './access-recorder' ;
22
33describe ( 'access-recorder.ts' , ( ) => {
4+ const engine = new AccessRecorderEngine ( [ ] ) ;
45 describe ( 'computeTemplateAccesses()' , ( ) => {
56 it ( 'computes dependency with addition operation' , ( ) => {
6- expect ( computeTemplateAccesses ( '<%= settings.value1 + settings.value2 %>' ) ) . toEqual ( {
7+ expect ( engine . computeTemplateAccesses ( '<%= settings.value1 + settings.value2 %>' ) ) . toEqual ( {
78 accesses : [ 'settings.value1' , 'settings.value2' ] ,
89 unableToCompute : false ,
910 } ) ;
1011 } ) ;
1112
1213 it ( 'computes dependency with addition operation using extras' , ( ) => {
13- expect ( computeTemplateAccesses ( '<%= extras.value1 + extras.value2 %>' ) ) . toEqual ( {
14+ expect ( engine . computeTemplateAccesses ( '<%= extras.value1 + extras.value2 %>' ) ) . toEqual ( {
1415 accesses : [ 'extras.value1' , 'extras.value2' ] ,
1516 unableToCompute : false ,
1617 } ) ;
1718 } ) ;
1819
1920 it ( 'computes dependency with usage of allowed global variables' , ( ) => {
20- expect ( computeTemplateAccesses ( '<%= parseEther(String(0.3)) %>' ) ) . toEqual ( {
21+ expect ( engine . computeTemplateAccesses ( '<%= parseEther(String(0.3)) %>' ) ) . toEqual ( {
2122 accesses : [ ] ,
2223 unableToCompute : false ,
2324 } ) ;
2425 } ) ;
2526
2627 it ( 'computes simple addition' , ( ) => {
27- expect ( computeTemplateAccesses ( '<%= 1 + 1 %>' ) ) . toEqual ( {
28+ expect ( engine . computeTemplateAccesses ( '<%= 1 + 1 %>' ) ) . toEqual ( {
2829 accesses : [ ] ,
2930 unableToCompute : false ,
3031 } ) ;
3132 } ) ;
3233
3334 it ( 'computes dependency with subtraction operation' , ( ) => {
34- expect ( computeTemplateAccesses ( '<%= settings.value1 - settings.value2 %>' ) ) . toEqual ( {
35+ expect ( engine . computeTemplateAccesses ( '<%= settings.value1 - settings.value2 %>' ) ) . toEqual ( {
3536 accesses : [ 'settings.value1' , 'settings.value2' ] ,
3637 unableToCompute : false ,
3738 } ) ;
3839 } ) ;
3940
4041 it ( 'computes dependency with multiplication operation' , ( ) => {
41- expect ( computeTemplateAccesses ( '<%= settings.value1 * settings.value2 %>' ) ) . toEqual ( {
42+ expect ( engine . computeTemplateAccesses ( '<%= settings.value1 * settings.value2 %>' ) ) . toEqual ( {
4243 accesses : [ 'settings.value1' , 'settings.value2' ] ,
4344 unableToCompute : false ,
4445 } ) ;
4546 } ) ;
4647
4748 it ( 'computes dependency with division operation' , ( ) => {
48- expect ( computeTemplateAccesses ( '<%= settings.value1 / settings.value2 %>' ) ) . toEqual ( {
49+ expect ( engine . computeTemplateAccesses ( '<%= settings.value1 / settings.value2 %>' ) ) . toEqual ( {
4950 accesses : [ 'settings.value1' , 'settings.value2' ] ,
5051 unableToCompute : false ,
5152 } ) ;
5253 } ) ;
5354
5455 it ( 'computes dependency with complex math operation' , ( ) => {
5556 expect (
56- computeTemplateAccesses ( '<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>' )
57+ engine . computeTemplateAccesses ( '<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>' )
5758 ) . toEqual ( {
5859 accesses : [ 'settings.value1' , 'settings.value2' , 'settings.value3' , 'settings.value4' ] ,
5960 unableToCompute : false ,
6061 } ) ;
6162 } ) ;
6263
6364 it ( 'computes multiple dependencies on different template tags' , ( ) => {
64- expect ( computeTemplateAccesses ( '<%= settings.woot %>-<%= settings.woot2 %>' ) ) . toEqual ( {
65+ expect ( engine . computeTemplateAccesses ( '<%= settings.woot %>-<%= settings.woot2 %>' ) ) . toEqual ( {
6566 accesses : [ 'settings.woot' , 'settings.woot2' ] ,
6667 unableToCompute : false ,
6768 } ) ;
6869 } ) ;
6970
7071 it ( 'computes simple dependency' , ( ) => {
71- expect ( computeTemplateAccesses ( '<%= settings.woot %>' ) ) . toEqual ( {
72+ expect ( engine . computeTemplateAccesses ( '<%= settings.woot %>' ) ) . toEqual ( {
7273 accesses : [ 'settings.woot' ] ,
7374 unableToCompute : false ,
7475 } ) ;
7576 } ) ;
7677
7778 it ( 'computes array dependency' , ( ) => {
7879 expect (
79- computeTemplateAccesses (
80+ engine . computeTemplateAccesses (
8081 '["<%= settings.camelotSwapPublisherAdmin1 %>","<%= settings.camelotSwapPublisherAdmin2 %>"]'
8182 )
8283 ) . toEqual ( {
@@ -86,15 +87,15 @@ describe('access-recorder.ts', () => {
8687 } ) ;
8788
8889 it ( 'computes dependency using simple CannonHelperContext' , ( ) => {
89- expect ( computeTemplateAccesses ( '<%= parseEther(settings.woot) %>' ) ) . toEqual ( {
90+ expect ( engine . computeTemplateAccesses ( '<%= parseEther(settings.woot) %>' ) ) . toEqual ( {
9091 accesses : [ 'settings.woot' ] ,
9192 unableToCompute : false ,
9293 } ) ;
9394 } ) ;
9495
9596 it ( 'computes dependency using complex CannonHelperContext' , ( ) => {
9697 expect (
97- computeTemplateAccesses (
98+ engine . computeTemplateAccesses (
9899 '<%= defaultAbiCoder.encode(parseEther(settings.woot)) %> + <%= defaultAbiCoder.decode(contracts.compound) %>'
99100 )
100101 ) . toEqual ( {
@@ -106,28 +107,28 @@ describe('access-recorder.ts', () => {
106107
107108 describe ( 'computeTemplateAccesses() syntax validation' , ( ) => {
108109 it ( 'handles invalid template syntax - unmatched brackets' , ( ) => {
109- expect ( computeTemplateAccesses ( '<%= settings.value) %>' ) ) . toEqual ( {
110+ expect ( engine . computeTemplateAccesses ( '<%= settings.value) %>' ) ) . toEqual ( {
110111 accesses : [ ] ,
111112 unableToCompute : true ,
112113 } ) ;
113114 } ) ;
114115
115116 it ( 'handles empty template tags' , ( ) => {
116- expect ( computeTemplateAccesses ( '<%=%>' ) ) . toEqual ( {
117+ expect ( engine . computeTemplateAccesses ( '<%=%>' ) ) . toEqual ( {
117118 accesses : [ ] ,
118119 unableToCompute : true ,
119120 } ) ;
120121 } ) ;
121122
122123 it ( 'handles multiple template tags with mixed validity' , ( ) => {
123- expect ( computeTemplateAccesses ( '<%= settings.valid %> and <% invalid.syntax' ) ) . toEqual ( {
124+ expect ( engine . computeTemplateAccesses ( '<%= settings.valid %> and <% invalid.syntax' ) ) . toEqual ( {
124125 accesses : [ 'settings.valid' ] ,
125126 unableToCompute : false ,
126127 } ) ;
127128 } ) ;
128129
129130 it ( 'handles template with only whitespace' , ( ) => {
130- expect ( computeTemplateAccesses ( '<%= %>' ) ) . toEqual ( {
131+ expect ( engine . computeTemplateAccesses ( '<%= %>' ) ) . toEqual ( {
131132 accesses : [ ] ,
132133 unableToCompute : true ,
133134 } ) ;
@@ -136,58 +137,58 @@ describe('access-recorder.ts', () => {
136137
137138 describe ( 'computeTemplateAccesses() security' , ( ) => {
138139 it ( 'prevents direct code execution' , ( ) => {
139- expect ( computeTemplateAccesses ( '<%= process.exit(1) %>' ) ) . toEqual ( {
140+ expect ( engine . computeTemplateAccesses ( '<%= process.exit(1) %>' ) ) . toEqual ( {
140141 accesses : [ ] ,
141142 unableToCompute : true ,
142143 } ) ;
143144 } ) ;
144145
145146 it ( 'prevents access to global objects' , ( ) => {
146- expect ( computeTemplateAccesses ( '<%= global.process %>' ) ) . toEqual ( {
147+ expect ( engine . computeTemplateAccesses ( '<%= global.process %>' ) ) . toEqual ( {
147148 accesses : [ ] ,
148149 unableToCompute : true ,
149150 } ) ;
150151 } ) ;
151152
152153 it ( 'prevents require/import statements' , ( ) => {
153- expect ( computeTemplateAccesses ( '<%= require("fs") %>' ) ) . toEqual ( {
154+ expect ( engine . computeTemplateAccesses ( '<%= require("fs") %>' ) ) . toEqual ( {
154155 accesses : [ ] ,
155156 unableToCompute : true ,
156157 } ) ;
157158 } ) ;
158159
159160 it ( 'prevents eval usage' , ( ) => {
160- expect ( computeTemplateAccesses ( '<%= eval("console.log(\'REKT\')") %>' ) ) . toEqual ( {
161+ expect ( engine . computeTemplateAccesses ( '<%= eval("console.log(\'REKT\')") %>' ) ) . toEqual ( {
161162 accesses : [ ] ,
162163 unableToCompute : true ,
163164 } ) ;
164165 } ) ;
165166
166167 it ( 'prevents Function constructor usage' , ( ) => {
167- expect ( computeTemplateAccesses ( '<%= new Function("return process")() %>' ) ) . toEqual ( {
168+ expect ( engine . computeTemplateAccesses ( '<%= new Function("return process")() %>' ) ) . toEqual ( {
168169 accesses : [ ] ,
169170 unableToCompute : true ,
170171 } ) ;
171172 } ) ;
172173
173174 it ( 'prevents setTimeout/setInterval usage' , ( ) => {
174- expect ( computeTemplateAccesses ( '<%= setTimeout(() => {}, 1000) %>' ) ) . toEqual ( {
175+ expect ( engine . computeTemplateAccesses ( '<%= setTimeout(() => {}, 1000) %>' ) ) . toEqual ( {
175176 accesses : [ ] ,
176177 unableToCompute : true ,
177178 } ) ;
178179 } ) ;
179180
180181 it ( 'prevents overriding console.log' , ( ) => {
181182 expect (
182- computeTemplateAccesses ( '<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>' )
183+ engine . computeTemplateAccesses ( '<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>' )
183184 ) . toEqual ( {
184185 accesses : [ ] ,
185186 unableToCompute : true ,
186187 } ) ;
187188 } ) ;
188189
189190 it ( 'prevents assignment of values' , ( ) => {
190- expect ( computeTemplateAccesses ( '<%= const value = 1 + 2 %>' ) ) . toEqual ( {
191+ expect ( engine . computeTemplateAccesses ( '<%= const value = 1 + 2 %>' ) ) . toEqual ( {
191192 accesses : [ ] ,
192193 unableToCompute : true ,
193194 } ) ;
0 commit comments