Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / google / gofuzz / README.md
1 gofuzz
2 ======
3
4 gofuzz is a library for populating go objects with random values.
5
6 [![GoDoc](https://godoc.org/github.com/google/gofuzz?status.png)](https://godoc.org/github.com/google/gofuzz)
7 [![Travis](https://travis-ci.org/google/gofuzz.svg?branch=master)](https://travis-ci.org/google/gofuzz)
8
9 This is useful for testing:
10
11 * Do your project's objects really serialize/unserialize correctly in all cases?
12 * Is there an incorrectly formatted object that will cause your project to panic?
13
14 Import with ```import "github.com/google/gofuzz"```
15
16 You can use it on single variables:
17 ```go
18 f := fuzz.New()
19 var myInt int
20 f.Fuzz(&myInt) // myInt gets a random value.
21 ```
22
23 You can use it on maps:
24 ```go
25 f := fuzz.New().NilChance(0).NumElements(1, 1)
26 var myMap map[ComplexKeyType]string
27 f.Fuzz(&myMap) // myMap will have exactly one element.
28 ```
29
30 Customize the chance of getting a nil pointer:
31 ```go
32 f := fuzz.New().NilChance(.5)
33 var fancyStruct struct {
34   A, B, C, D *string
35 }
36 f.Fuzz(&fancyStruct) // About half the pointers should be set.
37 ```
38
39 You can even customize the randomization completely if needed:
40 ```go
41 type MyEnum string
42 const (
43         A MyEnum = "A"
44         B MyEnum = "B"
45 )
46 type MyInfo struct {
47         Type MyEnum
48         AInfo *string
49         BInfo *string
50 }
51
52 f := fuzz.New().NilChance(0).Funcs(
53         func(e *MyInfo, c fuzz.Continue) {
54                 switch c.Intn(2) {
55                 case 0:
56                         e.Type = A
57                         c.Fuzz(&e.AInfo)
58                 case 1:
59                         e.Type = B
60                         c.Fuzz(&e.BInfo)
61                 }
62         },
63 )
64
65 var myObject MyInfo
66 f.Fuzz(&myObject) // Type will correspond to whether A or B info is set.
67 ```
68
69 See more examples in ```example_test.go```.
70
71 Happy testing!