blob: 787122735e00685fb688bed27ebc88cc39ab1024 [file] [log] [blame]
package testutils_test
import (
"testing"
"github.com/greenplum-db/gpbackup/testutils"
"github.com/greenplum-db/gpbackup/toc"
"github.com/greenplum-db/gpbackup/utils"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gbytes"
)
func TestTestUtils(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "testutils tests")
}
var _ = Describe("testutils/functions", func() {
var buffer *Buffer
BeforeEach(func() {
buffer = NewBuffer()
})
Describe("SliceBufferByEntries()", func() {
It("returns a one item slice", func() {
bufferLen := utils.MustPrintf(buffer, "CREATE TABLE foo (i int);")
entries := []toc.MetadataEntry{{Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: 0, EndByte: bufferLen}}
results, remaining := testutils.SliceBufferByEntries(entries, buffer)
Expect(remaining).To(Equal(""))
Expect(results).To(HaveLen(1))
Expect(results[0]).To(Equal("CREATE TABLE foo (i int);"))
})
It("returns a multi-item slice with spaces and newlines", func() {
table1Len := utils.MustPrintf(buffer, "CREATE TABLE foo (i int);")
table2Len := utils.MustPrintf(buffer, "CREATE TABLE bar (j int);")
entries := []toc.MetadataEntry{{Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: 0, EndByte: table1Len}, {Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: table1Len, EndByte: table1Len + table2Len}}
results, remaining := testutils.SliceBufferByEntries(entries, buffer)
Expect(remaining).To(Equal(""))
Expect(results).To(HaveLen(2))
Expect(results[0]).To(Equal("CREATE TABLE foo (i int);"))
Expect(results[1]).To(Equal("CREATE TABLE bar (j int);"))
})
It("returns a single slice with start within buffer, end outside buffer", func() {
bufferLen := utils.MustPrintf(buffer, "CREATE TABLE foo (i int);")
entries := []toc.MetadataEntry{{Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: 0, EndByte: bufferLen + 10}}
results, remaining := testutils.SliceBufferByEntries(entries, buffer)
Expect(remaining).To(Equal(""))
Expect(results).To(HaveLen(1))
Expect(results[0]).To(Equal("CREATE TABLE foo (i int);"))
})
It("returns multiple slices with start outside buffer, end outside buffer", func() {
bufferLen := utils.MustPrintf(buffer, "CREATE TABLE foo (i int);")
entries := []toc.MetadataEntry{{Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: 0, EndByte: bufferLen + 10}, {Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: bufferLen + 10, EndByte: bufferLen + 40}}
results, remaining := testutils.SliceBufferByEntries(entries, buffer)
Expect(remaining).To(Equal(""))
Expect(results).To(HaveLen(2))
Expect(results[0]).To(Equal("CREATE TABLE foo (i int);"))
Expect(results[1]).To(Equal(""))
})
It("returns a single slice with extra buffer contents", func() {
bufferLen := utils.MustPrintf(buffer, "CREATE TABLE foo (i int);")
utils.MustPrintf(buffer, "More extra stuff")
entries := []toc.MetadataEntry{{Name: "name", Schema: "schema", ObjectType: "TABLE", StartByte: 0, EndByte: bufferLen}}
_, remaining := testutils.SliceBufferByEntries(entries, buffer)
Expect(remaining).To(Equal("More extra stuff"))
})
})
Describe("CompareSlicesIgnoringWhitespace()", func() {
It("returns true when slices and buffer are equal", func() {
actual := []string{"CREATE TABLE foo (i int);"}
expected := []string{"CREATE TABLE foo (i int);"}
Expect(testutils.CompareSlicesIgnoringWhitespace(actual, expected)).To(BeTrue())
})
It("returns true when slices and buffer are equal other than whitespace", func() {
actual := []string{"\n\t CREATE TABLE foo (i int);\n"}
expected := []string{"CREATE TABLE foo (i int);"}
Expect(testutils.CompareSlicesIgnoringWhitespace(actual, expected)).To(BeTrue())
})
It("returns false when slices are of different lengths", func() {
actual := make([]string, 0)
expected := []string{"CREATE TABLE foo (i int);"}
Expect(testutils.CompareSlicesIgnoringWhitespace(actual, expected)).To(BeFalse())
})
})
})