File: lazy_test.go

package info (click to toggle)
golang-github-u-root-uio 0.0~git20220204.dac05f7-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 216 kB
  • sloc: sh: 25; makefile: 2
file content (73 lines) | stat: -rw-r--r-- 1,555 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Copyright 2018 the u-root Authors. All rights reserved
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uio

import (
	"fmt"
	"io"
	"testing"
)

type mockReader struct {
	// called is whether Read has been called.
	called bool

	// err is the error to return on Read.
	err error
}

func (m *mockReader) Read([]byte) (int, error) {
	m.called = true
	return 0, m.err
}

func TestLazyOpenerRead(t *testing.T) {
	for i, tt := range []struct {
		openErr    error
		openReader *mockReader
		wantCalled bool
	}{
		{
			openErr:    nil,
			openReader: &mockReader{},
			wantCalled: true,
		},
		{
			openErr:    io.EOF,
			openReader: nil,
			wantCalled: false,
		},
		{
			openErr: nil,
			openReader: &mockReader{
				err: io.ErrUnexpectedEOF,
			},
			wantCalled: true,
		},
	} {
		t.Run(fmt.Sprintf("Test #%02d", i), func(t *testing.T) {
			var opened bool
			lr := NewLazyOpener(func() (io.Reader, error) {
				opened = true
				return tt.openReader, tt.openErr
			})
			_, err := lr.Read([]byte{})
			if !opened {
				t.Fatalf("Read(): Reader was not opened")
			}
			if tt.openErr != nil && err != tt.openErr {
				t.Errorf("Read() = %v, want %v", err, tt.openErr)
			}
			if tt.openReader != nil {
				if got, want := tt.openReader.called, tt.wantCalled; got != want {
					t.Errorf("mockReader.Read() called is %v, want %v", got, want)
				}
				if tt.openReader.err != nil && err != tt.openReader.err {
					t.Errorf("Read() = %v, want %v", err, tt.openReader.err)
				}
			}
		})
	}
}