Skip to content

Commit

Permalink
address codereview feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
tgummerer committed May 9, 2024
1 parent 3bb3246 commit e685cea
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 86 deletions.
42 changes: 2 additions & 40 deletions pkg/backend/display/diff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,59 +18,21 @@ package display

import (
"bytes"
"encoding/json"
"fmt"
"io"
"os"
"path/filepath"
"testing"

"github.com/pulumi/pulumi/pkg/v3/engine"
"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
"github.com/pulumi/pulumi/sdk/v3/go/common/diag/colors"
ptesting "github.com/pulumi/pulumi/sdk/v3/go/common/testing"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func loadEvents(path string) (events []engine.Event, err error) {
f, err := os.Open(path)
if err != nil {
return nil, fmt.Errorf("opening '%v': %w", path, err)
}
defer contract.IgnoreClose(f)

dec := json.NewDecoder(f)
for {
var jsonEvent apitype.EngineEvent
if err = dec.Decode(&jsonEvent); err != nil {
if err == io.EOF {
break
}

return nil, fmt.Errorf("decoding event %d: %w", len(events), err)
}

event, err := ConvertJSONEvent(jsonEvent)
if err != nil {
return nil, fmt.Errorf("converting event %d: %w", len(events), err)
}
events = append(events, event)
}

// If there are no events or if the event stream does not terminate with a cancel event,
// synthesize one here.
if len(events) == 0 || events[len(events)-1].Type != engine.CancelEvent {
events = append(events, engine.NewCancelEvent())
}

return events, nil
}

func testDiffEvents(t *testing.T, path string, accept bool, truncateOutput bool) {
events, err := loadEvents(path)
events, err := ptesting.LoadEngineEvents(path)
require.NoError(t, err)

var expectedStdout []byte
Expand Down
1 change: 0 additions & 1 deletion pkg/engine/lifecycletest/pulumi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4548,7 +4548,6 @@ func TestResourceNames(t *testing.T) {
})
hostF := deploytest.NewPluginHostF(nil, nil, programF, loaders...)
p := &TestPlan{
// Displaytests for this are racy
Options: TestUpdateOptions{T: t, HostF: hostF},
}

Expand Down
55 changes: 10 additions & 45 deletions pkg/engine/lifecycletest/test_plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"encoding/json"
"errors"
"fmt"
"io"
"os"
"path/filepath"
"reflect"
Expand Down Expand Up @@ -35,6 +34,7 @@ import (
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/config"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
"github.com/pulumi/pulumi/sdk/v3/go/common/slice"
ptesting "github.com/pulumi/pulumi/sdk/v3/go/common/testing"
"github.com/pulumi/pulumi/sdk/v3/go/common/tokens"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/cmdutil"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
Expand Down Expand Up @@ -293,51 +293,16 @@ func compareEvents(expected, actual []engine.Event) error {
return nil
}

// TODO: dedup with diff_test.go
func loadEvents(path string) (events []engine.Event, err error) {
f, err := os.Open(path)
if err != nil {
return nil, fmt.Errorf("opening '%v': %w", path, err)
}
defer contract.IgnoreClose(f)

dec := json.NewDecoder(f)
for {
var jsonEvent apitype.EngineEvent
if err = dec.Decode(&jsonEvent); err != nil {
if err == io.EOF {
break
}

return nil, fmt.Errorf("decoding event %d: %w", len(events), err)
}

event, err := bdisplay.ConvertJSONEvent(jsonEvent)
if err != nil {
return nil, fmt.Errorf("converting event %d: %w", len(events), err)
}
events = append(events, event)
}

// If there are no events or if the event stream does not terminate with a cancel event,
// synthesize one here.
if len(events) == 0 || events[len(events)-1].Type != engine.CancelEvent {
events = append(events, engine.NewCancelEvent())
}

return events, nil
}

func assertDisplay(t testing.TB, events []Event, path string) {
var expectedStdout []byte
var expectedStderr []byte
accept := cmdutil.IsTruthy(os.Getenv("PULUMI_ACCEPT"))
if !accept {
var err error
expectedStdout, err = os.ReadFile(path + "/diff.stdout.txt")
expectedStdout, err = os.ReadFile(filepath.Join(path, "diff.stdout.txt"))
require.NoError(t, err)

expectedStderr, err = os.ReadFile(path + "/diff.stderr.txt")
expectedStderr, err = os.ReadFile(filepath.Join(path, "diff.stderr.txt"))
require.NoError(t, err)
}

Expand Down Expand Up @@ -367,7 +332,7 @@ func assertDisplay(t testing.TB, events []Event, path string) {
expectedEvents = events
} else {
var err error
expectedEvents, err = loadEvents(filepath.Join(path, "eventstream.json"))
expectedEvents, err = ptesting.LoadEngineEvents(filepath.Join(path, "eventstream.json"))
require.NoError(t, err)

err = compareEvents(expectedEvents, events)
Expand Down Expand Up @@ -398,21 +363,21 @@ func assertDisplay(t testing.TB, events []Event, path string) {
err := os.MkdirAll(path, 0o700)
require.NoError(t, err)

err = os.WriteFile(path+"/diff.stdout.txt", stdout.Bytes(), 0o600)
err = os.WriteFile(filepath.Join(path, "diff.stdout.txt"), stdout.Bytes(), 0o600)
require.NoError(t, err)

err = os.WriteFile(path+"/diff.stderr.txt", stderr.Bytes(), 0o600)
err = os.WriteFile(filepath.Join(path, "diff.stderr.txt"), stderr.Bytes(), 0o600)
require.NoError(t, err)
}

expectedStdout = []byte{}
expectedStderr = []byte{}
if !accept {
var err error
expectedStdout, err = os.ReadFile(path + "/progress.stdout.txt")
expectedStdout, err = os.ReadFile(filepath.Join(path, "progress.stdout.txt"))
require.NoError(t, err)

expectedStderr, err = os.ReadFile(path + "/progress.stderr.txt")
expectedStderr, err = os.ReadFile(filepath.Join(path, "progress.stderr.txt"))
require.NoError(t, err)
}

Expand Down Expand Up @@ -443,10 +408,10 @@ func assertDisplay(t testing.TB, events []Event, path string) {
assert.Equal(t, string(expectedStdout), stdout.String())
assert.Equal(t, string(expectedStderr), stderr.String())
} else {
err := os.WriteFile(path+"/progress.stdout.txt", stdout.Bytes(), 0o600)
err := os.WriteFile(filepath.Join(path, "progress.stdout.txt"), stdout.Bytes(), 0o600)
require.NoError(t, err)

err = os.WriteFile(path+"/progress.stderr.txt", stderr.Bytes(), 0o600)
err = os.WriteFile(filepath.Join(path, "progress.stderr.txt"), stderr.Bytes(), 0o600)
require.NoError(t, err)
}
}
Expand Down
41 changes: 41 additions & 0 deletions sdk/go/common/testing/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@ package testing
import (
"crypto/rand"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"os"

bdisplay "github.com/pulumi/pulumi/pkg/v3/backend/display"
"github.com/pulumi/pulumi/pkg/v3/engine"
"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
)

Expand All @@ -13,3 +20,37 @@ func RandomStackName() string {
contract.AssertNoErrorf(err, "failed to generate random stack name")
return "test" + hex.EncodeToString(b)
}

func LoadEngineEvents(path string) (events []engine.Event, err error) {
f, err := os.Open(path)
if err != nil {
return nil, fmt.Errorf("opening '%v': %w", path, err)
}
defer contract.IgnoreClose(f)

dec := json.NewDecoder(f)
for {
var jsonEvent apitype.EngineEvent
if err = dec.Decode(&jsonEvent); err != nil {
if err == io.EOF {
break
}

return nil, fmt.Errorf("decoding event %d: %w", len(events), err)
}

event, err := bdisplay.ConvertJSONEvent(jsonEvent)
if err != nil {
return nil, fmt.Errorf("converting event %d: %w", len(events), err)
}
events = append(events, event)
}

// If there are no events or if the event stream does not terminate with a cancel event,
// synthesize one here.
if len(events) == 0 || events[len(events)-1].Type != engine.CancelEvent {
events = append(events, engine.NewCancelEvent())
}

return events, nil
}

0 comments on commit e685cea

Please sign in to comment.