github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/internal/s3select/json/preader_test.go (about) 1 // Copyright (c) 2015-2021 MinIO, Inc. 2 // 3 // This file is part of MinIO Object Storage stack 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package json 19 20 import ( 21 "bytes" 22 "io" 23 "os" 24 "path/filepath" 25 "testing" 26 27 "github.com/minio/minio/internal/s3select/sql" 28 ) 29 30 func TestNewPReader(t *testing.T) { 31 files, err := os.ReadDir("testdata") 32 if err != nil { 33 t.Fatal(err) 34 } 35 for _, file := range files { 36 t.Run(file.Name(), func(t *testing.T) { 37 f, err := os.Open(filepath.Join("testdata", file.Name())) 38 if err != nil { 39 t.Fatal(err) 40 } 41 r := NewPReader(f, &ReaderArgs{}) 42 var record sql.Record 43 for { 44 record, err = r.Read(record) 45 if err != nil { 46 break 47 } 48 } 49 r.Close() 50 if err != io.EOF { 51 t.Fatalf("Reading failed with %s, %s", err, file.Name()) 52 } 53 }) 54 55 t.Run(file.Name()+"-close", func(t *testing.T) { 56 f, err := os.Open(filepath.Join("testdata", file.Name())) 57 if err != nil { 58 t.Fatal(err) 59 } 60 r := NewPReader(f, &ReaderArgs{}) 61 r.Close() 62 var record sql.Record 63 for { 64 record, err = r.Read(record) 65 if err != nil { 66 break 67 } 68 } 69 if err != io.EOF { 70 t.Fatalf("Reading failed with %s, %s", err, file.Name()) 71 } 72 }) 73 } 74 } 75 76 func BenchmarkPReader(b *testing.B) { 77 files, err := os.ReadDir("testdata") 78 if err != nil { 79 b.Fatal(err) 80 } 81 for _, file := range files { 82 b.Run(file.Name(), func(b *testing.B) { 83 f, err := os.ReadFile(filepath.Join("testdata", file.Name())) 84 if err != nil { 85 b.Fatal(err) 86 } 87 b.SetBytes(int64(len(f))) 88 b.ReportAllocs() 89 b.ResetTimer() 90 var record sql.Record 91 for i := 0; i < b.N; i++ { 92 r := NewPReader(io.NopCloser(bytes.NewBuffer(f)), &ReaderArgs{}) 93 for { 94 record, err = r.Read(record) 95 if err != nil { 96 break 97 } 98 } 99 r.Close() 100 if err != io.EOF { 101 b.Fatalf("Reading failed with %s, %s", err, file.Name()) 102 } 103 } 104 }) 105 } 106 }