<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'> <head> <title>lib/rfuzz/random.rb - C0 code coverage information</title> <style type='text/css'>body { background-color: rgb(240, 240, 245); }</style> <style type='text/css'>span.cross-ref-title { font-size: 140%; } span.cross-ref a { text-decoration: none; } span.cross-ref { background-color:#f3f7fa; border: 1px dashed #333; margin: 1em; padding: 0.5em; overflow: hidden; } a.crossref-toggle { text-decoration: none; } span.marked0 { background-color: rgb(185, 210, 200); display: block; } span.marked1 { background-color: rgb(190, 215, 205); display: block; } span.inferred0 { background-color: rgb(175, 200, 200); display: block; } span.inferred1 { background-color: rgb(180, 205, 205); display: block; } span.uncovered0 { background-color: rgb(225, 110, 110); display: block; } span.uncovered1 { background-color: rgb(235, 120, 120); display: block; } span.overview { border-bottom: 8px solid black; } div.overview { border-bottom: 8px solid black; } body { font-family: verdana, arial, helvetica; } div.footer { font-size: 68%; margin-top: 1.5em; } h1, h2, h3, h4, h5, h6 { margin-bottom: 0.5em; } h5 { margin-top: 0.5em; } .hidden { display: none; } div.separator { height: 10px; } /* Commented out for better readability, esp. on IE */ /* table tr td, table tr th { font-size: 68%; } td.value table tr td { font-size: 11px; } */ table.percent_graph { height: 12px; border: #808080 1px solid; empty-cells: show; } table.percent_graph td.covered { height: 10px; background: #00f000; } table.percent_graph td.uncovered { height: 10px; background: #e00000; } table.percent_graph td.NA { height: 10px; background: #eaeaea; } table.report { border-collapse: collapse; width: 100%; } table.report td.heading { background: #dcecff; border: #d0d0d0 1px solid; font-weight: bold; text-align: center; } table.report td.heading:hover { background: #c0ffc0; } table.report td.text { border: #d0d0d0 1px solid; } table.report td.value { text-align: right; border: #d0d0d0 1px solid; } table.report tr.light { background-color: rgb(240, 240, 245); } table.report tr.dark { background-color: rgb(230, 230, 235); } </style> <script type='text/javascript'> // <![CDATA[ function toggleCode( id ) { if ( document.getElementById ) elem = document.getElementById( id ); else if ( document.all ) elem = eval( "document.all." + id ); else return false; elemStyle = elem.style; if ( elemStyle.display != "block" ) { elemStyle.display = "block" } else { elemStyle.display = "none" } return true; } // Make cross-references hidden by default document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" ) // ]]> </script> <style type='text/css'>span.run0 { background-color: rgb(178, 204, 255); display: block; } span.run1 { background-color: rgb(178, 206, 255); display: block; } span.run2 { background-color: rgb(178, 209, 255); display: block; } span.run3 { background-color: rgb(178, 211, 255); display: block; } span.run4 { background-color: rgb(178, 214, 255); display: block; } span.run5 { background-color: rgb(178, 218, 255); display: block; } span.run6 { background-color: rgb(178, 220, 255); display: block; } span.run7 { background-color: rgb(178, 223, 255); display: block; } span.run8 { background-color: rgb(178, 225, 255); display: block; } span.run9 { background-color: rgb(178, 228, 255); display: block; } span.run10 { background-color: rgb(178, 232, 255); display: block; } span.run11 { background-color: rgb(178, 234, 255); display: block; } span.run12 { background-color: rgb(178, 237, 255); display: block; } span.run13 { background-color: rgb(178, 239, 255); display: block; } span.run14 { background-color: rgb(178, 242, 255); display: block; } span.run15 { background-color: rgb(178, 246, 255); display: block; } span.run16 { background-color: rgb(178, 248, 255); display: block; } span.run17 { background-color: rgb(178, 251, 255); display: block; } span.run18 { background-color: rgb(178, 253, 255); display: block; } span.run19 { background-color: rgb(178, 255, 253); display: block; } span.run20 { background-color: rgb(178, 255, 249); display: block; } span.run21 { background-color: rgb(178, 255, 247); display: block; } span.run22 { background-color: rgb(178, 255, 244); display: block; } span.run23 { background-color: rgb(178, 255, 242); display: block; } span.run24 { background-color: rgb(178, 255, 239); display: block; } span.run25 { background-color: rgb(178, 255, 235); display: block; } span.run26 { background-color: rgb(178, 255, 233); display: block; } span.run27 { background-color: rgb(178, 255, 230); display: block; } span.run28 { background-color: rgb(178, 255, 228); display: block; } span.run29 { background-color: rgb(178, 255, 225); display: block; } span.run30 { background-color: rgb(178, 255, 221); display: block; } span.run31 { background-color: rgb(178, 255, 219); display: block; } span.run32 { background-color: rgb(178, 255, 216); display: block; } span.run33 { background-color: rgb(178, 255, 214); display: block; } span.run34 { background-color: rgb(178, 255, 211); display: block; } span.run35 { background-color: rgb(178, 255, 207); display: block; } span.run36 { background-color: rgb(178, 255, 205); display: block; } span.run37 { background-color: rgb(178, 255, 202); display: block; } span.run38 { background-color: rgb(178, 255, 200); display: block; } span.run39 { background-color: rgb(178, 255, 197); display: block; } span.run40 { background-color: rgb(178, 255, 193); display: block; } span.run41 { background-color: rgb(178, 255, 191); display: block; } span.run42 { background-color: rgb(178, 255, 188); display: block; } span.run43 { background-color: rgb(178, 255, 186); display: block; } span.run44 { background-color: rgb(178, 255, 183); display: block; } span.run45 { background-color: rgb(178, 255, 179); display: block; } span.run46 { background-color: rgb(179, 255, 178); display: block; } span.run47 { background-color: rgb(182, 255, 178); display: block; } span.run48 { background-color: rgb(184, 255, 178); display: block; } span.run49 { background-color: rgb(187, 255, 178); display: block; } span.run50 { background-color: rgb(191, 255, 178); display: block; } span.run51 { background-color: rgb(193, 255, 178); display: block; } span.run52 { background-color: rgb(196, 255, 178); display: block; } span.run53 { background-color: rgb(198, 255, 178); display: block; } span.run54 { background-color: rgb(201, 255, 178); display: block; } span.run55 { background-color: rgb(205, 255, 178); display: block; } span.run56 { background-color: rgb(207, 255, 178); display: block; } span.run57 { background-color: rgb(210, 255, 178); display: block; } span.run58 { background-color: rgb(212, 255, 178); display: block; } span.run59 { background-color: rgb(215, 255, 178); display: block; } span.run60 { background-color: rgb(219, 255, 178); display: block; } span.run61 { background-color: rgb(221, 255, 178); display: block; } span.run62 { background-color: rgb(224, 255, 178); display: block; } span.run63 { background-color: rgb(226, 255, 178); display: block; } span.run64 { background-color: rgb(229, 255, 178); display: block; } span.run65 { background-color: rgb(233, 255, 178); display: block; } span.run66 { background-color: rgb(235, 255, 178); display: block; } span.run67 { background-color: rgb(238, 255, 178); display: block; } span.run68 { background-color: rgb(240, 255, 178); display: block; } span.run69 { background-color: rgb(243, 255, 178); display: block; } span.run70 { background-color: rgb(247, 255, 178); display: block; } span.run71 { background-color: rgb(249, 255, 178); display: block; } span.run72 { background-color: rgb(252, 255, 178); display: block; } span.run73 { background-color: rgb(255, 255, 178); display: block; } span.run74 { background-color: rgb(255, 252, 178); display: block; } span.run75 { background-color: rgb(255, 248, 178); display: block; } span.run76 { background-color: rgb(255, 246, 178); display: block; } span.run77 { background-color: rgb(255, 243, 178); display: block; } span.run78 { background-color: rgb(255, 240, 178); display: block; } span.run79 { background-color: rgb(255, 238, 178); display: block; } span.run80 { background-color: rgb(255, 234, 178); display: block; } span.run81 { background-color: rgb(255, 232, 178); display: block; } span.run82 { background-color: rgb(255, 229, 178); display: block; } span.run83 { background-color: rgb(255, 226, 178); display: block; } span.run84 { background-color: rgb(255, 224, 178); display: block; } span.run85 { background-color: rgb(255, 220, 178); display: block; } span.run86 { background-color: rgb(255, 218, 178); display: block; } span.run87 { background-color: rgb(255, 215, 178); display: block; } span.run88 { background-color: rgb(255, 212, 178); display: block; } span.run89 { background-color: rgb(255, 210, 178); display: block; } span.run90 { background-color: rgb(255, 206, 178); display: block; } span.run91 { background-color: rgb(255, 204, 178); display: block; } span.run92 { background-color: rgb(255, 201, 178); display: block; } span.run93 { background-color: rgb(255, 198, 178); display: block; } span.run94 { background-color: rgb(255, 196, 178); display: block; } span.run95 { background-color: rgb(255, 192, 178); display: block; } span.run96 { background-color: rgb(255, 189, 178); display: block; } span.run97 { background-color: rgb(255, 187, 178); display: block; } span.run98 { background-color: rgb(255, 184, 178); display: block; } span.run99 { background-color: rgb(255, 182, 178); display: block; } span.run100 { background-color: rgb(255, 178, 178); display: block; } </style> </head> <body> <h3>C0 code coverage information</h3> <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> </p> <hr /><pre><span class='marked0'>Code reported as executed by Ruby looks like this... </span><span class='marked1'>and this: this line is also marked as covered. </span><span class='inferred0'>Lines considered as run by rcov, but not reported by Ruby, look like this, </span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics). </span><span class='uncovered0'>Finally, here's a line marked as not executed. </span></pre> <table class='report'> <thead> <tr> <td class='heading'>Name</td> <td class='heading'>Total lines</td> <td class='heading'>Lines of code</td> <td class='heading'>Total coverage</td> <td class='heading'>Code coverage</td> </tr> </thead> <tbody> <tr class='light'> <td> <a href='lib-rfuzz-random_rb.html'>lib/rfuzz/random.rb</a> </td> <td class='value'> <tt>110</tt> </td> <td class='value'> <tt>60</tt> </td> <td> <table cellspacing='0' cellpadding='0' align='right'> <tr> <td> <tt>100.0%</tt> </td> <td> <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'> <tr> <td class='covered' width='100' /> <td class='uncovered' width='0' /> </tr> </table> </td> </tr> </table> </td> <td> <table cellspacing='0' cellpadding='0' align='right'> <tr> <td> <tt>100.0%</tt> </td> <td> <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'> <tr> <td class='covered' width='100' /> <td class='uncovered' width='0' /> </tr> </table> </td> </tr> </table> </td> </tr> </tbody> </table><pre><span class="inferred1"><a name="line1" /> 1 # Implements the randomness engine for RFuzz </span><span class="marked0"><a name="line2" /> 2 require 'base64' </span><span class="marked1"><a name="line3" /> 3 require 'fuzzrnd' </span><span class="marked0"><a name="line4" /> 4 </span><span class="marked1"><a name="line5" /> 5 module RFuzz </span><span class="marked0"><a name="line6" /> 6 class RandomGenerator </span><span class="inferred1"><a name="line7" /> 7 </span><span class="inferred0"><a name="line8" /> 8 # Either initialized without a word dictionary or with one. </span><span class="inferred1"><a name="line9" /> 9 # If you initialize with a word dictionary then you can generate </span><span class="inferred0"><a name="line10" /> 10 # the random words, and is the expected behavior. You can use </span><span class="inferred1"><a name="line11" /> 11 # the "type" parameter to change the default type of generated </span><span class="inferred0"><a name="line12" /> 12 # content from words to any of the other types available </span><span class="inferred1"><a name="line13" /> 13 # [:base64,:uris,:byte_array,:ints,:floats]. </span><span class="inferred0"><a name="line14" /> 14 # </span><span class="inferred1"><a name="line15" /> 15 # The dict should just be an array of words. </span><span class="marked0"><a name="line16" /> 16 def initialize(dict=nil, type=:words) </span><span class="inferred1"><a name="line17" /> 17 # NOT meant to be secure so chill </span><span class="marked0"><a name="line18" /> 18 @rnd = FuzzRnd.new("#{self.inspect}") </span><span class="marked1"><a name="line19" /> 19 @dict = dict </span><span class="marked0"><a name="line20" /> 20 @type = type </span><span class="inferred1"><a name="line21" /> 21 end </span><span class="inferred0"><a name="line22" /> 22 </span><span class="inferred1"><a name="line23" /> 23 # Returns a random hash of type (default :words) where </span><span class="inferred0"><a name="line24" /> 24 # the key=>value is randomly generated. This is aliased </span><span class="inferred1"><a name="line25" /> 25 # for RandomGenerator.queries and RandomGenerator.headers </span><span class="inferred0"><a name="line26" /> 26 # so that it is more readable. </span><span class="inferred1"><a name="line27" /> 27 # </span><span class="inferred0"><a name="line28" /> 28 # [:words,:base64,:uris,:byte_array,:ints,:floats] are the available </span><span class="inferred1"><a name="line29" /> 29 # types of generated hash garbage you can use. These "types" just </span><span class="inferred0"><a name="line30" /> 30 # translate to function calls on self.send(type,length). </span><span class="marked1"><a name="line31" /> 31 def hash_of(count,length=5,type=@type) </span><span class="marked0"><a name="line32" /> 32 list = [] </span><span class="marked1"><a name="line33" /> 33 count.times do </span><span class="marked0"><a name="line34" /> 34 list << Hash[*send(type,length*2)] </span><span class="marked1"><a name="line35" /> 35 end </span><span class="inferred0"><a name="line36" /> 36 </span><span class="marked1"><a name="line37" /> 37 return list </span><span class="inferred0"><a name="line38" /> 38 end </span><span class="marked1"><a name="line39" /> 39 alias :queries :hash_of </span><span class="marked0"><a name="line40" /> 40 alias :headers :hash_of </span><span class="inferred1"><a name="line41" /> 41 </span><span class="inferred0"><a name="line42" /> 42 # Generate an array of random length URIs based on words from the dict. </span><span class="inferred1"><a name="line43" /> 43 # The default max length=100 and is the number of words to chain together </span><span class="inferred0"><a name="line44" /> 44 # into a gigantor URI. The URI starts with /. </span><span class="marked1"><a name="line45" /> 45 def uris(count,length=100) </span><span class="marked0"><a name="line46" /> 46 ulist = [] </span><span class="marked1"><a name="line47" /> 47 count.times do </span><span class="marked0"><a name="line48" /> 48 ulist << "/" + words(num(length)).join("/").tr("'","") </span><span class="marked1"><a name="line49" /> 49 end </span><span class="marked0"><a name="line50" /> 50 return ulist </span><span class="inferred1"><a name="line51" /> 51 end </span><span class="inferred0"><a name="line52" /> 52 </span><span class="inferred1"><a name="line53" /> 53 # Generates an array with count number of randomly selected </span><span class="inferred0"><a name="line54" /> 54 # words from the dictionary. </span><span class="marked1"><a name="line55" /> 55 def words(count=1) </span><span class="marked0"><a name="line56" /> 56 raise "You need a dictionary." unless @dict </span><span class="marked1"><a name="line57" /> 57 w = ints(count, @dict.length) </span><span class="marked0"><a name="line58" /> 58 w.collect {|i| @dict[i]} </span><span class="inferred1"><a name="line59" /> 59 end </span><span class="inferred0"><a name="line60" /> 60 </span><span class="inferred1"><a name="line61" /> 61 </span><span class="inferred0"><a name="line62" /> 62 # Generates an array of base64 encoded chunks of garbage. </span><span class="inferred1"><a name="line63" /> 63 # The length=100 is the default and is a max, but the lengths </span><span class="inferred0"><a name="line64" /> 64 # are random. </span><span class="marked1"><a name="line65" /> 65 def base64(count,length=100) </span><span class="marked0"><a name="line66" /> 66 list = [] </span><span class="marked1"><a name="line67" /> 67 count.times { </span><span class="marked0"><a name="line68" /> 68 list << Base64.encode64(@rnd.data(num(length))) </span><span class="marked1"><a name="line69" /> 69 } </span><span class="marked0"><a name="line70" /> 70 return list </span><span class="inferred1"><a name="line71" /> 71 end </span><span class="inferred0"><a name="line72" /> 72 </span><span class="inferred1"><a name="line73" /> 73 # Generates an array of garbage byte strings, these are </span><span class="inferred0"><a name="line74" /> 74 # binary strings so very nasty. As usual, length=100 </span><span class="inferred1"><a name="line75" /> 75 # is a max for the random lengths. </span><span class="marked0"><a name="line76" /> 76 def byte_array(count,length=100) </span><span class="marked1"><a name="line77" /> 77 list = [] </span><span class="marked0"><a name="line78" /> 78 count.times { list << @rnd.data(num(length)) } </span><span class="marked1"><a name="line79" /> 79 return list </span><span class="inferred0"><a name="line80" /> 80 end </span><span class="inferred1"><a name="line81" /> 81 </span><span class="inferred0"><a name="line82" /> 82 # Generate a single String with random binary garbage in it. </span><span class="marked1"><a name="line83" /> 83 def bytes(count) </span><span class="marked0"><a name="line84" /> 84 @rnd.data(count) </span><span class="marked1"><a name="line85" /> 85 end </span><span class="inferred0"><a name="line86" /> 86 </span><span class="inferred1"><a name="line87" /> 87 # A random number with a maximum of max. </span><span class="marked0"><a name="line88" /> 88 def num(max) </span><span class="marked1"><a name="line89" /> 89 ints(1, max)[0] </span><span class="marked0"><a name="line90" /> 90 end </span><span class="inferred1"><a name="line91" /> 91 </span><span class="inferred0"><a name="line92" /> 92 # An array of integers with a default max of max. </span><span class="inferred1"><a name="line93" /> 93 # The integers are 4 bytes and pulled from network </span><span class="inferred0"><a name="line94" /> 94 # encoding so they should be cross platform (meaning </span><span class="inferred1"><a name="line95" /> 95 # tests should run the same on all platforms). </span><span class="marked0"><a name="line96" /> 96 def ints(count, max = nil) </span><span class="marked1"><a name="line97" /> 97 i = @rnd.data(count * 4).unpack("N*") </span><span class="marked0"><a name="line98" /> 98 if max </span><span class="marked1"><a name="line99" /> 99 i = i.collect {|i| i % max } </span><span class="inferred0"><a name="line100" />100 end </span><span class="marked1"><a name="line101" />101 return i </span><span class="inferred0"><a name="line102" />102 end </span><span class="inferred1"><a name="line103" />103 </span><span class="inferred0"><a name="line104" />104 # An array for random floats. </span><span class="marked1"><a name="line105" />105 def floats(count) </span><span class="marked0"><a name="line106" />106 @rnd.data(count * 8).unpack("G*") </span><span class="marked1"><a name="line107" />107 end </span><span class="inferred0"><a name="line108" />108 end </span><span class="inferred1"><a name="line109" />109 </span><span class="inferred0"><a name="line110" />110 end </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> <a href='http://validator.w3.org/check/referer'> <img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' /> </a> <a href='http://jigsaw.w3.org/css-validator/check/referer'> <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' /> </a> </p> </body> </html>