1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package gofuzzheaders
16
17 import (
18
19
20
21 "testing"
22 )
23
24 type TestStruct1 struct {
25 Field1 string
26 Field2 string
27 Field3 []byte
28 }
29
30 func TestStruct_fuzzing1(t *testing.T) {
31 data := []byte{
32 0x00, 0x00, 0x00, 0x03,
33 0x41, 0x42, 0x43,
34 0x00, 0x00, 0x00, 0x03,
35 0x41, 0x42, 0x43,
36 0x00, 0x00, 0x00, 0x01,
37 0x41,
38 }
39
40 ts1 := TestStruct1{}
41 fuzz1 := NewConsumer(data)
42 err := fuzz1.GenerateStruct(&ts1)
43 if err != nil {
44 t.Errorf("%v", err)
45 }
46 if ts1.Field1 != "ABC" {
47 t.Errorf("ts1.Field1 was %v but should be 'AB'", []byte(ts1.Field1))
48 }
49 if ts1.Field2 != "ABC" {
50 t.Errorf("ts1.Field2 was %v but should be 'ABC'", ts1.Field2)
51 }
52 if string(ts1.Field3) != "A" {
53 t.Errorf("ts1.Field3 was %v but should be 'A'", ts1.Field3)
54 }
55 }
56
57
58 func TestStruct_fuzzing2(t *testing.T) {
59 data := []byte{
60 0x00, 0x00, 0x00, 0x03,
61 0x41, 0x42, 0x43,
62 0x00, 0x00, 0x00, 0x03,
63 0x41, 0x42, 0x43,
64 0x00, 0x00, 0x00, 0x50,
65 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
66 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
67 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
68 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
69 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
70 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
71 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
72 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
73 }
74
75 ts1 := TestStruct1{}
76 fuzz1 := NewConsumer(data)
77 err := fuzz1.GenerateStruct(&ts1)
78 if err != nil {
79 t.Errorf("%v", err)
80 }
81 if ts1.Field1 != "ABC" {
82 t.Errorf("ts1.Field1 was %v but should be 'ABC'", ts1.Field1)
83 }
84 if ts1.Field2 != "ABC" {
85 t.Errorf("ts1.Field2 was %v but should be 'ABC'", ts1.Field2)
86 }
87 if len(ts1.Field3) != 80 {
88 t.Errorf("ts1.Field3 was %v but should be 'ABCD'", ts1.Field3)
89 }
90 }
91
92
133
134 func TestGetUint32(t *testing.T) {
135 data := []byte{
136 0x00,
137 0x00,
138 0x03,
139 0x01,
140 }
141 f := NewConsumer(data)
142 i, err := f.GetUint32()
143 if err != nil {
144 t.Fatalf("%v\n", err)
145 }
146 if i != uint32(769) {
147 t.Fatalf("i should be 636 but is %v\n", i)
148 }
149 }
150
151 func TestGeBytes1(t *testing.T) {
152 data := []byte{
153 0x00,
154 0x00,
155 0x03,
156 0x01,
157 }
158 for i := 0; i < 769; i++ {
159 data = append(data, 0x00)
160 }
161 f := NewConsumer(data)
162 b, err := f.GetBytes()
163 if err != nil {
164 t.Fatalf("%v\n", err)
165 }
166 if len(b) != 769 {
167 t.Fatalf("len(b) should be 769 but is %v\n", len(b))
168 }
169
170 for i := 0; i < 769; i++ {
171 if b[i] != 0 {
172 t.Fatalf("b[%d] should be 0x00 but is %v\n", i, b[i])
173 }
174 }
175 }
176
177 func TestGeBytes2(t *testing.T) {
178 data := []byte{
179 0x00,
180 0x00,
181 0x03,
182 0x01,
183 }
184 for i := 0; i < 767; i++ {
185 data = append(data, 0x00)
186 }
187 f := NewConsumer(data)
188 b, err := f.GetBytes()
189 if err != nil {
190 t.Fatalf("%v\n", err)
191 }
192 if len(b) != 2 {
193 t.Fatalf("len(b) should be 2 but is %v\n", len(b))
194 }
195
196 for i := 0; i < 2; i++ {
197 if b[i] != 0 {
198 t.Fatalf("b[%d] should be 0x00 but is %v\n", i, b[i])
199 }
200 }
201 }
202
203 func TestGeBytes3(t *testing.T) {
204 data := []byte{
205 0x00,
206 0x00,
207 0x03,
208 0x01,
209 }
210 for i := 0; i < 500; i++ {
211 data = append(data, 0x00)
212 }
213 f := NewConsumer(data)
214 b, err := f.GetBytes()
215 if err != nil {
216 t.Fatalf("%v\n", err)
217 }
218 if len(b) != 269 {
219 t.Fatalf("len(b) should be 269 but is %v\n", len(b))
220 }
221
222 for i := 0; i < 269; i++ {
223 if b[i] != 0 {
224 t.Fatalf("b[%d] should be 0x00 but is %v\n", i, b[i])
225 }
226 }
227 }
228
View as plain text