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  }