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

     1  package utils_test
     2  
     3  import (
     4  	"os/user"
     5  
     6  	"github.com/cloudberrydb/gp-common-go-libs/cluster"
     7  	"github.com/cloudberrydb/gp-common-go-libs/operating"
     8  	"github.com/cloudberrydb/gp-common-go-libs/structmatcher"
     9  	"github.com/cloudberrydb/gp-common-go-libs/testhelper"
    10  	"github.com/cloudberrydb/gpbackup/utils"
    11  
    12  	. "github.com/onsi/ginkgo/v2"
    13  )
    14  
    15  var _ = Describe("utils/compression tests", func() {
    16  	coordinatorSeg := cluster.SegConfig{ContentID: -1, Hostname: "localhost", DataDir: "/data/gpseg-1"}
    17  	localSegOne := cluster.SegConfig{ContentID: 0, Hostname: "localhost", DataDir: "/data/gpseg0"}
    18  	remoteSegOne := cluster.SegConfig{ContentID: 1, Hostname: "remotehost1", DataDir: "/data/gpseg1"}
    19  	var (
    20  		testCluster  *cluster.Cluster
    21  		testExecutor *testhelper.TestExecutor
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		operating.System.CurrentUser = func() (*user.User, error) { return &user.User{Username: "testUser", HomeDir: "testDir"}, nil }
    26  		operating.System.Hostname = func() (string, error) { return "testHost", nil }
    27  		testExecutor = &testhelper.TestExecutor{}
    28  		testCluster = cluster.NewCluster([]cluster.SegConfig{coordinatorSeg, localSegOne, remoteSegOne})
    29  		testCluster.Executor = testExecutor
    30  	})
    31  
    32  	Describe("InitializePipeThroughParameters", func() {
    33  		It("initializes to use cat when passed no compression", func() {
    34  			originalProgram := utils.GetPipeThroughProgram()
    35  			defer utils.SetPipeThroughProgram(originalProgram)
    36  			expectedProgram := utils.PipeThroughProgram{
    37  				Name:          "cat",
    38  				OutputCommand: "cat -",
    39  				InputCommand:  "cat -",
    40  				Extension:     "",
    41  			}
    42  			utils.InitializePipeThroughParameters(false, "", 3)
    43  			resultProgram := utils.GetPipeThroughProgram()
    44  			structmatcher.ExpectStructsToMatch(&expectedProgram, &resultProgram)
    45  		})
    46  		It("initializes to use gzip when passed compression type gzip and a level", func() {
    47  			originalProgram := utils.GetPipeThroughProgram()
    48  			defer utils.SetPipeThroughProgram(originalProgram)
    49  			expectedProgram := utils.PipeThroughProgram{
    50  				Name:          "gzip",
    51  				OutputCommand: "gzip -c -7",
    52  				InputCommand:  "gzip -d -c",
    53  				Extension:     ".gz",
    54  			}
    55  			utils.InitializePipeThroughParameters(true, "gzip", 7)
    56  			resultProgram := utils.GetPipeThroughProgram()
    57  			structmatcher.ExpectStructsToMatch(&expectedProgram, &resultProgram)
    58  		})
    59  		It("initializes to use zstd when passed compression type zstd and a level", func() {
    60  			originalProgram := utils.GetPipeThroughProgram()
    61  			defer utils.SetPipeThroughProgram(originalProgram)
    62  			expectedProgram := utils.PipeThroughProgram{
    63  				Name:          "zstd",
    64  				OutputCommand: "zstd --compress -7 -c",
    65  				InputCommand:  "zstd --decompress -c",
    66  				Extension:     ".zst",
    67  			}
    68  			utils.InitializePipeThroughParameters(true, "zstd", 7)
    69  			resultProgram := utils.GetPipeThroughProgram()
    70  			structmatcher.ExpectStructsToMatch(&expectedProgram, &resultProgram)
    71  		})
    72  	})
    73  })