storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/s3select/json/preader_test.go (about)

     1  /*
     2   * MinIO Cloud Storage, (C) 2019 MinIO, Inc.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package json
    18  
    19  import (
    20  	"bytes"
    21  	"io"
    22  	"io/ioutil"
    23  	"os"
    24  	"path/filepath"
    25  	"testing"
    26  
    27  	"storj.io/minio/pkg/s3select/sql"
    28  )
    29  
    30  func TestNewPReader(t *testing.T) {
    31  	files, err := ioutil.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 := ioutil.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 := ioutil.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(ioutil.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  }