github.com/shaardie/u-root@v4.0.1-0.20190127173353-f24a1c26aa2e+incompatible/pkg/boot/linux_test.go (about) 1 // Copyright 2018 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 boot 6 7 import ( 8 "errors" 9 "strings" 10 "testing" 11 12 "github.com/u-root/u-root/pkg/cpio" 13 "github.com/u-root/u-root/pkg/uio" 14 ) 15 16 func imageEqual(li1, li2 *LinuxImage) bool { 17 return uio.ReaderAtEqual(li1.Kernel, li2.Kernel) && 18 uio.ReaderAtEqual(li1.Kernel, li2.Kernel) && 19 li1.Cmdline == li2.Cmdline 20 } 21 22 var errSkip = errors.New("foo") 23 24 type errorReaderAt struct { 25 err error 26 } 27 28 func (e *errorReaderAt) ReadAt([]byte, int64) (int, error) { 29 return 0, e.err 30 } 31 32 func TestLinuxImage(t *testing.T) { 33 for _, tt := range []struct { 34 li *LinuxImage 35 err error 36 }{ 37 { 38 li: &LinuxImage{ 39 Kernel: strings.NewReader("foo"), 40 Initrd: strings.NewReader("bar"), 41 Cmdline: "foo=bar", 42 }, 43 err: nil, 44 }, 45 { 46 li: &LinuxImage{ 47 Kernel: strings.NewReader("foo"), 48 Initrd: nil, 49 Cmdline: "foo=bar", 50 }, 51 err: nil, 52 }, 53 { 54 li: &LinuxImage{ 55 Kernel: nil, 56 Initrd: nil, 57 Cmdline: "foo=bar", 58 }, 59 err: ErrKernelMissing, 60 }, 61 { 62 li: &LinuxImage{ 63 Kernel: &errorReaderAt{err: errSkip}, 64 Initrd: nil, 65 Cmdline: "foo=bar", 66 }, 67 err: errSkip, 68 }, 69 { 70 li: &LinuxImage{ 71 Kernel: strings.NewReader("foo"), 72 Initrd: &errorReaderAt{err: errSkip}, 73 Cmdline: "foo=bar", 74 }, 75 err: errSkip, 76 }, 77 { 78 li: &LinuxImage{ 79 Kernel: strings.NewReader("foo"), 80 Initrd: nil, 81 Cmdline: "", 82 }, 83 err: nil, 84 }, 85 } { 86 a := cpio.InMemArchive() 87 sw := NewSigningWriter(a) 88 if err := tt.li.Pack(sw); err != tt.err { 89 t.Errorf("Pack(%v) = %v, want %v", tt.li, err, tt.err) 90 } else if err == nil { 91 li, err := NewLinuxImageFromArchive(a) 92 if err != nil { 93 t.Errorf("Linux image from %v: %v", a, err) 94 } 95 if !imageEqual(tt.li, li) { 96 t.Errorf("Images are not equal: got %v\nwant %v", li, tt.li) 97 } 98 } 99 } 100 }