(f *testing.F)
| 51 | } |
| 52 | |
| 53 | func FuzzImageStore(f *testing.F) { |
| 54 | f.Fuzz(func(t *testing.T, data []byte) { |
| 55 | const ( |
| 56 | opCreate = "Create" |
| 57 | opList = "List" |
| 58 | opUpdate = "Update" |
| 59 | opDelete = "Delete" |
| 60 | ) |
| 61 | imageStoreOptions := []string{opCreate, opList, opUpdate, opDelete} |
| 62 | |
| 63 | ctx, db, cancel, err := testEnv(t) |
| 64 | if err != nil { |
| 65 | return |
| 66 | } |
| 67 | defer cancel() |
| 68 | store := metadata.NewImageStore(metadata.NewDB(db, nil, nil)) |
| 69 | f := fuzz.NewConsumer(data) |
| 70 | noOfOperations, err := f.GetInt() |
| 71 | if err != nil { |
| 72 | return |
| 73 | } |
| 74 | maxOperations := 50 |
| 75 | for i := 0; i < noOfOperations%maxOperations; i++ { |
| 76 | opType, err := f.GetInt() |
| 77 | if err != nil { |
| 78 | return |
| 79 | } |
| 80 | switch imageStoreOptions[opType%len(imageStoreOptions)] { |
| 81 | case opCreate: |
| 82 | i := images.Image{} |
| 83 | err := f.GenerateStruct(&i) |
| 84 | if err != nil { |
| 85 | return |
| 86 | } |
| 87 | _, _ = store.Create(ctx, i) |
| 88 | case opList: |
| 89 | newFs, err := f.GetString() |
| 90 | if err != nil { |
| 91 | return |
| 92 | } |
| 93 | _, _ = store.List(ctx, newFs) |
| 94 | case opUpdate: |
| 95 | i := images.Image{} |
| 96 | err := f.GenerateStruct(&i) |
| 97 | if err != nil { |
| 98 | return |
| 99 | } |
| 100 | _, _ = store.Update(ctx, i) |
| 101 | case opDelete: |
| 102 | name, err := f.GetString() |
| 103 | if err != nil { |
| 104 | return |
| 105 | } |
| 106 | _ = store.Delete(ctx, name) |
| 107 | } |
| 108 | } |
| 109 | }) |
| 110 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…