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 })