Skip to content

Commit 986ee94

Browse files
committed
fix: use managed output stream
1 parent 634a826 commit 986ee94

File tree

4 files changed

+29
-41
lines changed

4 files changed

+29
-41
lines changed

Diff for: arduino/cores/packagemanager/install_uninstall.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package packagemanager
1818
import (
1919
"encoding/json"
2020
"fmt"
21-
"os"
2221
"runtime"
2322

2423
"github.com/arduino/arduino-cli/arduino"
@@ -28,6 +27,7 @@ import (
2827
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2928
"github.com/arduino/go-paths-helper"
3029
"github.com/pkg/errors"
30+
"github.com/sirupsen/logrus"
3131
)
3232

3333
// DownloadAndInstallPlatformUpgrades runs a full installation process to upgrade the given platform.
@@ -238,8 +238,8 @@ func (pme *Explorer) RunPostInstallScript(installDir *paths.Path) error {
238238
if err != nil {
239239
return err
240240
}
241-
cmd.RedirectStdoutTo(os.Stdout)
242-
cmd.RedirectStderrTo(os.Stderr)
241+
cmd.RedirectStdoutTo(pme.log.WriterLevel(logrus.InfoLevel))
242+
cmd.RedirectStderrTo(pme.log.WriterLevel(logrus.ErrorLevel))
243243

244244
cmd.SetDirFromPath(installDir)
245245
if err := cmd.Run(); err != nil {

Diff for: arduino/cores/packagemanager/package_manager_test.go

+22-37
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@
1616
package packagemanager_test
1717

1818
import (
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
)
@@ -645,6 +647,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
645647
}
646648

647649
func TestRunPostInstall(t *testing.T) {
650+
logger := logrus.StandardLogger()
648651
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
649652
pm := pmb.Build()
650653
pme, release := pm.NewExplorer()
@@ -653,34 +656,24 @@ func TestRunPostInstall(t *testing.T) {
653656
// prepare dummy post install script
654657
dir := paths.New(t.TempDir())
655658

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+
})
676674

677-
go func() {
678-
defer wg.Done()
679-
var err error
680-
stderr, err = io.ReadAll(errorR)
681-
require.NoError(t, err)
682-
}()
683675
var scriptPath *paths.Path
676+
var err error
684677
if runtime.GOOS == "windows" {
685678
scriptPath = dir.Join("post_install.bat")
686679

@@ -698,16 +691,8 @@ func TestRunPostInstall(t *testing.T) {
698691
require.NoError(t, err)
699692
err = os.Chmod(scriptPath.String(), 0777)
700693
require.NoError(t, err)
701-
os.Stdout = outputW
702-
os.Stderr = errorW
703694
pme.RunPostInstallScript(dir)
704695

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())
713698
}

Diff for: go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ require (
2828
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
2929
github.com/schollz/closestmatch v2.1.0+incompatible
3030
github.com/sergi/go-diff v1.1.0 // indirect
31-
github.com/sirupsen/logrus v1.4.2
31+
github.com/sirupsen/logrus v1.9.0
3232
github.com/spf13/cobra v1.2.1
3333
github.com/spf13/jwalterweatherman v1.1.0
3434
github.com/spf13/viper v1.8.1

Diff for: go.sum

+3
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5I
305305
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
306306
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
307307
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
308+
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
309+
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
308310
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
309311
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
310312
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
@@ -530,6 +532,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
530532
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
531533
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
532534
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
535+
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
533536
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
534537
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
535538
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=

0 commit comments

Comments
 (0)