From d1fdfab6c907444ce02b005f64f027fc93aa370f Mon Sep 17 00:00:00 2001 From: Amrit Singh Date: Fri, 4 Oct 2024 16:55:15 +0530 Subject: [PATCH 1/2] simplifying the testing code. will introduce tapper only when used at many places --- internal/password/password_test.go | 64 +++++------------------------- 1 file changed, 11 insertions(+), 53 deletions(-) diff --git a/internal/password/password_test.go b/internal/password/password_test.go index 9ac94f3..50bf175 100644 --- a/internal/password/password_test.go +++ b/internal/password/password_test.go @@ -97,8 +97,12 @@ func TestGenerate(t *testing.T) { func TestWrite(t *testing.T) { t.Run("Must write to stdout when asked to do so", func(t *testing.T) { - tapper := tapStdOut{} - tapper.Start() + // setup for tapping into os.Stdout + rf, wf, err := os.Pipe() + assert.NoError(t, err) + backUp := os.Stdout + os.Stdout = wf + var outbuff bytes.Buffer passwordLength := 40 count := 1 options := Options{ @@ -109,10 +113,13 @@ func TestWrite(t *testing.T) { passwords, err := Generate(&options) assert.NoError(t, err) Write(passwords, &options) - output, err := tapper.Flush() + err = wf.Close() + os.Stdout = backUp + assert.NoError(t, err) + _, err = io.Copy(&outbuff, rf) assert.NoError(t, err) msg := fmt.Sprintf("Expected password to be of length %d", passwordLength) - assert.Equal(t, passwordLength, len(output), msg) + assert.Equal(t, passwordLength, len(outbuff.String()), msg) }) t.Run("Must write to file when asked to do so", func(t *testing.T) { @@ -166,52 +173,3 @@ func TestWrite(t *testing.T) { }) } - -// tapStdOut provides mechanism to tap into the stdout -// useful for testing only -type tapStdOut struct { - outChan chan string - errChan chan error - - writeTo *os.File - stdOutbackup *os.File -} - -// Start starts the tapping process and backsup stdout -func (tapper *tapStdOut) Start() error { - tapper.stdOutbackup = os.Stdout - rf, wf, err := os.Pipe() - if err != nil { - return err - } - os.Stdout = wf - tapper.writeTo = wf - tapper.outChan = make(chan string) - tapper.errChan = make(chan error) - go tapper.read(rf) - return nil -} - -// read reads from readpipe into channel of tapper -// must be called in a go routine to prevent -// blocking writes to writepipe (such as stdout) -func (tapper *tapStdOut) read(readFrom *os.File) { - var output bytes.Buffer - _, err := io.Copy(&output, readFrom) - tapper.errChan <- err - tapper.outChan <- output.String() -} - -// Flush Stops the tapping process, sends the stored output and restores stdout -func (tapper *tapStdOut) Flush() (string, error) { - err := tapper.writeTo.Close() - if err != nil { - return "", err - } - err = <-tapper.errChan - if err != nil { - return "", err - } - os.Stdout = tapper.stdOutbackup - return <-tapper.outChan, nil -} From 8aabf3a73c5cef5632644c673c090c9d77acd9d0 Mon Sep 17 00:00:00 2001 From: Amrit Singh Date: Fri, 4 Oct 2024 17:00:47 +0530 Subject: [PATCH 2/2] testing main branch protection --- internal/password/password_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/password/password_test.go b/internal/password/password_test.go index 50bf175..5a6233e 100644 --- a/internal/password/password_test.go +++ b/internal/password/password_test.go @@ -168,7 +168,7 @@ func TestWrite(t *testing.T) { } passwd := string(buff) assert.NoError(t, err) - msg := fmt.Sprintf("Expected password to be of length %d", passwordLength) + msg := fmt.Sprintf("expected password to be of length %d", passwordLength) assert.Equal(t, passwordLength, len(passwd), msg) })