github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/internal/s3select/json/reader_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 TestNewReader(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 := NewReader(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 := NewReader(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 BenchmarkReader(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 := NewReader(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  }