Skip to content

Commit

Permalink
tests: enable self-update tests (#445)
Browse files Browse the repository at this point in the history
Skip one test on Windows because exec is hard.

Co-authored-by: Felipe Zipitría <[email protected]>
  • Loading branch information
theseion and fzipi authored Jan 12, 2025
1 parent b390b29 commit 9ba608c
Showing 1 changed file with 52 additions and 37 deletions.
89 changes: 52 additions & 37 deletions cmd/self_update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@
package cmd

import (
"bytes"
"fmt"
"io/fs"
"os"
"os/exec"
"path"
"runtime"
"testing"

"github.com/coreruleset/go-ftw/internal/updater"
"github.com/rs/zerolog"
"github.com/stretchr/testify/suite"
)

Expand All @@ -18,6 +24,10 @@ type selfUpdateTestSuite struct {
executablePath string
}

func (s *selfUpdateTestSuite) SetupSuite() {
zerolog.SetGlobalLevel(zerolog.Disabled)
}

func (s *selfUpdateTestSuite) SetupTest() {
var err error
s.tempDir, err = os.MkdirTemp("", "self-update-tests")
Expand All @@ -38,40 +48,45 @@ func TestRunSelfUpdateTestSuite(t *testing.T) {
suite.Run(t, new(selfUpdateTestSuite))
}

// func (s *selfUpdateTestSuite) TestSelfUpdateDev() {
// _, err := updater.Updater("v0.0.0-dev", s.executablePath)
// s.Require().NoError(err)
//}
//
//func (s *selfUpdateTestSuite) TestSelfUpdateBigVersion() {
// newVersion, err := updater.Updater("v10000.1.1", s.executablePath)
// s.Require().NoError(err)
// s.Equal("v10000.1.1", newVersion)
//}
//
//func (s *selfUpdateTestSuite) TestSelfUpdateWithExecutablePath() {
// newVersion, err := updater.Updater("v1.3.7", s.executablePath)
// s.Require().NoError(err)
// s.NotEmpty(newVersion)
//
// s.FileExists(s.executablePath, "The executable should exist")
// contents, err := os.ReadFile(s.executablePath)
// s.Require().NoError(err)
// s.NotContains(string(contents), "Fake Binary", "The executable should be replaced")
//
// var out, stderr bytes.Buffer
//
// cmd := exec.Command(s.executablePath, "version")
// cmd.Stdout = &out
// cmd.Stderr = &stderr
//
// err = cmd.Run()
// if err == nil {
// versionString := fmt.Sprintf("ftw %s", newVersion)
// s.Contains(out.String(), versionString)
// } else {
// s.Equal("exit status 1", err.Error())
// oldBinaryWithUnsupportedVersionFlagError := "Error: unknown command \"version\" for \"go-ftw\"\nRun 'go-ftw --help' for usage.\n"
// s.Equal(oldBinaryWithUnsupportedVersionFlagError, stderr.String())
// }
//}
func (s *selfUpdateTestSuite) TestSelfUpdateDev() {
_, err := updater.Updater("v0.0.0-dev", s.executablePath)
s.Require().NoError(err)
}

func (s *selfUpdateTestSuite) TestSelfUpdateBigVersion() {
newVersion, err := updater.Updater("v10000.1.1", s.executablePath)
s.Require().NoError(err)
s.Equal("v10000.1.1", newVersion)
}

func (s *selfUpdateTestSuite) TestSelfUpdateWithExecutablePath() {
if runtime.GOOS == "windows" {
// Using exec on Windows isn't fun
s.T().SkipNow()
}

newVersion, err := updater.Updater("v1.1.2", s.executablePath)
s.Require().NoError(err)
s.NotEmpty(newVersion)

s.FileExists(s.executablePath, "The executable should exist")
contents, err := os.ReadFile(s.executablePath)
s.Require().NoError(err)
s.NotContains(string(contents), "Fake Binary", "The executable should be replaced")

var out, stderr bytes.Buffer

cmd := exec.Command(s.executablePath, "version")
cmd.Stdout = &out
cmd.Stderr = &stderr

err = cmd.Run()
if err == nil {
versionString := fmt.Sprintf("ftw %s", newVersion)
s.Contains(out.String(), versionString)
} else {
s.Equal("exit status 1", err.Error())
oldBinaryWithUnsupportedVersionFlagError := "Error: unknown command \"version\" for \"go-ftw\"\nRun 'go-ftw --help' for usage.\n"
s.Equal(oldBinaryWithUnsupportedVersionFlagError, stderr.String())
}
}

0 comments on commit 9ba608c

Please sign in to comment.