I'm trying to create a mock for a os.File
or to be more specific io.Reader
. I want to emulate reading of 128 bits of concrete data without actual reading.
With a single uint32
there is no problems.
Mock:
func (f *FileMock) Read(buf []byte) (n int, err error) {
binary.BigEndian.PutUint32(buf, uint32(2052))
return len(buf), nil
}
Tested method (simplified):
b := make([]byte, 128)
meta_data := make([]uint32, 4)
_, err = s.Read(b)
if err != nil {
// Handle error
}
binary.Read(bytes.NewBuffer(b), binary.BigEndian, &meta_data)
log.Print(meta_data) // Output [2052 0 0 0]
But when I need to mock reading of a uint32
slice PutUint32
is not helpful because it writes to a slice from beginning (overrites previously wrtten data). I tried a bunch of combinations of bytes
and binary
tools but had no luck every time I can't get the data back from bytes. There is my last attempt (it is not the only):
func (f *FileMock) Read(b []byte) (n int, err error) {
buf := bytes.NewBuffer(make([]byte, len(b)))
err = binary.Write(buf, binary.BigEndian, [4]uint32{2051, 123, 28, 28})
buf.Read(b)
return len(b), nil
}
With the same tested method as described above I'm obtaining an empty slice [0, 0, 0, 0]
. Please note, this is a mock for os.File.Read
method so I can't create a new slice of bytes instead of it I need to write my data to an existing slice.
At first I'm wondering how to solve the issue. Also I want to know why there is just [0, 0, 0, 0]
?
Grateful for answers!