github.com/weaviate/weaviate@v1.24.6/entities/diskio/metered_reader_test.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package diskio 13 14 import ( 15 "bytes" 16 "io" 17 "testing" 18 19 "github.com/stretchr/testify/assert" 20 "github.com/stretchr/testify/require" 21 ) 22 23 func TestMeteredReader(t *testing.T) { 24 data := make([]byte, 128) 25 26 t.Run("happy path - with callback", func(t *testing.T) { 27 var ( 28 read int64 29 took int64 30 ) 31 32 cb := func(r int64, n int64) { 33 read = r 34 took = n 35 } 36 37 mr := NewMeteredReader(bytes.NewReader(data), cb) 38 39 target := make([]byte, 128) 40 n, err := mr.Read(target) 41 42 require.Nil(t, err) 43 assert.Equal(t, int64(n), read) 44 assert.Greater(t, took, int64(0)) 45 }) 46 47 t.Run("happy path - without callback", func(t *testing.T) { 48 mr := NewMeteredReader(bytes.NewReader(data), nil) 49 50 target := make([]byte, 128) 51 _, err := mr.Read(target) 52 require.Nil(t, err) 53 }) 54 55 t.Run("with an error", func(t *testing.T) { 56 var ( 57 read int64 58 took int64 59 ) 60 61 cb := func(r int64, n int64) { 62 read = r 63 took = n 64 } 65 66 underlying := bytes.NewReader(data) 67 // provoke EOF error by seeking to end of data 68 underlying.Seek(128, 0) 69 mr := NewMeteredReader(underlying, cb) 70 71 target := make([]byte, 128) 72 _, err := mr.Read(target) 73 74 assert.Equal(t, io.EOF, err) 75 76 // callback should not have been called in error cases, so we expect to 77 // read initial values 78 assert.Equal(t, int64(0), read) 79 assert.Equal(t, int64(0), took) 80 }) 81 }