aboutsummaryrefslogtreecommitdiffstats
path: root/prog/prog_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-01-24 19:28:36 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-01-27 17:08:43 +0100
commit08146b1a84f975e2cc1007242b4202dc5cc0e5c5 (patch)
treead9f57cfbed4b9008223359d0f765a2b6a27a209 /prog/prog_test.go
parent5d7477249ba074bbdc9ffbf80314397dbe90e886 (diff)
sys/linux: extend netfilter descriptions
Diffstat (limited to 'prog/prog_test.go')
-rw-r--r--prog/prog_test.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/prog/prog_test.go b/prog/prog_test.go
index a1bd4b83c..5c7cc4664 100644
--- a/prog/prog_test.go
+++ b/prog/prog_test.go
@@ -175,3 +175,31 @@ func testCrossArchProg(t *testing.T, p *Prog, crossTargets []*Target) {
crossTarget.OS, crossTarget.Arch, err, serialized)
}
}
+
+func TestSpecialStructs(t *testing.T) {
+ testEachTargetRandom(t, func(t *testing.T, target *Target, rs rand.Source, iters int) {
+ for special, gen := range target.SpecialTypes {
+ t.Run(special, func(t *testing.T) {
+ var typ Type
+ for i := 0; i < len(target.Syscalls) && typ == nil; i++ {
+ ForeachType(target.Syscalls[i], func(t Type) {
+ if s, ok := t.(*StructType); ok && s.Name() == special {
+ typ = s
+ }
+ if s, ok := t.(*UnionType); ok && s.Name() == special {
+ typ = s
+ }
+ })
+ }
+ if typ == nil {
+ t.Fatal("can't find struct description")
+ }
+ g := &Gen{newRand(target, rs), newState(target, nil)}
+ for i := 0; i < iters/len(target.SpecialTypes); i++ {
+ arg, _ := gen(g, typ, nil)
+ gen(g, typ, arg)
+ }
+ })
+ }
+ })
+}