github.com/cloudberrydb/gpbackup@v1.0.3-0.20240118031043-5410fd45eed6/utils/progress_bar_test.go (about) 1 package utils_test 2 3 import ( 4 "io" 5 "os" 6 "os/user" 7 "time" 8 9 "github.com/cloudberrydb/gp-common-go-libs/gplog" 10 "github.com/cloudberrydb/gp-common-go-libs/operating" 11 "github.com/cloudberrydb/gp-common-go-libs/testhelper" 12 "github.com/cloudberrydb/gpbackup/utils" 13 "gopkg.in/cheggaaa/pb.v1" 14 15 . "github.com/onsi/ginkgo/v2" 16 . "github.com/onsi/gomega" 17 ) 18 19 var _ = Describe("utils/log tests", func() { 20 var ( 21 fakeInfo os.FileInfo 22 ) 23 24 BeforeEach(func() { 25 err := operating.System.MkdirAll("/tmp/log_dir", 0755) 26 Expect(err).ToNot(HaveOccurred()) 27 fakeInfo, err = os.Stat("/tmp/log_dir") 28 Expect(err).ToNot(HaveOccurred()) 29 30 operating.System.OpenFileWrite = func(name string, flag int, perm os.FileMode) (io.WriteCloser, error) { return buffer, nil } 31 operating.System.CurrentUser = func() (*user.User, error) { return &user.User{Username: "testUser", HomeDir: "testDir"}, nil } 32 operating.System.Getpid = func() int { return 0 } 33 operating.System.Hostname = func() (string, error) { return "testHost", nil } 34 operating.System.IsNotExist = func(err error) bool { return false } 35 operating.System.Now = func() time.Time { return time.Date(2017, time.January, 1, 1, 1, 1, 1, time.Local) } 36 operating.System.Stat = func(name string) (os.FileInfo, error) { return fakeInfo, nil } 37 }) 38 AfterEach(func() { 39 operating.System = operating.InitializeSystemFunctions() 40 }) 41 42 Describe("NewProgressBar", func() { 43 Context("PB_NONE", func() { 44 It("will not print when passed a none value", func() { 45 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_NONE) 46 infoPb, ok := progressBar.(*pb.ProgressBar) 47 Expect(ok).To(BeTrue()) 48 Expect(infoPb.NotPrint).To(Equal(true)) 49 }) 50 }) 51 Context("PB_INFO", func() { 52 It("will create a pb.ProgressBar when passed an info value", func() { 53 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_INFO) 54 _, ok := progressBar.(*pb.ProgressBar) 55 Expect(ok).To(BeTrue()) 56 }) 57 It("will not print with verbosity LOGERROR", func() { 58 gplog.SetVerbosity(gplog.LOGERROR) 59 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_INFO) 60 infoPb, _ := progressBar.(*pb.ProgressBar) 61 Expect(infoPb.NotPrint).To(Equal(true)) 62 }) 63 It("will print with verbosity LOGINFO", func() { 64 gplog.SetVerbosity(gplog.LOGINFO) 65 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_INFO) 66 infoPb, _ := progressBar.(*pb.ProgressBar) 67 Expect(infoPb.NotPrint).To(Equal(false)) 68 }) 69 It("will not print with verbosity LOGVERBOSE", func() { 70 gplog.SetVerbosity(gplog.LOGVERBOSE) 71 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_INFO) 72 infoPb, _ := progressBar.(*pb.ProgressBar) 73 Expect(infoPb.NotPrint).To(Equal(true)) 74 }) 75 }) 76 Context("PB_VERBOSE", func() { 77 It("will create a verboseProgressBar when passed a verbose value", func() { 78 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_VERBOSE) 79 _, ok := progressBar.(*utils.VerboseProgressBar) 80 Expect(ok).To(BeTrue()) 81 }) 82 It("verboseProgressBar's infoPb will not print with verbosity LOGERROR", func() { 83 gplog.SetVerbosity(gplog.LOGERROR) 84 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_VERBOSE) 85 vPb, _ := progressBar.(*utils.VerboseProgressBar) 86 Expect(vPb.ProgressBar.NotPrint).To(Equal(true)) 87 }) 88 It("verboseProgressBar's infoPb will print with verbosity LOGINFO", func() { 89 gplog.SetVerbosity(gplog.LOGINFO) 90 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_VERBOSE) 91 vPb, _ := progressBar.(*utils.VerboseProgressBar) 92 Expect(vPb.ProgressBar.NotPrint).To(Equal(false)) 93 }) 94 It("verboseProgressBar's infoPb will not print with verbosity LOGVERBOSE", func() { 95 gplog.SetVerbosity(gplog.LOGVERBOSE) 96 progressBar := utils.NewProgressBar(10, "test progress bar", utils.PB_VERBOSE) 97 vPb, _ := progressBar.(*utils.VerboseProgressBar) 98 Expect(vPb.ProgressBar.NotPrint).To(Equal(true)) 99 }) 100 }) 101 }) 102 Describe("Increment", func() { 103 var vPb *utils.VerboseProgressBar 104 BeforeEach(func() { 105 progressBar := utils.NewProgressBar(10, "test progress bar:", utils.PB_VERBOSE) 106 vPb, _ = progressBar.(*utils.VerboseProgressBar) 107 }) 108 It("writes to the log file at 10% increments", func() { 109 progressBar := utils.NewProgressBar(10, "test progress bar:", utils.PB_VERBOSE) 110 vPb, _ = progressBar.(*utils.VerboseProgressBar) 111 vPb.Increment() 112 expectedMessage := "test progress bar: 10% (1/10)" 113 testhelper.ExpectRegexp(logfile, expectedMessage) 114 vPb.Increment() 115 expectedMessage = "test progress bar: 20% (2/10)" 116 testhelper.ExpectRegexp(logfile, expectedMessage) 117 }) 118 It("only logs when it hits a new % marker", func() { 119 progressBar := utils.NewProgressBar(20, "test progress bar:", utils.PB_VERBOSE) 120 vPb, _ = progressBar.(*utils.VerboseProgressBar) 121 122 expectedMessage := "test progress bar: 10% (2/20)" 123 vPb.Increment() 124 testhelper.NotExpectRegexp(logfile, expectedMessage) 125 vPb.Increment() 126 testhelper.ExpectRegexp(logfile, expectedMessage) 127 expectedMessage = "test progress bar: 20% (4/20)" 128 vPb.Increment() 129 testhelper.NotExpectRegexp(logfile, expectedMessage) 130 vPb.Increment() 131 testhelper.ExpectRegexp(logfile, expectedMessage) 132 }) 133 It("writes accurate percentages if < 10 items", func() { 134 progressBar := utils.NewProgressBar(5, "test progress bar:", utils.PB_VERBOSE) 135 vPb, _ = progressBar.(*utils.VerboseProgressBar) 136 vPb.Increment() 137 expectedMessage := "test progress bar: 20% (1/5)" 138 testhelper.ExpectRegexp(logfile, expectedMessage) 139 vPb.Increment() 140 expectedMessage = "test progress bar: 40% (2/5)" 141 testhelper.ExpectRegexp(logfile, expectedMessage) 142 }) 143 It("does not log if called again after hitting 100%", func() { 144 progressBar := utils.NewProgressBar(1, "test progress bar:", utils.PB_VERBOSE) 145 vPb, _ = progressBar.(*utils.VerboseProgressBar) 146 vPb.Increment() 147 expectedMessage := "test progress bar: 100% (1/1)" 148 testhelper.ExpectRegexp(logfile, expectedMessage) 149 vPb.Increment() 150 testhelper.NotExpectRegexp(logfile, expectedMessage) 151 }) 152 }) 153 })