16
16
package packagemanager_test
17
17
18
18
import (
19
+ "bytes"
19
20
"fmt"
20
21
"io"
21
22
"net/url"
22
23
"os"
23
24
"runtime"
24
25
"strings"
25
- "sync"
26
26
"testing"
27
27
28
28
"github.com/arduino/arduino-cli/arduino/cores"
29
29
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
30
30
"github.com/arduino/arduino-cli/configuration"
31
31
"github.com/arduino/go-paths-helper"
32
32
"github.com/arduino/go-properties-orderedmap"
33
+ "github.com/sirupsen/logrus"
34
+ "github.com/sirupsen/logrus/hooks/writer"
33
35
"github.com/stretchr/testify/require"
34
36
semver "go.bug.st/relaxed-semver"
35
37
)
@@ -645,6 +647,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
645
647
}
646
648
647
649
func TestRunPostInstall (t * testing.T ) {
650
+ logger := logrus .StandardLogger ()
648
651
pmb := packagemanager .NewBuilder (nil , nil , nil , nil , "test" )
649
652
pm := pmb .Build ()
650
653
pme , release := pm .NewExplorer ()
@@ -653,34 +656,24 @@ func TestRunPostInstall(t *testing.T) {
653
656
// prepare dummy post install script
654
657
dir := paths .New (t .TempDir ())
655
658
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
- }()
659
+ // capture logs for inspection
660
+ infoBuffer , errorBuffer := bytes .NewBuffer ([]byte {}), bytes .NewBuffer ([]byte {})
661
+ logger .SetOutput (io .Discard )
662
+ logger .AddHook (& writer.Hook {
663
+ Writer : infoBuffer ,
664
+ LogLevels : []logrus.Level {
665
+ logrus .InfoLevel ,
666
+ },
667
+ })
668
+ logger .AddHook (& writer.Hook {
669
+ Writer : infoBuffer ,
670
+ LogLevels : []logrus.Level {
671
+ logrus .ErrorLevel ,
672
+ },
673
+ })
676
674
677
- go func () {
678
- defer wg .Done ()
679
- var err error
680
- stderr , err = io .ReadAll (errorR )
681
- require .NoError (t , err )
682
- }()
683
675
var scriptPath * paths.Path
676
+ var err error
684
677
if runtime .GOOS == "windows" {
685
678
scriptPath = dir .Join ("post_install.bat" )
686
679
@@ -698,16 +691,8 @@ func TestRunPostInstall(t *testing.T) {
698
691
require .NoError (t , err )
699
692
err = os .Chmod (scriptPath .String (), 0777 )
700
693
require .NoError (t , err )
701
- os .Stdout = outputW
702
- os .Stderr = errorW
703
694
pme .RunPostInstallScript (dir )
704
695
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 ))
696
+ require .True (t , strings .HasPrefix (infoBuffer .String (), "sent in stdout" ), "Unexpected stdout %s" , infoBuffer .String ())
697
+ require .True (t , strings .HasPrefix (errorBuffer .String (), "sent in stderr" ), "Unexpected stdout %s" , errorBuffer .String ())
713
698
}
0 commit comments