1616package packagemanager_test
1717
1818import (
19+ "bytes"
1920 "fmt"
2021 "io"
2122 "net/url"
2223 "os"
2324 "runtime"
2425 "strings"
25- "sync"
2626 "testing"
2727
2828 "github.com/arduino/arduino-cli/arduino/cores"
2929 "github.com/arduino/arduino-cli/arduino/cores/packagemanager"
3030 "github.com/arduino/arduino-cli/configuration"
3131 "github.com/arduino/go-paths-helper"
3232 "github.com/arduino/go-properties-orderedmap"
33+ "github.com/sirupsen/logrus"
34+ "github.com/sirupsen/logrus/hooks/writer"
3335 "github.com/stretchr/testify/require"
3436 semver "go.bug.st/relaxed-semver"
3537)
@@ -644,7 +646,13 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
644646 }
645647}
646648
649+ type plainFormatter struct {}
650+
651+ func (f * plainFormatter ) Format (e * logrus.Entry ) ([]byte , error ) {
652+ return []byte (e .Message ), nil
653+ }
647654func TestRunPostInstall (t * testing.T ) {
655+ logger := logrus .StandardLogger ()
648656 pmb := packagemanager .NewBuilder (nil , nil , nil , nil , "test" )
649657 pm := pmb .Build ()
650658 pme , release := pm .NewExplorer ()
@@ -653,34 +661,25 @@ func TestRunPostInstall(t *testing.T) {
653661 // prepare dummy post install script
654662 dir := paths .New (t .TempDir ())
655663
656- // check that the script output is redirected to the current process
657- // standard one
658- outputR , outputW , err := os .Pipe ()
659- require .NoError (t , err )
660- errorR , errorW , err := os .Pipe ()
661- require .NoError (t , err )
662-
663- prevStdout , prevStderr := os .Stdout , os .Stderr
664-
665- var stdout []byte
666- var stderr []byte
667- wg := sync.WaitGroup {}
668- wg .Add (2 )
669-
670- go func () {
671- defer wg .Done ()
672- var err error
673- stdout , err = io .ReadAll (outputR )
674- require .NoError (t , err )
675- }()
664+ // capture logs for inspection
665+ infoBuffer , errorBuffer := bytes .NewBuffer ([]byte {}), bytes .NewBuffer ([]byte {})
666+ logger .SetOutput (io .Discard )
667+ logger .SetFormatter (& plainFormatter {})
668+ logger .AddHook (& writer.Hook {
669+ Writer : infoBuffer ,
670+ LogLevels : []logrus.Level {
671+ logrus .InfoLevel ,
672+ },
673+ })
674+ logger .AddHook (& writer.Hook {
675+ Writer : errorBuffer ,
676+ LogLevels : []logrus.Level {
677+ logrus .ErrorLevel ,
678+ },
679+ })
676680
677- go func () {
678- defer wg .Done ()
679- var err error
680- stderr , err = io .ReadAll (errorR )
681- require .NoError (t , err )
682- }()
683681 var scriptPath * paths.Path
682+ var err error
684683 if runtime .GOOS == "windows" {
685684 scriptPath = dir .Join ("post_install.bat" )
686685
@@ -698,16 +697,9 @@ func TestRunPostInstall(t *testing.T) {
698697 require .NoError (t , err )
699698 err = os .Chmod (scriptPath .String (), 0777 )
700699 require .NoError (t , err )
701- os .Stdout = outputW
702- os .Stderr = errorW
703700 pme .RunPostInstallScript (dir )
701+ // `HasPrefix` because windows seem to add a trailing space at the end
704702
705- outputW .Close ()
706- errorW .Close ()
707- wg .Wait ()
708- os .Stdout = prevStdout
709- os .Stderr = prevStderr
710-
711- require .True (t , strings .HasPrefix (string (stdout ), "sent in stdout" ), "Unexpected stdout %s" , string (stdout ))
712- require .True (t , strings .HasPrefix (string (stderr ), "sent in stderr" ), "Unexpected stdout %s" , string (stderr ))
703+ require .Equal (t , "sent in stdout" , strings .Trim (infoBuffer .String (), "\n \r " ))
704+ require .Equal (t , "sent in stderr" , strings .Trim (errorBuffer .String (), "\n \r " ))
713705}
0 commit comments