github.com/jlowellwofford/u-root@v1.0.0/pkg/uio/lazy_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 uio 6 7 import ( 8 "fmt" 9 "io" 10 "testing" 11 ) 12 13 type mockReader struct { 14 // called is whether Read has been called. 15 called bool 16 17 // err is the error to return on Read. 18 err error 19 } 20 21 func (m *mockReader) Read([]byte) (int, error) { 22 m.called = true 23 return 0, m.err 24 } 25 26 func TestLazyOpenerRead(t *testing.T) { 27 for i, tt := range []struct { 28 openErr error 29 openReader *mockReader 30 wantCalled bool 31 }{ 32 { 33 openErr: nil, 34 openReader: &mockReader{}, 35 wantCalled: true, 36 }, 37 { 38 openErr: io.EOF, 39 openReader: nil, 40 wantCalled: false, 41 }, 42 { 43 openErr: nil, 44 openReader: &mockReader{ 45 err: io.ErrUnexpectedEOF, 46 }, 47 wantCalled: true, 48 }, 49 } { 50 t.Run(fmt.Sprintf("Test #%02d", i), func(t *testing.T) { 51 var opened bool 52 lr := NewLazyOpener(func() (io.Reader, error) { 53 opened = true 54 return tt.openReader, tt.openErr 55 }) 56 _, err := lr.Read([]byte{}) 57 if !opened { 58 t.Fatalf("Read(): Reader was not opened") 59 } 60 if tt.openErr != nil && err != tt.openErr { 61 t.Errorf("Read() = %v, want %v", err, tt.openErr) 62 } 63 if tt.openReader != nil { 64 if got, want := tt.openReader.called, tt.wantCalled; got != want { 65 t.Errorf("mockReader.Read() called is %v, want %v", got, want) 66 } 67 if tt.openReader.err != nil && err != tt.openReader.err { 68 t.Errorf("Read() = %v, want %v", err, tt.openReader.err) 69 } 70 } 71 }) 72 } 73 }