github.com/cloudberrydb/gpbackup@v1.0.3-0.20240118031043-5410fd45eed6/restore/parallel_test.go (about)

     1  package restore_test
     2  
     3  import (
     4  	"github.com/cloudberrydb/gpbackup/restore"
     5  	"github.com/cloudberrydb/gpbackup/toc"
     6  
     7  	. "github.com/onsi/ginkgo/v2"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("restore/parallel tests", func() {
    12  	Describe("BatchPostdataStatements", func() {
    13  		index1 := toc.StatementWithType{ObjectType: "INDEX", ReferenceObject: "public.table1", Statement: `CREATE INDEX testindex1 ON public.table1 USING btree(i);`}
    14  		index2 := toc.StatementWithType{ObjectType: "INDEX", ReferenceObject: "public.table2", Statement: `CREATE INDEX testindex2 ON public.table2 USING btree(i);`}
    15  		index3 := toc.StatementWithType{ObjectType: "INDEX", ReferenceObject: "public.table3", Statement: `CREATE INDEX testindex3 ON public.table3 USING btree(i);`}
    16  		index2_comment := toc.StatementWithType{ObjectType: "INDEX METADATA", ReferenceObject: "public.testindex2", Statement: `COMMENT ON INDEX public.testindex2 IS 'hello';`}
    17  		index2_tablespace := toc.StatementWithType{ObjectType: "INDEX METADATA", ReferenceObject: "public.testindex2", Statement: `ALTER INDEX public.testindex2 SET TABLESPACE footblspc;`}
    18  		trigger := toc.StatementWithType{ObjectType: "TRIGGER", ReferenceObject: "public.table3", Statement: `CREATE TRIGGER footrigger AFTER INSERT ON table1 FOR EACH STATEMENT EXECUTE PROCEDURE fooproc();`}
    19  		trigger_comment := toc.StatementWithType{ObjectType: "TRIGGER METADATA", ReferenceObject: "footrigger", Statement: `COMMENT ON TRIGGER footrigger ON table1 IS 'hello'`}
    20  		It("places all indexes in first batch when all are on different tables", func() {
    21  			statements := []toc.StatementWithType{index1, index2, index3}
    22  			firstBatch, secondBatch, _ := restore.BatchPostdataStatements(statements)
    23  			Expect(firstBatch).To(Equal([]toc.StatementWithType{index1, index2, index3}))
    24  			Expect(secondBatch).To(Equal([]toc.StatementWithType{}))
    25  		})
    26  		It("places first index for a table in first batch, and other indexes for that table in second", func() {
    27  			statements := []toc.StatementWithType{index1, index2, index2, index2, index3, index3}
    28  			firstBatch, secondBatch, _ := restore.BatchPostdataStatements(statements)
    29  			Expect(firstBatch).To(Equal([]toc.StatementWithType{index1, index2, index3}))
    30  			Expect(secondBatch).To(Equal([]toc.StatementWithType{index2, index2, index3}))
    31  		})
    32  		It("places non-index objects in second batch", func() {
    33  			statements := []toc.StatementWithType{index1, index1, trigger}
    34  			firstBatch, secondBatch, _ := restore.BatchPostdataStatements(statements)
    35  			Expect(firstBatch).To(Equal([]toc.StatementWithType{index1}))
    36  			Expect(secondBatch).To(Equal([]toc.StatementWithType{index1, trigger}))
    37  		})
    38  		It("places postdata metadata in third batch", func() {
    39  			statements := []toc.StatementWithType{index1, index2, index3, index2_comment, index2_tablespace, trigger, trigger_comment}
    40  			firstBatch, secondBatch, thirdBatch := restore.BatchPostdataStatements(statements)
    41  			Expect(firstBatch).To(Equal([]toc.StatementWithType{index1, index2, index3}))
    42  			Expect(secondBatch).To(Equal([]toc.StatementWithType{trigger}))
    43  			Expect(thirdBatch).To(Equal([]toc.StatementWithType{index2_comment, index2_tablespace, trigger_comment}))
    44  		})
    45  	})
    46  })