From 6ac98b5e58be471f66b8b0111e84e92ec3c9f414 Mon Sep 17 00:00:00 2001 From: Irene Velychko Date: Wed, 12 Sep 2018 21:35:50 +0200 Subject: [PATCH 1/7] Generate random string for string type --- datafiller.go | 14 +++++++++++++- datafiller_test.go | 6 ++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/datafiller.go b/datafiller.go index dc3a804..556e1fe 100644 --- a/datafiller.go +++ b/datafiller.go @@ -17,6 +17,10 @@ func init() { const ( taggedStructKey = "datafiller" + // for random string generation + letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + letterIdxBits = 6 // 6 bits to represent a letter index + letterIdxMask = 1< Date: Fri, 1 Feb 2019 10:42:41 -0600 Subject: [PATCH 2/7] Add null packages --- packages.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages.go b/packages.go index 5c5c906..82dbcdf 100644 --- a/packages.go +++ b/packages.go @@ -4,10 +4,25 @@ import ( "math/rand" "reflect" "time" + + null "gopkg.in/guregu/null.v3" ) var packages = make(map[string]reflect.Value) func packagesInit() { + randSeed := rand.New(rand.NewSource(-1)) packages["time.Time"] = reflect.ValueOf(time.Unix(rand.Int63n(2000000000), 0)) + // guregu/null structs have Valid field that is a bool. + // this field was occasionally randomly set to false, meaning whatever value was passsed + // would be interpreted as null. Always want some value, so always set valid = true for null packages + packages["null.String"] = reflect.ValueOf(null.NewString("test", true)) + packages["null.Int"] = reflect.ValueOf(null.NewInt(rand.Int63n(100), true)) + if randSeed.Int63n(2) == 0 { + packages["null.Bool"] = reflect.ValueOf(null.NewBool(false, true)) + } else { + packages["null.Bool"] = reflect.ValueOf(null.NewBool(true, true)) + } + packages["null.Float"] = reflect.ValueOf(null.NewFloat(float64(randSeed.Float32()), true)) + packages["null.Time"] = reflect.ValueOf(null.NewTime(time.Unix(rand.Int63n(2000000000), 0), true)) } From f7b1d390f4fb85a8c116b3fb81ea8168f689524e Mon Sep 17 00:00:00 2001 From: fwieffering Date: Fri, 1 Feb 2019 11:21:36 -0600 Subject: [PATCH 3/7] fix package path --- packages.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages.go b/packages.go index 82dbcdf..6e08b1e 100644 --- a/packages.go +++ b/packages.go @@ -16,13 +16,13 @@ func packagesInit() { // guregu/null structs have Valid field that is a bool. // this field was occasionally randomly set to false, meaning whatever value was passsed // would be interpreted as null. Always want some value, so always set valid = true for null packages - packages["null.String"] = reflect.ValueOf(null.NewString("test", true)) - packages["null.Int"] = reflect.ValueOf(null.NewInt(rand.Int63n(100), true)) + packages["gopkg.in/guregu/null.String"] = reflect.ValueOf(null.NewString("test", true)) + packages["gopkg.in/guregu/null.Int"] = reflect.ValueOf(null.NewInt(rand.Int63n(100), true)) if randSeed.Int63n(2) == 0 { - packages["null.Bool"] = reflect.ValueOf(null.NewBool(false, true)) + packages["gopkg.in/guregu/null.Bool"] = reflect.ValueOf(null.NewBool(false, true)) } else { - packages["null.Bool"] = reflect.ValueOf(null.NewBool(true, true)) + packages["gopkg.in/guregu/null.Bool"] = reflect.ValueOf(null.NewBool(true, true)) } - packages["null.Float"] = reflect.ValueOf(null.NewFloat(float64(randSeed.Float32()), true)) - packages["null.Time"] = reflect.ValueOf(null.NewTime(time.Unix(rand.Int63n(2000000000), 0), true)) + packages["gopkg.in/guregu/null.Float"] = reflect.ValueOf(null.NewFloat(float64(randSeed.Float32()), true)) + packages["gopkg.in/guregu/null.Time"] = reflect.ValueOf(null.NewTime(time.Unix(rand.Int63n(2000000000), 0), true)) } From 428a1125f28f702c44c74ab4d6a843c134be55a5 Mon Sep 17 00:00:00 2001 From: fwieffering Date: Fri, 1 Feb 2019 11:21:44 -0600 Subject: [PATCH 4/7] Add test --- datafiller.go | 3 ++- datafiller_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/datafiller.go b/datafiller.go index dc3a804..7e183e3 100644 --- a/datafiller.go +++ b/datafiller.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/Pallinder/go-randomdata" + randomdata "github.com/Pallinder/go-randomdata" ) func init() { @@ -112,6 +112,7 @@ func (self *Filler) recursiveSet(val reflect.Value) { var fullPath string fullPath = val.Type().PkgPath() + "." + val.Type().Name() pkgVal, ok := packages[fullPath] + if ok { val.Set(pkgVal) return diff --git a/datafiller_test.go b/datafiller_test.go index 8ceb5ad..dfd40ba 100644 --- a/datafiller_test.go +++ b/datafiller_test.go @@ -7,6 +7,8 @@ import ( "reflect" "testing" "time" + + null "gopkg.in/guregu/null.v3" ) // Actual tests @@ -85,6 +87,30 @@ func TestSimpleTypes(t *testing.T) { } } +type PackageTest struct { + NullInt null.Int + NullStr null.String + NullBool null.Bool +} + +func TestPackageTypes(t *testing.T) { + var p = PackageTest{} + + Fill(&p) + + vals := reflect.ValueOf(p) + + for i := 0; i < vals.NumField(); i++ { + field := vals.Field(i).Interface() + + if nullInt, ok := field.(null.Int); ok { + if !nullInt.Valid { + t.Fatalf("gopkg.in/guregu/null.Int.Valid is not true") + } + } + } +} + // var ArrayV array // var ChanV chan // var FuncV func From 5be83ea3b5b57b803ebdc58773b49f001fa7d530 Mon Sep 17 00:00:00 2001 From: fwieffering Date: Fri, 1 Feb 2019 11:26:28 -0600 Subject: [PATCH 5/7] fix package path again --- packages.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages.go b/packages.go index 6e08b1e..ecbd143 100644 --- a/packages.go +++ b/packages.go @@ -16,13 +16,13 @@ func packagesInit() { // guregu/null structs have Valid field that is a bool. // this field was occasionally randomly set to false, meaning whatever value was passsed // would be interpreted as null. Always want some value, so always set valid = true for null packages - packages["gopkg.in/guregu/null.String"] = reflect.ValueOf(null.NewString("test", true)) - packages["gopkg.in/guregu/null.Int"] = reflect.ValueOf(null.NewInt(rand.Int63n(100), true)) + packages["gopkg.in/guregu/null.v3.String"] = reflect.ValueOf(null.NewString("test", true)) + packages["gopkg.in/guregu/null.v3.Int"] = reflect.ValueOf(null.NewInt(rand.Int63n(100), true)) if randSeed.Int63n(2) == 0 { - packages["gopkg.in/guregu/null.Bool"] = reflect.ValueOf(null.NewBool(false, true)) + packages["gopkg.in/guregu/null.v3.Bool"] = reflect.ValueOf(null.NewBool(false, true)) } else { - packages["gopkg.in/guregu/null.Bool"] = reflect.ValueOf(null.NewBool(true, true)) + packages["gopkg.in/guregu/null.v3.Bool"] = reflect.ValueOf(null.NewBool(true, true)) } - packages["gopkg.in/guregu/null.Float"] = reflect.ValueOf(null.NewFloat(float64(randSeed.Float32()), true)) - packages["gopkg.in/guregu/null.Time"] = reflect.ValueOf(null.NewTime(time.Unix(rand.Int63n(2000000000), 0), true)) + packages["gopkg.in/guregu/null.v3.Float"] = reflect.ValueOf(null.NewFloat(float64(randSeed.Float32()), true)) + packages["gopkg.in/guregu/null.v3.Time"] = reflect.ValueOf(null.NewTime(time.Unix(rand.Int63n(2000000000), 0), true)) } From 256a8c6e08f49c8b3a993979231dfb2318fccf87 Mon Sep 17 00:00:00 2001 From: fwieffering Date: Mon, 4 Feb 2019 10:49:17 -0600 Subject: [PATCH 6/7] use random string for guregu/null.v3.string --- datafiller.go | 23 ++++++++++++++--------- packages.go | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/datafiller.go b/datafiller.go index 236ed0d..da39c6b 100644 --- a/datafiller.go +++ b/datafiller.go @@ -18,11 +18,23 @@ func init() { const ( taggedStructKey = "datafiller" // for random string generation - letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" letterIdxBits = 6 // 6 bits to represent a letter index letterIdxMask = 1< Date: Mon, 4 Feb 2019 11:48:54 -0600 Subject: [PATCH 7/7] improve random seed for string values --- datafiller.go | 4 +++- packages.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/datafiller.go b/datafiller.go index da39c6b..e6fbb19 100644 --- a/datafiller.go +++ b/datafiller.go @@ -26,8 +26,10 @@ const ( //generate random string with len 10 func generateString() string { b := make([]byte, 10) + randSeed := rand.New(rand.NewSource(time.Now().Unix() + rand.Int63n(100))) + for i := 0; i < 10; { - if idx := int(rand.Int63() & letterIdxMask); idx < len(letterBytes) { + if idx := int(randSeed.Int63() & letterIdxMask); idx < len(letterBytes) { b[i] = letterBytes[idx] i++ } diff --git a/packages.go b/packages.go index 4668c4e..63a4ce9 100644 --- a/packages.go +++ b/packages.go @@ -11,7 +11,7 @@ import ( var packages = make(map[string]reflect.Value) func packagesInit() { - randSeed := rand.New(rand.NewSource(-1)) + randSeed := rand.New(rand.NewSource(time.Now().Unix() + rand.Int63n(100))) packages["time.Time"] = reflect.ValueOf(time.Unix(rand.Int63n(2000000000), 0)) // guregu/null structs have Valid field that is a bool. // this field was occasionally randomly set to false, meaning whatever value was passsed