rfuzz 0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +55 -0
- data/LICENSE +55 -0
- data/README +252 -0
- data/Rakefile +48 -0
- data/doc/rdoc/classes/RFuzz.html +146 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.html +481 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000010.html +24 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000011.html +34 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000012.html +49 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000013.html +49 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000014.html +57 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000015.html +37 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000016.html +26 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000017.html +34 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000018.html +18 -0
- data/doc/rdoc/classes/RFuzz/HttpClient.src/M000019.html +26 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.html +294 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000001.html +26 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000002.html +18 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000003.html +26 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000004.html +18 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000005.html +32 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000006.html +18 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000007.html +20 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000008.html +20 -0
- data/doc/rdoc/classes/RFuzz/HttpEncoding.src/M000009.html +32 -0
- data/doc/rdoc/classes/RFuzz/HttpResponse.html +180 -0
- data/doc/rdoc/classes/RFuzz/Notifier.html +252 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000044.html +17 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000045.html +17 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000046.html +17 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000047.html +17 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000048.html +17 -0
- data/doc/rdoc/classes/RFuzz/Notifier.src/M000049.html +17 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.html +362 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000032.html +21 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000033.html +23 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000036.html +22 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000037.html +20 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000038.html +22 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000039.html +20 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000040.html +18 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000041.html +18 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000042.html +22 -0
- data/doc/rdoc/classes/RFuzz/RandomGenerator.src/M000043.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.html +383 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000056.html +19 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000057.html +23 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000058.html +26 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000059.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000060.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000061.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000062.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000063.html +19 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000064.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000065.html +23 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000066.html +18 -0
- data/doc/rdoc/classes/RFuzz/Sampler.src/M000067.html +20 -0
- data/doc/rdoc/classes/RFuzz/Session.html +415 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000020.html +31 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000021.html +18 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000022.html +18 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000023.html +34 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000024.html +19 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000025.html +19 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000026.html +26 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000027.html +29 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000028.html +19 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000029.html +18 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000030.html +18 -0
- data/doc/rdoc/classes/RFuzz/Session.src/M000031.html +23 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.html +242 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000050.html +19 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000051.html +19 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000052.html +18 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000053.html +18 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000054.html +28 -0
- data/doc/rdoc/classes/RFuzz/StatsTracker.src/M000055.html +18 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/COPYING.html +168 -0
- data/doc/rdoc/files/LICENSE.html +168 -0
- data/doc/rdoc/files/README.html +473 -0
- data/doc/rdoc/files/lib/rfuzz/client_rb.html +111 -0
- data/doc/rdoc/files/lib/rfuzz/random_rb.html +116 -0
- data/doc/rdoc/files/lib/rfuzz/rfuzz_rb.html +109 -0
- data/doc/rdoc/files/lib/rfuzz/session_rb.html +111 -0
- data/doc/rdoc/files/lib/rfuzz/stats_rb.html +113 -0
- data/doc/rdoc/fr_class_index.html +35 -0
- data/doc/rdoc/fr_file_index.html +34 -0
- data/doc/rdoc/fr_method_index.html +93 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/examples/amazon_headers.rb +38 -0
- data/examples/hpricot_pudding.rb +22 -0
- data/examples/kill_routes.rb +26 -0
- data/examples/mongrel_test_suite/lib/gen.rb +24 -0
- data/examples/mongrel_test_suite/test/camping/static_files.rb +9 -0
- data/examples/mongrel_test_suite/test/camping/upload_file.rb +9 -0
- data/examples/mongrel_test_suite/test/camping/upload_progress.rb +9 -0
- data/examples/mongrel_test_suite/test/http/base_protocol.rb +23 -0
- data/examples/mongrel_test_suite/test/nitro/upload_file.rb +9 -0
- data/examples/mongrel_test_suite/test/nitro/upload_progress.rb +9 -0
- data/examples/mongrel_test_suite/test/rails/static_files.rb +9 -0
- data/examples/mongrel_test_suite/test/rails/upload_file.rb +9 -0
- data/examples/mongrel_test_suite/test/rails/upload_progress.rb +9 -0
- data/examples/perftest.rb +30 -0
- data/ext/fuzzrnd/ext_help.h +14 -0
- data/ext/fuzzrnd/extconf.rb +6 -0
- data/ext/fuzzrnd/fuzzrnd.c +149 -0
- data/ext/http11_client/ext_help.h +14 -0
- data/ext/http11_client/extconf.rb +6 -0
- data/ext/http11_client/http11_client.c +288 -0
- data/ext/http11_client/http11_parser.c +629 -0
- data/ext/http11_client/http11_parser.h +46 -0
- data/ext/http11_client/http11_parser.rl +169 -0
- data/lib/rfuzz/client.rb +498 -0
- data/lib/rfuzz/random.rb +110 -0
- data/lib/rfuzz/rfuzz.rb +12 -0
- data/lib/rfuzz/session.rb +154 -0
- data/lib/rfuzz/stats.rb +159 -0
- data/resources/defaults.yaml +2 -0
- data/resources/words.txt +3310 -0
- data/test/coverage/index.html +388 -0
- data/test/coverage/lib-rfuzz-client_rb.html +1127 -0
- data/test/coverage/lib-rfuzz-random_rb.html +739 -0
- data/test/coverage/lib-rfuzz-session_rb.html +783 -0
- data/test/coverage/lib-rfuzz-stats_rb.html +788 -0
- data/test/server.rb +101 -0
- data/test/test_client.rb +164 -0
- data/test/test_fuzzrnd.rb +31 -0
- data/test/test_httpparser.rb +48 -0
- data/test/test_random.rb +75 -0
- data/test/test_session.rb +33 -0
- data/test/test_stats.rb +45 -0
- data/tools/rakehelp.rb +119 -0
- metadata +201 -0
|
@@ -0,0 +1,783 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
|
|
3
|
+
<head>
|
|
4
|
+
<title>lib/rfuzz/session.rb - C0 code coverage information</title>
|
|
5
|
+
<style type='text/css'>body { background-color: rgb(240, 240, 245); }</style>
|
|
6
|
+
<style type='text/css'>span.cross-ref-title {
|
|
7
|
+
font-size: 140%;
|
|
8
|
+
}
|
|
9
|
+
span.cross-ref a {
|
|
10
|
+
text-decoration: none;
|
|
11
|
+
}
|
|
12
|
+
span.cross-ref {
|
|
13
|
+
background-color:#f3f7fa;
|
|
14
|
+
border: 1px dashed #333;
|
|
15
|
+
margin: 1em;
|
|
16
|
+
padding: 0.5em;
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
}
|
|
19
|
+
a.crossref-toggle {
|
|
20
|
+
text-decoration: none;
|
|
21
|
+
}
|
|
22
|
+
span.marked0 {
|
|
23
|
+
background-color: rgb(185, 210, 200);
|
|
24
|
+
display: block;
|
|
25
|
+
}
|
|
26
|
+
span.marked1 {
|
|
27
|
+
background-color: rgb(190, 215, 205);
|
|
28
|
+
display: block;
|
|
29
|
+
}
|
|
30
|
+
span.inferred0 {
|
|
31
|
+
background-color: rgb(175, 200, 200);
|
|
32
|
+
display: block;
|
|
33
|
+
}
|
|
34
|
+
span.inferred1 {
|
|
35
|
+
background-color: rgb(180, 205, 205);
|
|
36
|
+
display: block;
|
|
37
|
+
}
|
|
38
|
+
span.uncovered0 {
|
|
39
|
+
background-color: rgb(225, 110, 110);
|
|
40
|
+
display: block;
|
|
41
|
+
}
|
|
42
|
+
span.uncovered1 {
|
|
43
|
+
background-color: rgb(235, 120, 120);
|
|
44
|
+
display: block;
|
|
45
|
+
}
|
|
46
|
+
span.overview {
|
|
47
|
+
border-bottom: 8px solid black;
|
|
48
|
+
}
|
|
49
|
+
div.overview {
|
|
50
|
+
border-bottom: 8px solid black;
|
|
51
|
+
}
|
|
52
|
+
body {
|
|
53
|
+
font-family: verdana, arial, helvetica;
|
|
54
|
+
}
|
|
55
|
+
div.footer {
|
|
56
|
+
font-size: 68%;
|
|
57
|
+
margin-top: 1.5em;
|
|
58
|
+
}
|
|
59
|
+
h1, h2, h3, h4, h5, h6 {
|
|
60
|
+
margin-bottom: 0.5em;
|
|
61
|
+
}
|
|
62
|
+
h5 {
|
|
63
|
+
margin-top: 0.5em;
|
|
64
|
+
}
|
|
65
|
+
.hidden {
|
|
66
|
+
display: none;
|
|
67
|
+
}
|
|
68
|
+
div.separator {
|
|
69
|
+
height: 10px;
|
|
70
|
+
}
|
|
71
|
+
/* Commented out for better readability, esp. on IE */
|
|
72
|
+
/*
|
|
73
|
+
table tr td, table tr th {
|
|
74
|
+
font-size: 68%;
|
|
75
|
+
}
|
|
76
|
+
td.value table tr td {
|
|
77
|
+
font-size: 11px;
|
|
78
|
+
}
|
|
79
|
+
*/
|
|
80
|
+
table.percent_graph {
|
|
81
|
+
height: 12px;
|
|
82
|
+
border: #808080 1px solid;
|
|
83
|
+
empty-cells: show;
|
|
84
|
+
}
|
|
85
|
+
table.percent_graph td.covered {
|
|
86
|
+
height: 10px;
|
|
87
|
+
background: #00f000;
|
|
88
|
+
}
|
|
89
|
+
table.percent_graph td.uncovered {
|
|
90
|
+
height: 10px;
|
|
91
|
+
background: #e00000;
|
|
92
|
+
}
|
|
93
|
+
table.percent_graph td.NA {
|
|
94
|
+
height: 10px;
|
|
95
|
+
background: #eaeaea;
|
|
96
|
+
}
|
|
97
|
+
table.report {
|
|
98
|
+
border-collapse: collapse;
|
|
99
|
+
width: 100%;
|
|
100
|
+
}
|
|
101
|
+
table.report td.heading {
|
|
102
|
+
background: #dcecff;
|
|
103
|
+
border: #d0d0d0 1px solid;
|
|
104
|
+
font-weight: bold;
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
table.report td.heading:hover {
|
|
108
|
+
background: #c0ffc0;
|
|
109
|
+
}
|
|
110
|
+
table.report td.text {
|
|
111
|
+
border: #d0d0d0 1px solid;
|
|
112
|
+
}
|
|
113
|
+
table.report td.value {
|
|
114
|
+
text-align: right;
|
|
115
|
+
border: #d0d0d0 1px solid;
|
|
116
|
+
}
|
|
117
|
+
table.report tr.light {
|
|
118
|
+
background-color: rgb(240, 240, 245);
|
|
119
|
+
}
|
|
120
|
+
table.report tr.dark {
|
|
121
|
+
background-color: rgb(230, 230, 235);
|
|
122
|
+
}
|
|
123
|
+
</style>
|
|
124
|
+
<script type='text/javascript'>
|
|
125
|
+
// <![CDATA[
|
|
126
|
+
function toggleCode( id ) {
|
|
127
|
+
if ( document.getElementById )
|
|
128
|
+
elem = document.getElementById( id );
|
|
129
|
+
else if ( document.all )
|
|
130
|
+
elem = eval( "document.all." + id );
|
|
131
|
+
else
|
|
132
|
+
return false;
|
|
133
|
+
|
|
134
|
+
elemStyle = elem.style;
|
|
135
|
+
|
|
136
|
+
if ( elemStyle.display != "block" ) {
|
|
137
|
+
elemStyle.display = "block"
|
|
138
|
+
} else {
|
|
139
|
+
elemStyle.display = "none"
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Make cross-references hidden by default
|
|
146
|
+
document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
|
|
147
|
+
// ]]>
|
|
148
|
+
</script>
|
|
149
|
+
<style type='text/css'>span.run0 {
|
|
150
|
+
background-color: rgb(178, 204, 255);
|
|
151
|
+
display: block;
|
|
152
|
+
}
|
|
153
|
+
span.run1 {
|
|
154
|
+
background-color: rgb(178, 206, 255);
|
|
155
|
+
display: block;
|
|
156
|
+
}
|
|
157
|
+
span.run2 {
|
|
158
|
+
background-color: rgb(178, 209, 255);
|
|
159
|
+
display: block;
|
|
160
|
+
}
|
|
161
|
+
span.run3 {
|
|
162
|
+
background-color: rgb(178, 211, 255);
|
|
163
|
+
display: block;
|
|
164
|
+
}
|
|
165
|
+
span.run4 {
|
|
166
|
+
background-color: rgb(178, 214, 255);
|
|
167
|
+
display: block;
|
|
168
|
+
}
|
|
169
|
+
span.run5 {
|
|
170
|
+
background-color: rgb(178, 218, 255);
|
|
171
|
+
display: block;
|
|
172
|
+
}
|
|
173
|
+
span.run6 {
|
|
174
|
+
background-color: rgb(178, 220, 255);
|
|
175
|
+
display: block;
|
|
176
|
+
}
|
|
177
|
+
span.run7 {
|
|
178
|
+
background-color: rgb(178, 223, 255);
|
|
179
|
+
display: block;
|
|
180
|
+
}
|
|
181
|
+
span.run8 {
|
|
182
|
+
background-color: rgb(178, 225, 255);
|
|
183
|
+
display: block;
|
|
184
|
+
}
|
|
185
|
+
span.run9 {
|
|
186
|
+
background-color: rgb(178, 228, 255);
|
|
187
|
+
display: block;
|
|
188
|
+
}
|
|
189
|
+
span.run10 {
|
|
190
|
+
background-color: rgb(178, 232, 255);
|
|
191
|
+
display: block;
|
|
192
|
+
}
|
|
193
|
+
span.run11 {
|
|
194
|
+
background-color: rgb(178, 234, 255);
|
|
195
|
+
display: block;
|
|
196
|
+
}
|
|
197
|
+
span.run12 {
|
|
198
|
+
background-color: rgb(178, 237, 255);
|
|
199
|
+
display: block;
|
|
200
|
+
}
|
|
201
|
+
span.run13 {
|
|
202
|
+
background-color: rgb(178, 239, 255);
|
|
203
|
+
display: block;
|
|
204
|
+
}
|
|
205
|
+
span.run14 {
|
|
206
|
+
background-color: rgb(178, 242, 255);
|
|
207
|
+
display: block;
|
|
208
|
+
}
|
|
209
|
+
span.run15 {
|
|
210
|
+
background-color: rgb(178, 246, 255);
|
|
211
|
+
display: block;
|
|
212
|
+
}
|
|
213
|
+
span.run16 {
|
|
214
|
+
background-color: rgb(178, 248, 255);
|
|
215
|
+
display: block;
|
|
216
|
+
}
|
|
217
|
+
span.run17 {
|
|
218
|
+
background-color: rgb(178, 251, 255);
|
|
219
|
+
display: block;
|
|
220
|
+
}
|
|
221
|
+
span.run18 {
|
|
222
|
+
background-color: rgb(178, 253, 255);
|
|
223
|
+
display: block;
|
|
224
|
+
}
|
|
225
|
+
span.run19 {
|
|
226
|
+
background-color: rgb(178, 255, 253);
|
|
227
|
+
display: block;
|
|
228
|
+
}
|
|
229
|
+
span.run20 {
|
|
230
|
+
background-color: rgb(178, 255, 249);
|
|
231
|
+
display: block;
|
|
232
|
+
}
|
|
233
|
+
span.run21 {
|
|
234
|
+
background-color: rgb(178, 255, 247);
|
|
235
|
+
display: block;
|
|
236
|
+
}
|
|
237
|
+
span.run22 {
|
|
238
|
+
background-color: rgb(178, 255, 244);
|
|
239
|
+
display: block;
|
|
240
|
+
}
|
|
241
|
+
span.run23 {
|
|
242
|
+
background-color: rgb(178, 255, 242);
|
|
243
|
+
display: block;
|
|
244
|
+
}
|
|
245
|
+
span.run24 {
|
|
246
|
+
background-color: rgb(178, 255, 239);
|
|
247
|
+
display: block;
|
|
248
|
+
}
|
|
249
|
+
span.run25 {
|
|
250
|
+
background-color: rgb(178, 255, 235);
|
|
251
|
+
display: block;
|
|
252
|
+
}
|
|
253
|
+
span.run26 {
|
|
254
|
+
background-color: rgb(178, 255, 233);
|
|
255
|
+
display: block;
|
|
256
|
+
}
|
|
257
|
+
span.run27 {
|
|
258
|
+
background-color: rgb(178, 255, 230);
|
|
259
|
+
display: block;
|
|
260
|
+
}
|
|
261
|
+
span.run28 {
|
|
262
|
+
background-color: rgb(178, 255, 228);
|
|
263
|
+
display: block;
|
|
264
|
+
}
|
|
265
|
+
span.run29 {
|
|
266
|
+
background-color: rgb(178, 255, 225);
|
|
267
|
+
display: block;
|
|
268
|
+
}
|
|
269
|
+
span.run30 {
|
|
270
|
+
background-color: rgb(178, 255, 221);
|
|
271
|
+
display: block;
|
|
272
|
+
}
|
|
273
|
+
span.run31 {
|
|
274
|
+
background-color: rgb(178, 255, 219);
|
|
275
|
+
display: block;
|
|
276
|
+
}
|
|
277
|
+
span.run32 {
|
|
278
|
+
background-color: rgb(178, 255, 216);
|
|
279
|
+
display: block;
|
|
280
|
+
}
|
|
281
|
+
span.run33 {
|
|
282
|
+
background-color: rgb(178, 255, 214);
|
|
283
|
+
display: block;
|
|
284
|
+
}
|
|
285
|
+
span.run34 {
|
|
286
|
+
background-color: rgb(178, 255, 211);
|
|
287
|
+
display: block;
|
|
288
|
+
}
|
|
289
|
+
span.run35 {
|
|
290
|
+
background-color: rgb(178, 255, 207);
|
|
291
|
+
display: block;
|
|
292
|
+
}
|
|
293
|
+
span.run36 {
|
|
294
|
+
background-color: rgb(178, 255, 205);
|
|
295
|
+
display: block;
|
|
296
|
+
}
|
|
297
|
+
span.run37 {
|
|
298
|
+
background-color: rgb(178, 255, 202);
|
|
299
|
+
display: block;
|
|
300
|
+
}
|
|
301
|
+
span.run38 {
|
|
302
|
+
background-color: rgb(178, 255, 200);
|
|
303
|
+
display: block;
|
|
304
|
+
}
|
|
305
|
+
span.run39 {
|
|
306
|
+
background-color: rgb(178, 255, 197);
|
|
307
|
+
display: block;
|
|
308
|
+
}
|
|
309
|
+
span.run40 {
|
|
310
|
+
background-color: rgb(178, 255, 193);
|
|
311
|
+
display: block;
|
|
312
|
+
}
|
|
313
|
+
span.run41 {
|
|
314
|
+
background-color: rgb(178, 255, 191);
|
|
315
|
+
display: block;
|
|
316
|
+
}
|
|
317
|
+
span.run42 {
|
|
318
|
+
background-color: rgb(178, 255, 188);
|
|
319
|
+
display: block;
|
|
320
|
+
}
|
|
321
|
+
span.run43 {
|
|
322
|
+
background-color: rgb(178, 255, 186);
|
|
323
|
+
display: block;
|
|
324
|
+
}
|
|
325
|
+
span.run44 {
|
|
326
|
+
background-color: rgb(178, 255, 183);
|
|
327
|
+
display: block;
|
|
328
|
+
}
|
|
329
|
+
span.run45 {
|
|
330
|
+
background-color: rgb(178, 255, 179);
|
|
331
|
+
display: block;
|
|
332
|
+
}
|
|
333
|
+
span.run46 {
|
|
334
|
+
background-color: rgb(179, 255, 178);
|
|
335
|
+
display: block;
|
|
336
|
+
}
|
|
337
|
+
span.run47 {
|
|
338
|
+
background-color: rgb(182, 255, 178);
|
|
339
|
+
display: block;
|
|
340
|
+
}
|
|
341
|
+
span.run48 {
|
|
342
|
+
background-color: rgb(184, 255, 178);
|
|
343
|
+
display: block;
|
|
344
|
+
}
|
|
345
|
+
span.run49 {
|
|
346
|
+
background-color: rgb(187, 255, 178);
|
|
347
|
+
display: block;
|
|
348
|
+
}
|
|
349
|
+
span.run50 {
|
|
350
|
+
background-color: rgb(191, 255, 178);
|
|
351
|
+
display: block;
|
|
352
|
+
}
|
|
353
|
+
span.run51 {
|
|
354
|
+
background-color: rgb(193, 255, 178);
|
|
355
|
+
display: block;
|
|
356
|
+
}
|
|
357
|
+
span.run52 {
|
|
358
|
+
background-color: rgb(196, 255, 178);
|
|
359
|
+
display: block;
|
|
360
|
+
}
|
|
361
|
+
span.run53 {
|
|
362
|
+
background-color: rgb(198, 255, 178);
|
|
363
|
+
display: block;
|
|
364
|
+
}
|
|
365
|
+
span.run54 {
|
|
366
|
+
background-color: rgb(201, 255, 178);
|
|
367
|
+
display: block;
|
|
368
|
+
}
|
|
369
|
+
span.run55 {
|
|
370
|
+
background-color: rgb(205, 255, 178);
|
|
371
|
+
display: block;
|
|
372
|
+
}
|
|
373
|
+
span.run56 {
|
|
374
|
+
background-color: rgb(207, 255, 178);
|
|
375
|
+
display: block;
|
|
376
|
+
}
|
|
377
|
+
span.run57 {
|
|
378
|
+
background-color: rgb(210, 255, 178);
|
|
379
|
+
display: block;
|
|
380
|
+
}
|
|
381
|
+
span.run58 {
|
|
382
|
+
background-color: rgb(212, 255, 178);
|
|
383
|
+
display: block;
|
|
384
|
+
}
|
|
385
|
+
span.run59 {
|
|
386
|
+
background-color: rgb(215, 255, 178);
|
|
387
|
+
display: block;
|
|
388
|
+
}
|
|
389
|
+
span.run60 {
|
|
390
|
+
background-color: rgb(219, 255, 178);
|
|
391
|
+
display: block;
|
|
392
|
+
}
|
|
393
|
+
span.run61 {
|
|
394
|
+
background-color: rgb(221, 255, 178);
|
|
395
|
+
display: block;
|
|
396
|
+
}
|
|
397
|
+
span.run62 {
|
|
398
|
+
background-color: rgb(224, 255, 178);
|
|
399
|
+
display: block;
|
|
400
|
+
}
|
|
401
|
+
span.run63 {
|
|
402
|
+
background-color: rgb(226, 255, 178);
|
|
403
|
+
display: block;
|
|
404
|
+
}
|
|
405
|
+
span.run64 {
|
|
406
|
+
background-color: rgb(229, 255, 178);
|
|
407
|
+
display: block;
|
|
408
|
+
}
|
|
409
|
+
span.run65 {
|
|
410
|
+
background-color: rgb(233, 255, 178);
|
|
411
|
+
display: block;
|
|
412
|
+
}
|
|
413
|
+
span.run66 {
|
|
414
|
+
background-color: rgb(235, 255, 178);
|
|
415
|
+
display: block;
|
|
416
|
+
}
|
|
417
|
+
span.run67 {
|
|
418
|
+
background-color: rgb(238, 255, 178);
|
|
419
|
+
display: block;
|
|
420
|
+
}
|
|
421
|
+
span.run68 {
|
|
422
|
+
background-color: rgb(240, 255, 178);
|
|
423
|
+
display: block;
|
|
424
|
+
}
|
|
425
|
+
span.run69 {
|
|
426
|
+
background-color: rgb(243, 255, 178);
|
|
427
|
+
display: block;
|
|
428
|
+
}
|
|
429
|
+
span.run70 {
|
|
430
|
+
background-color: rgb(247, 255, 178);
|
|
431
|
+
display: block;
|
|
432
|
+
}
|
|
433
|
+
span.run71 {
|
|
434
|
+
background-color: rgb(249, 255, 178);
|
|
435
|
+
display: block;
|
|
436
|
+
}
|
|
437
|
+
span.run72 {
|
|
438
|
+
background-color: rgb(252, 255, 178);
|
|
439
|
+
display: block;
|
|
440
|
+
}
|
|
441
|
+
span.run73 {
|
|
442
|
+
background-color: rgb(255, 255, 178);
|
|
443
|
+
display: block;
|
|
444
|
+
}
|
|
445
|
+
span.run74 {
|
|
446
|
+
background-color: rgb(255, 252, 178);
|
|
447
|
+
display: block;
|
|
448
|
+
}
|
|
449
|
+
span.run75 {
|
|
450
|
+
background-color: rgb(255, 248, 178);
|
|
451
|
+
display: block;
|
|
452
|
+
}
|
|
453
|
+
span.run76 {
|
|
454
|
+
background-color: rgb(255, 246, 178);
|
|
455
|
+
display: block;
|
|
456
|
+
}
|
|
457
|
+
span.run77 {
|
|
458
|
+
background-color: rgb(255, 243, 178);
|
|
459
|
+
display: block;
|
|
460
|
+
}
|
|
461
|
+
span.run78 {
|
|
462
|
+
background-color: rgb(255, 240, 178);
|
|
463
|
+
display: block;
|
|
464
|
+
}
|
|
465
|
+
span.run79 {
|
|
466
|
+
background-color: rgb(255, 238, 178);
|
|
467
|
+
display: block;
|
|
468
|
+
}
|
|
469
|
+
span.run80 {
|
|
470
|
+
background-color: rgb(255, 234, 178);
|
|
471
|
+
display: block;
|
|
472
|
+
}
|
|
473
|
+
span.run81 {
|
|
474
|
+
background-color: rgb(255, 232, 178);
|
|
475
|
+
display: block;
|
|
476
|
+
}
|
|
477
|
+
span.run82 {
|
|
478
|
+
background-color: rgb(255, 229, 178);
|
|
479
|
+
display: block;
|
|
480
|
+
}
|
|
481
|
+
span.run83 {
|
|
482
|
+
background-color: rgb(255, 226, 178);
|
|
483
|
+
display: block;
|
|
484
|
+
}
|
|
485
|
+
span.run84 {
|
|
486
|
+
background-color: rgb(255, 224, 178);
|
|
487
|
+
display: block;
|
|
488
|
+
}
|
|
489
|
+
span.run85 {
|
|
490
|
+
background-color: rgb(255, 220, 178);
|
|
491
|
+
display: block;
|
|
492
|
+
}
|
|
493
|
+
span.run86 {
|
|
494
|
+
background-color: rgb(255, 218, 178);
|
|
495
|
+
display: block;
|
|
496
|
+
}
|
|
497
|
+
span.run87 {
|
|
498
|
+
background-color: rgb(255, 215, 178);
|
|
499
|
+
display: block;
|
|
500
|
+
}
|
|
501
|
+
span.run88 {
|
|
502
|
+
background-color: rgb(255, 212, 178);
|
|
503
|
+
display: block;
|
|
504
|
+
}
|
|
505
|
+
span.run89 {
|
|
506
|
+
background-color: rgb(255, 210, 178);
|
|
507
|
+
display: block;
|
|
508
|
+
}
|
|
509
|
+
span.run90 {
|
|
510
|
+
background-color: rgb(255, 206, 178);
|
|
511
|
+
display: block;
|
|
512
|
+
}
|
|
513
|
+
span.run91 {
|
|
514
|
+
background-color: rgb(255, 204, 178);
|
|
515
|
+
display: block;
|
|
516
|
+
}
|
|
517
|
+
span.run92 {
|
|
518
|
+
background-color: rgb(255, 201, 178);
|
|
519
|
+
display: block;
|
|
520
|
+
}
|
|
521
|
+
span.run93 {
|
|
522
|
+
background-color: rgb(255, 198, 178);
|
|
523
|
+
display: block;
|
|
524
|
+
}
|
|
525
|
+
span.run94 {
|
|
526
|
+
background-color: rgb(255, 196, 178);
|
|
527
|
+
display: block;
|
|
528
|
+
}
|
|
529
|
+
span.run95 {
|
|
530
|
+
background-color: rgb(255, 192, 178);
|
|
531
|
+
display: block;
|
|
532
|
+
}
|
|
533
|
+
span.run96 {
|
|
534
|
+
background-color: rgb(255, 189, 178);
|
|
535
|
+
display: block;
|
|
536
|
+
}
|
|
537
|
+
span.run97 {
|
|
538
|
+
background-color: rgb(255, 187, 178);
|
|
539
|
+
display: block;
|
|
540
|
+
}
|
|
541
|
+
span.run98 {
|
|
542
|
+
background-color: rgb(255, 184, 178);
|
|
543
|
+
display: block;
|
|
544
|
+
}
|
|
545
|
+
span.run99 {
|
|
546
|
+
background-color: rgb(255, 182, 178);
|
|
547
|
+
display: block;
|
|
548
|
+
}
|
|
549
|
+
span.run100 {
|
|
550
|
+
background-color: rgb(255, 178, 178);
|
|
551
|
+
display: block;
|
|
552
|
+
}
|
|
553
|
+
</style>
|
|
554
|
+
</head>
|
|
555
|
+
<body>
|
|
556
|
+
<h3>C0 code coverage information</h3>
|
|
557
|
+
<p>Generated on Wed Jul 19 17:39:34 EDT 2006 with <a href='http://eigenclass.org/hiki.rb?rcov'>rcov 0.6.0</a>
|
|
558
|
+
</p>
|
|
559
|
+
<hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this...
|
|
560
|
+
</span><span class='marked1'>and this: this line is also marked as covered.
|
|
561
|
+
</span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this,
|
|
562
|
+
</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).
|
|
563
|
+
</span><span class='uncovered0'>Finally, here's a line marked as not executed.
|
|
564
|
+
</span></pre>
|
|
565
|
+
<table class='report'>
|
|
566
|
+
<thead>
|
|
567
|
+
<tr>
|
|
568
|
+
<td class='heading'>Name</td>
|
|
569
|
+
<td class='heading'>Total lines</td>
|
|
570
|
+
<td class='heading'>Lines of code</td>
|
|
571
|
+
<td class='heading'>Total coverage</td>
|
|
572
|
+
<td class='heading'>Code coverage</td>
|
|
573
|
+
</tr>
|
|
574
|
+
</thead>
|
|
575
|
+
<tbody>
|
|
576
|
+
<tr class='light'>
|
|
577
|
+
<td>
|
|
578
|
+
<a href='lib-rfuzz-session_rb.html'>lib/rfuzz/session.rb</a>
|
|
579
|
+
</td>
|
|
580
|
+
<td class='value'>
|
|
581
|
+
<tt>154</tt>
|
|
582
|
+
</td>
|
|
583
|
+
<td class='value'>
|
|
584
|
+
<tt>92</tt>
|
|
585
|
+
</td>
|
|
586
|
+
<td>
|
|
587
|
+
<table cellspacing='0' cellpadding='0' align='right'>
|
|
588
|
+
<tr>
|
|
589
|
+
<td>
|
|
590
|
+
<tt>95.5%</tt> </td>
|
|
591
|
+
<td>
|
|
592
|
+
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
|
593
|
+
<tr>
|
|
594
|
+
<td class='covered' width='95' />
|
|
595
|
+
<td class='uncovered' width='5' />
|
|
596
|
+
</tr>
|
|
597
|
+
</table>
|
|
598
|
+
</td>
|
|
599
|
+
</tr>
|
|
600
|
+
</table>
|
|
601
|
+
</td>
|
|
602
|
+
<td>
|
|
603
|
+
<table cellspacing='0' cellpadding='0' align='right'>
|
|
604
|
+
<tr>
|
|
605
|
+
<td>
|
|
606
|
+
<tt>92.4%</tt> </td>
|
|
607
|
+
<td>
|
|
608
|
+
<table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
|
|
609
|
+
<tr>
|
|
610
|
+
<td class='covered' width='92' />
|
|
611
|
+
<td class='uncovered' width='8' />
|
|
612
|
+
</tr>
|
|
613
|
+
</table>
|
|
614
|
+
</td>
|
|
615
|
+
</tr>
|
|
616
|
+
</table>
|
|
617
|
+
</td>
|
|
618
|
+
</tr>
|
|
619
|
+
</tbody>
|
|
620
|
+
</table><pre><span class="marked1"><a name="line1" /> 1 require 'csv'
|
|
621
|
+
</span><span class="marked0"><a name="line2" /> 2 require 'rfuzz/random'
|
|
622
|
+
</span><span class="marked1"><a name="line3" /> 3 require 'rfuzz/client'
|
|
623
|
+
</span><span class="marked0"><a name="line4" /> 4 require 'rfuzz/stats'
|
|
624
|
+
</span><span class="marked1"><a name="line5" /> 5
|
|
625
|
+
</span><span class="marked0"><a name="line6" /> 6 module RFuzz
|
|
626
|
+
</span><span class="inferred1"><a name="line7" /> 7 # Creates a small light DSL for running RFuzz sessions against a
|
|
627
|
+
</span><span class="inferred0"><a name="line8" /> 8 # web server. It configures a basic client and randomizer that you
|
|
628
|
+
</span><span class="inferred1"><a name="line9" /> 9 # then use to conduct sessions and record statistics about the activity.
|
|
629
|
+
</span><span class="marked0"><a name="line10" /> 10 class Session
|
|
630
|
+
</span><span class="inferred1"><a name="line11" /> 11
|
|
631
|
+
</span><span class="marked0"><a name="line12" /> 12 attr_accessor :counts
|
|
632
|
+
</span><span class="marked1"><a name="line13" /> 13 attr_accessor :runs
|
|
633
|
+
</span><span class="marked0"><a name="line14" /> 14 attr_accessor :tracking
|
|
634
|
+
</span><span class="inferred1"><a name="line15" /> 15
|
|
635
|
+
</span><span class="inferred0"><a name="line16" /> 16 # Sets up a session that you then operate by calling Session#run. Most of the
|
|
636
|
+
</span><span class="inferred1"><a name="line17" /> 17 # functions do not work unless they are inside a Session#run call.
|
|
637
|
+
</span><span class="inferred0"><a name="line18" /> 18 #
|
|
638
|
+
</span><span class="inferred1"><a name="line19" /> 19 # Available options are:
|
|
639
|
+
</span><span class="inferred0"><a name="line20" /> 20 #
|
|
640
|
+
</span><span class="inferred1"><a name="line21" /> 21 # * :host => Required. Which host.
|
|
641
|
+
</span><span class="inferred0"><a name="line22" /> 22 # * :port => Required. Which port.
|
|
642
|
+
</span><span class="inferred1"><a name="line23" /> 23 # * :words => Dictionary to load for the words passed to RandomGenerator.
|
|
643
|
+
</span><span class="inferred0"><a name="line24" /> 24 #
|
|
644
|
+
</span><span class="inferred1"><a name="line25" /> 25 # You can then pass any options you need to pass to the created RFuzz::HttpClient.
|
|
645
|
+
</span><span class="marked0"><a name="line26" /> 26 def initialize(options={})
|
|
646
|
+
</span><span class="marked1"><a name="line27" /> 27 @host = options[:host]
|
|
647
|
+
</span><span class="marked0"><a name="line28" /> 28 @port = options[:port]
|
|
648
|
+
</span><span class="marked1"><a name="line29" /> 29 options.delete(:host)
|
|
649
|
+
</span><span class="marked0"><a name="line30" /> 30 options.delete(:port)
|
|
650
|
+
</span><span class="marked1"><a name="line31" /> 31 options[:notifier] = StatsTracker.new
|
|
651
|
+
</span><span class="marked0"><a name="line32" /> 32
|
|
652
|
+
</span><span class="marked1"><a name="line33" /> 33 @word_file = options[:words] || File.join(File.dirname(__FILE__), "..", "..", "resources","words.txt")
|
|
653
|
+
</span><span class="inferred0"><a name="line34" /> 34
|
|
654
|
+
</span><span class="marked1"><a name="line35" /> 35 @client = HttpClient.new(@host, @port, options)
|
|
655
|
+
</span><span class="marked0"><a name="line36" /> 36 @rand = RandomGenerator.new(open(@word_file).read.split("\n"))
|
|
656
|
+
</span><span class="marked1"><a name="line37" /> 37
|
|
657
|
+
</span><span class="marked0"><a name="line38" /> 38 @runs = []
|
|
658
|
+
</span><span class="marked1"><a name="line39" /> 39 @counts = []
|
|
659
|
+
</span><span class="marked0"><a name="line40" /> 40 @tracking = []
|
|
660
|
+
</span><span class="inferred1"><a name="line41" /> 41 end
|
|
661
|
+
</span><span class="inferred0"><a name="line42" /> 42
|
|
662
|
+
</span><span class="marked1"><a name="line43" /> 43 def cur_run
|
|
663
|
+
</span><span class="marked0"><a name="line44" /> 44 @runs.last
|
|
664
|
+
</span><span class="marked1"><a name="line45" /> 45 end
|
|
665
|
+
</span><span class="inferred0"><a name="line46" /> 46
|
|
666
|
+
</span><span class="marked1"><a name="line47" /> 47 def cur_count
|
|
667
|
+
</span><span class="marked0"><a name="line48" /> 48 @counts.last
|
|
668
|
+
</span><span class="marked1"><a name="line49" /> 49 end
|
|
669
|
+
</span><span class="inferred0"><a name="line50" /> 50
|
|
670
|
+
</span><span class="inferred1"><a name="line51" /> 51 # Begin a run of count length wher a block is run once and statistics are collected
|
|
671
|
+
</span><span class="inferred0"><a name="line52" /> 52 # from the client passed to the block. When calls you can pass in the following options:
|
|
672
|
+
</span><span class="inferred1"><a name="line53" /> 53 #
|
|
673
|
+
</span><span class="inferred0"><a name="line54" /> 54 # * :sample => Defaults to [:request], but will record any of [:request, :connect, :send_request, :read_header, :read_body, :close]
|
|
674
|
+
</span><span class="inferred1"><a name="line55" /> 55 # * :save_as => A tuple of ["runs.csv", "counts.csv"] (or whatever you want to call them).
|
|
675
|
+
</span><span class="inferred0"><a name="line56" /> 56 #
|
|
676
|
+
</span><span class="inferred1"><a name="line57" /> 57 # Once you call run, the block you pass it is given an HttpClient and a RandomGenerator. Each run will reset the HttpClient so you can pretend it is brand new.
|
|
677
|
+
</span><span class="inferred0"><a name="line58" /> 58 #
|
|
678
|
+
</span><span class="marked1"><a name="line59" /> 59 def run(count, options={})
|
|
679
|
+
</span><span class="marked0"><a name="line60" /> 60 sample = options[:sample] || [:request]
|
|
680
|
+
</span><span class="marked1"><a name="line61" /> 61 count.times do |i|
|
|
681
|
+
</span><span class="inferred0"><a name="line62" /> 62 # setup for this latest sample run
|
|
682
|
+
</span><span class="marked1"><a name="line63" /> 63 @runs << {}
|
|
683
|
+
</span><span class="marked0"><a name="line64" /> 64 @counts << {}
|
|
684
|
+
</span><span class="marked1"><a name="line65" /> 65 @tracking << {}
|
|
685
|
+
</span><span class="marked0"><a name="line66" /> 66 yield @client, @rand
|
|
686
|
+
</span><span class="inferred1"><a name="line67" /> 67
|
|
687
|
+
</span><span class="inferred0"><a name="line68" /> 68 # record the request stats then reset them
|
|
688
|
+
</span><span class="marked1"><a name="line69" /> 69 sample.each {|s| cur_run[s] = @client.notifier.stats[s].clone }
|
|
689
|
+
</span><span class="marked0"><a name="line70" /> 70 @client.notifier.reset
|
|
690
|
+
</span><span class="marked1"><a name="line71" /> 71 end
|
|
691
|
+
</span><span class="inferred0"><a name="line72" /> 72
|
|
692
|
+
</span><span class="marked1"><a name="line73" /> 73 if options[:save_as]
|
|
693
|
+
</span><span class="marked0"><a name="line74" /> 74 write_runs(options[:save_as][0])
|
|
694
|
+
</span><span class="marked1"><a name="line75" /> 75 write_counts(options[:save_as][1])
|
|
695
|
+
</span><span class="marked0"><a name="line76" /> 76 end
|
|
696
|
+
</span><span class="inferred1"><a name="line77" /> 77 end
|
|
697
|
+
</span><span class="inferred0"><a name="line78" /> 78
|
|
698
|
+
</span><span class="inferred1"><a name="line79" /> 79 # Called inside a run to collect a stat you want with the given count.
|
|
699
|
+
</span><span class="inferred0"><a name="line80" /> 80 # The stat should be a string or symbol, and count should be a number (or float).
|
|
700
|
+
</span><span class="marked1"><a name="line81" /> 81 def sample(stat,count)
|
|
701
|
+
</span><span class="uncovered0"><a name="line82" /> 82 cur_run[stat] ||= Sampler.new(stat)
|
|
702
|
+
</span><span class="uncovered1"><a name="line83" /> 83 cur_run[stat].sample(count)
|
|
703
|
+
</span><span class="uncovered0"><a name="line84" /> 84 end
|
|
704
|
+
</span><span class="inferred1"><a name="line85" /> 85
|
|
705
|
+
</span><span class="inferred0"><a name="line86" /> 86 # Called inside a run to do a count of a measurement.
|
|
706
|
+
</span><span class="marked1"><a name="line87" /> 87 def count(stat,count=1)
|
|
707
|
+
</span><span class="marked0"><a name="line88" /> 88 cur_count[stat] ||= 0
|
|
708
|
+
</span><span class="marked1"><a name="line89" /> 89 cur_count[stat] += count
|
|
709
|
+
</span><span class="marked0"><a name="line90" /> 90 end
|
|
710
|
+
</span><span class="inferred1"><a name="line91" /> 91
|
|
711
|
+
</span><span class="inferred0"><a name="line92" /> 92 # Takes the samples for all runs and returns an array suitable for passing
|
|
712
|
+
</span><span class="inferred1"><a name="line93" /> 93 # to CSV or some other table output. If you want to access the runs
|
|
713
|
+
</span><span class="inferred0"><a name="line94" /> 94 # directly then just use the Session#runs attribute.
|
|
714
|
+
</span><span class="marked1"><a name="line95" /> 95 def runs_to_a(headers=false)
|
|
715
|
+
</span><span class="marked0"><a name="line96" /> 96 keys = ["run"] + Sampler.keys
|
|
716
|
+
</span><span class="marked1"><a name="line97" /> 97 results = []
|
|
717
|
+
</span><span class="marked0"><a name="line98" /> 98 results << keys if headers
|
|
718
|
+
</span><span class="inferred1"><a name="line99" /> 99
|
|
719
|
+
</span><span class="marked0"><a name="line100" />100 @runs.length.times do |run|
|
|
720
|
+
</span><span class="marked1"><a name="line101" />101 @runs[run].values.each {|stats| results << [run] + stats.values }
|
|
721
|
+
</span><span class="marked0"><a name="line102" />102 end
|
|
722
|
+
</span><span class="inferred1"><a name="line103" />103
|
|
723
|
+
</span><span class="marked0"><a name="line104" />104 return results
|
|
724
|
+
</span><span class="inferred1"><a name="line105" />105 end
|
|
725
|
+
</span><span class="inferred0"><a name="line106" />106
|
|
726
|
+
</span><span class="inferred1"><a name="line107" />107 # Takes the counts for all the runs and produces an array suitable
|
|
727
|
+
</span><span class="inferred0"><a name="line108" />108 # for CSV output. Use Session#counts to access the counts directly.
|
|
728
|
+
</span><span class="marked1"><a name="line109" />109 def counts_to_a(headers=false)
|
|
729
|
+
</span><span class="marked0"><a name="line110" />110 keys = @counts[0].keys
|
|
730
|
+
</span><span class="marked1"><a name="line111" />111 results = []
|
|
731
|
+
</span><span class="marked0"><a name="line112" />112 results << ["run"] + keys if headers
|
|
732
|
+
</span><span class="inferred1"><a name="line113" />113
|
|
733
|
+
</span><span class="marked0"><a name="line114" />114 @counts.length.times do |run|
|
|
734
|
+
</span><span class="marked1"><a name="line115" />115 results << [run]
|
|
735
|
+
</span><span class="marked0"><a name="line116" />116 keys.each do |k|
|
|
736
|
+
</span><span class="marked1"><a name="line117" />117 results.last << @counts[run][k]
|
|
737
|
+
</span><span class="inferred0"><a name="line118" />118 end
|
|
738
|
+
</span><span class="inferred1"><a name="line119" />119 end
|
|
739
|
+
</span><span class="inferred0"><a name="line120" />120
|
|
740
|
+
</span><span class="marked1"><a name="line121" />121 return results
|
|
741
|
+
</span><span class="inferred0"><a name="line122" />122 end
|
|
742
|
+
</span><span class="inferred1"><a name="line123" />123
|
|
743
|
+
</span><span class="inferred0"><a name="line124" />124 # Lets you track some value you need to report on later. Doesn't
|
|
744
|
+
</span><span class="inferred1"><a name="line125" />125 # do any calculations and is matched for each run. You then access
|
|
745
|
+
</span><span class="inferred0"><a name="line126" />126 # Session#tracking which is an Array of runs, each run being a Hash.
|
|
746
|
+
</span><span class="inferred1"><a name="line127" />127 # Inside the hash is the tracking you registerd by {name => [val1, val2]}.
|
|
747
|
+
</span><span class="marked0"><a name="line128" />128 def track(name,value)
|
|
748
|
+
</span><span class="marked1"><a name="line129" />129 @tracking.last[name] ||= []
|
|
749
|
+
</span><span class="marked0"><a name="line130" />130 @tracking.last[name] << value
|
|
750
|
+
</span><span class="inferred1"><a name="line131" />131 end
|
|
751
|
+
</span><span class="inferred0"><a name="line132" />132
|
|
752
|
+
</span><span class="inferred1"><a name="line133" />133 # Writes the runs to the given file as a CSV.
|
|
753
|
+
</span><span class="marked0"><a name="line134" />134 def write_runs(file)
|
|
754
|
+
</span><span class="marked1"><a name="line135" />135 CSV.open(file,"w") {|out| runs_to_a(headers=true).each {|r| out << r } }
|
|
755
|
+
</span><span class="marked0"><a name="line136" />136 end
|
|
756
|
+
</span><span class="inferred1"><a name="line137" />137
|
|
757
|
+
</span><span class="inferred0"><a name="line138" />138 # Writes the counts to the given file as a CSV.
|
|
758
|
+
</span><span class="marked1"><a name="line139" />139 def write_counts(file)
|
|
759
|
+
</span><span class="marked0"><a name="line140" />140 CSV.open(file,"w") {|out| counts_to_a(headers=true).each {|c| out << c } }
|
|
760
|
+
</span><span class="marked1"><a name="line141" />141 end
|
|
761
|
+
</span><span class="inferred0"><a name="line142" />142
|
|
762
|
+
</span><span class="inferred1"><a name="line143" />143 # Used inside Session#run to wrap an attempted request or potentially
|
|
763
|
+
</span><span class="inferred0"><a name="line144" />144 # failing action and then count the exceptions thrown.
|
|
764
|
+
</span><span class="marked1"><a name="line145" />145 def count_errors(as)
|
|
765
|
+
</span><span class="marked0"><a name="line146" />146 begin
|
|
766
|
+
</span><span class="marked1"><a name="line147" />147 yield
|
|
767
|
+
</span><span class="uncovered0"><a name="line148" />148 rescue
|
|
768
|
+
</span><span class="uncovered1"><a name="line149" />149 count as
|
|
769
|
+
</span><span class="uncovered0"><a name="line150" />150 count $!.class.to_s.tr(":","")
|
|
770
|
+
</span><span class="uncovered1"><a name="line151" />151 end
|
|
771
|
+
</span><span class="marked0"><a name="line152" />152 end
|
|
772
|
+
</span><span class="inferred1"><a name="line153" />153 end
|
|
773
|
+
</span><span class="inferred0"><a name="line154" />154 end
|
|
774
|
+
</span></pre><hr /> <p>Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'>rcov code coverage analysis tool for Ruby</a> version 0.6.0.</p><p>
|
|
775
|
+
<a href='http://validator.w3.org/check/referer'>
|
|
776
|
+
<img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
|
|
777
|
+
</a>
|
|
778
|
+
<a href='http://jigsaw.w3.org/css-validator/check/referer'>
|
|
779
|
+
<img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' />
|
|
780
|
+
</a>
|
|
781
|
+
</p>
|
|
782
|
+
</body>
|
|
783
|
+
</html>
|