github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/cpio/archive_test.go (about) 1 // Copyright 2013-2022 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package cpio 6 7 import ( 8 "fmt" 9 "syscall" 10 "testing" 11 ) 12 13 func FuzzWriteReadInMemArchive(f *testing.F) { 14 var fileCount uint64 = 4 15 var content = []byte("Content") 16 var name = "fileName" 17 var ino, mode, uid, gid, nlink, mtime, major, minor, rmajor, rminor uint64 = 1, S_IFREG | 2, 3, 4, 5, 6, 7, 8, 9, 10 18 f.Add(fileCount, content, name, ino, mode, uid, gid, nlink, mtime, major, minor, rmajor, rminor) 19 f.Fuzz(func(t *testing.T, fileCount uint64, content []byte, name string, ino uint64, mode uint64, uid uint64, gid uint64, nlink uint64, mtime uint64, major uint64, minor uint64, rmajor uint64, rminor uint64) { 20 if len(name) > 64 || len(content) > 200 || fileCount > 8 { 21 return 22 } 23 recs := []Record{} 24 var i uint64 25 for i = 0; i < fileCount; i++ { 26 27 recs = append(recs, StaticRecord(content, Info{ 28 Ino: ino | i, 29 Mode: syscall.S_IFREG | mode | i, 30 UID: uid | i, 31 GID: gid | i, 32 NLink: nlink | i, 33 MTime: mtime | i, 34 FileSize: uint64(len(content)), 35 Major: major | i, 36 Minor: minor | i, 37 Rmajor: rmajor | i, 38 Rminor: rminor | i, 39 Name: Normalize(name) + fmt.Sprintf("%d", i), 40 })) 41 } 42 43 arch := ArchiveFromRecords(recs) 44 archReader := arch.Reader() 45 46 for _, rec := range recs { 47 readRec, err := archReader.ReadRecord() 48 49 if err != nil { 50 t.Fatalf("failed to read record from archive") 51 } 52 53 if !Equal(rec, readRec) { 54 t.Fatalf("records not equal: %v %v", rec, readRec) 55 } 56 57 if !arch.Contains(rec) { 58 t.Fatalf("record not in archive %v %#v", rec, arch) 59 } 60 } 61 62 }) 63 }