blob: 09196b4c10071e057db00838a00d1c072374d495 [file]
package iotdb_go
import (
"errors"
"io"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type stubSessionDataSet struct {
closeErr error
closeCount int
}
func (s *stubSessionDataSet) Next() (bool, error) { return false, io.EOF }
func (s *stubSessionDataSet) Close() error {
s.closeCount++
return s.closeErr
}
func TestRowsClose_ReturnsDatasetErrorAndReleases(t *testing.T) {
closeErr := errors.New("close failed")
closeCount := 0
releaseCount := 0
rows := &rows{
closeFn: func() error {
closeCount++
return closeErr
},
release: func() { releaseCount++ },
}
err := rows.Close()
require.Error(t, err)
assert.EqualError(t, err, "close failed")
assert.Equal(t, 1, closeCount)
assert.Equal(t, 1, releaseCount)
assert.Nil(t, rows.release)
}
func TestRowsClose_SuccessReleasesOnce(t *testing.T) {
dataset := &stubSessionDataSet{}
releaseCount := 0
rows := &rows{
closeFn: dataset.Close,
release: func() { releaseCount++ },
}
err := rows.Close()
require.NoError(t, err)
assert.Equal(t, 1, dataset.closeCount)
assert.Equal(t, 1, releaseCount)
assert.Nil(t, rows.release)
assert.Nil(t, rows.set)
assert.Nil(t, rows.closeFn)
}
func TestRowsClose_IsIdempotent(t *testing.T) {
closeCount := 0
releaseCount := 0
rows := &rows{
closeFn: func() error {
closeCount++
return nil
},
release: func() { releaseCount++ },
}
err := rows.Close()
require.NoError(t, err)
err = rows.Close()
require.NoError(t, err)
assert.Equal(t, 1, closeCount)
assert.Equal(t, 1, releaseCount)
}
func TestRowsNextNilSet(t *testing.T) {
rows := &rows{}
ok, err := rows.Next()
assert.False(t, ok)
assert.EqualError(t, err, "rows is nil")
}