diff --git a/ci/scripts/go_test.sh b/ci/scripts/go_test.sh index bad2ffe619026..45ea513b1ec02 100755 --- a/ci/scripts/go_test.sh +++ b/ci/scripts/go_test.sh @@ -78,6 +78,7 @@ go test $testargs -tags $TAGS,noasm ./... popd export PARQUET_TEST_DATA=${1}/cpp/submodules/parquet-testing/data +export PARQUET_TEST_BAD_DATA=${1}/cpp/submodules/parquet-testing/bad_data export ARROW_TEST_DATA=${1}/testing/data pushd ${source_dir}/parquet diff --git a/go/parquet/pqarrow/file_reader_test.go b/go/parquet/pqarrow/file_reader_test.go index fe5a4547a775c..15ea4f83c0eb5 100644 --- a/go/parquet/pqarrow/file_reader_test.go +++ b/go/parquet/pqarrow/file_reader_test.go @@ -22,6 +22,7 @@ import ( "fmt" "io" "os" + "path" "path/filepath" "strings" "testing" @@ -373,3 +374,43 @@ func TestFileReaderColumnChunkBoundsErrors(t *testing.T) { assert.ErrorContains(t, tooHighErr, fmt.Sprintf("there are only %d columns", schema.NumFields())) } } + +func TestReadParquetFile(t *testing.T) { + dir := os.Getenv("PARQUET_TEST_BAD_DATA") + if dir == "" { + t.Skip("no path supplied with PARQUET_TEST_BAD_DATA") + } + assert.DirExists(t, dir) + filename := path.Join(dir, "GH_43605.parquet") + ctx := context.TODO() + + mem := memory.NewCheckedAllocator(memory.DefaultAllocator) + + rdr, err := file.OpenParquetFile( + filename, + false, + file.WithReadProps(parquet.NewReaderProperties(mem)), + ) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + defer func() { + if err2 := rdr.Close(); err2 != nil { + t.Errorf("unexpected error: %v", err2) + } + }() + + arrowRdr, err := pqarrow.NewFileReader(rdr, pqarrow.ArrowReadProperties{ + Parallel: false, + BatchSize: 0, + }, mem) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + _, err = arrowRdr.ReadTable(ctx) + + if err == nil { + t.Errorf("expected error: %v", err) + } +}