[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r10890: started to reorganise test cases (topf/trunk/lib)



Author: benedikt
Date: 2007-07-20 05:47:15 -0400 (Fri, 20 Jul 2007)
New Revision: 10890

Added:
   topf/trunk/lib/fuzz-test.rb
Modified:
   topf/trunk/lib/fuzz.rb
Log:
started to reorganise test cases

Added: topf/trunk/lib/fuzz-test.rb
===================================================================
--- topf/trunk/lib/fuzz-test.rb	                        (rev 0)
+++ topf/trunk/lib/fuzz-test.rb	2007-07-20 09:47:15 UTC (rev 10890)
@@ -0,0 +1,17 @@
+# This file includes a default test-case object
+#
+# test template
+# default_tests.register Fuzz::Test.new("") {|arg|    }
+
+default_tests = Tests.new
+# Tests for character fields aka strings
+default_tests.register Fuzz::Test.new("char") {|arg, size|  arg     } # Return string
+default_tests.register Fuzz::Test.new("char") {|arg, size|  ""      } # Return empty String 
+default_tests.register Fuzz::Test.new("char") {|arg, size|  "A"*Fuzz::MAX_RAND    } # LONG STRING
+default_tests.register Fuzz::Test.new("char") {|arg, size|  "%n"*Fuzz::MAX_RAND   } # FORMAT STRING
+
+# Tests for signed numbers
+default_tests.register Fuzz::Test.new("signed") {|arg, size|  rand(5) } # return a small number 
+default_tests.register Fuzz::Test.new("signed") {|arg, size|  -1      } # return -1 
+default_tests.register Fuzz::Test.new("signed") {|arg, size|  (2.power!(size)/2)-1      } # biggest  2s complement number 
+default_tests.register Fuzz::Test.new("signed") {|arg, size|  -(2.power!(size)/2)       } # smallest 2s complement number 

Modified: topf/trunk/lib/fuzz.rb
===================================================================
--- topf/trunk/lib/fuzz.rb	2007-07-20 03:30:38 UTC (rev 10889)
+++ topf/trunk/lib/fuzz.rb	2007-07-20 09:47:15 UTC (rev 10890)
@@ -2,6 +2,59 @@
     MAX_RAND = 1000
     MAX_STRING_PERMUTATIONS = 3 
 
+    # This Class holds all tests to related to a given field-type
+    class Tests
+        def initialize
+            @char_tests      = []
+            @unsigned_tests  = []
+            @signed_tests    = []
+            @octet_tests     = []
+        end
+        def register(test)
+            raise "argument must be a Fuzz::Test object" if !test.is_a?(Fuzz::Test)
+            case test.type
+                when "char"
+                    @char_tests.push test
+                when "unsigned"
+                    @unsigned_tests.push test
+                when "signed"
+                    @signed_tests.push test
+                when "octet"
+                    @octet_tests.push test
+            end
+        end
+        def test_struct(struct)
+            raise "argument must be a BitStruct object" if !struct.is_a?(BitStruct)
+             
+        end
+    end
+
+    # This Class holds our test which is a ruby-block that must be able to process one argument
+    # which is the default value of the Field to be tested. This argument can be ignored if wanted.
+    class Test
+        attr_reader :type
+        def initialize(type, &block)
+            case type.downcase
+                when "char"
+                    @type = "char"
+                when "unsigned"
+                    @type = "unsigned"
+                when "signed"
+                    @type = "signed"
+                when "octet"
+                    @type = "octet"
+                else
+                    raise "unknown type"
+                end
+            @test = block
+        end
+        def run(arg)
+                @test.call arg
+        end
+    end
+    # sample test-case
+    # Fuzz::Test.new("char") {|arg| arg.insert( rand(arg.size), "A"*rand(1024) ) } 
+
     def Fuzz.fuzzField(type, length, value)
         case type.to_s
             when "BitStruct::CharField"
@@ -94,6 +147,8 @@
         end
     end
 
+    # makes a Connection to a given target and sends our raw data to it
+    # see yourself what options are needed :>
     class Host
         def initialize(args)
             @type = args[:type]