Skip to content
This repository was archived by the owner on Mar 24, 2023. It is now read-only.

Commit bfea181

Browse files
authored
test persist release (#99)
* test persist release * refactor fs
1 parent 5471c8b commit bfea181

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

pkg/specs/resolver.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ package specs
33
import (
44
"context"
55
"fmt"
6-
"io/ioutil"
7-
8-
"os"
96
"path/filepath"
107

118
"github.com/go-kit/kit/log"
129
"github.com/go-kit/kit/log/level"
1310
"github.com/pkg/errors"
1411
"github.com/replicatedcom/ship/pkg/api"
12+
"github.com/replicatedcom/ship/pkg/lifecycle/render/state"
1513
"github.com/replicatedcom/ship/pkg/logger"
1614
"github.com/spf13/viper"
1715
"gopkg.in/yaml.v2"
@@ -36,6 +34,7 @@ type Selector struct {
3634
type Resolver struct {
3735
Logger log.Logger
3836
Client *GraphQLClient
37+
StateManager *state.StateManager
3938
StudioFile string
4039
StudioChannelName string
4140
StudioChannelIcon string
@@ -50,6 +49,7 @@ func ResolverFromViper(v *viper.Viper) (*Resolver, error) {
5049
return &Resolver{
5150
Logger: logger.FromViper(v),
5251
Client: graphql,
52+
StateManager: state.ManagerFromViper(v),
5353
StudioFile: v.GetString("studio-file"),
5454
StudioChannelName: v.GetString("studio-channel-name"),
5555
StudioChannelIcon: v.GetString("studio-channel-icon"),
@@ -98,7 +98,7 @@ func (r *Resolver) resolveStudioRelease() (*ShipRelease, error) {
9898
debug := level.Debug(log.With(r.Logger, "method", "resolveStudioSpec"))
9999
debug.Log("phase", "load-specs", "from", "studio-file", "file", r.StudioFile)
100100

101-
specYAML, err := ioutil.ReadFile(r.StudioFile)
101+
specYAML, err := r.StateManager.FS.ReadFile(r.StudioFile)
102102
if err != nil {
103103
return nil, errors.Wrapf(err, "read specs from %s", r.StudioFile)
104104
}
@@ -136,11 +136,11 @@ func (r *Resolver) resolveCloudRelease(customerID, installationID string) (*Ship
136136

137137
// persistSpec persists last-used YAML to disk at .ship/release.yml
138138
func (r *Resolver) persistSpec(specYAML []byte) error {
139-
if err := os.MkdirAll(filepath.Dir(ReleasePath), 0700); err != nil {
139+
if err := r.StateManager.FS.MkdirAll(filepath.Dir(ReleasePath), 0700); err != nil {
140140
return errors.Wrap(err, "mkdir yaml")
141141
}
142142

143-
if err := ioutil.WriteFile(ReleasePath, specYAML, 0644); err != nil {
143+
if err := r.StateManager.FS.WriteFile(ReleasePath, specYAML, 0644); err != nil {
144144
return errors.Wrap(err, "write yaml file")
145145
}
146146
return nil

pkg/specs/resolver_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package specs
2+
3+
import (
4+
"testing"
5+
"github.com/go-kit/kit/log"
6+
"github.com/replicatedcom/ship/pkg/lifecycle/render/state"
7+
"github.com/spf13/afero"
8+
"github.com/stretchr/testify/require"
9+
"reflect"
10+
)
11+
12+
func TestPersistSpec(t *testing.T) {
13+
14+
r := &Resolver{
15+
StateManager: &state.StateManager{
16+
Logger: log.NewNopLogger(),
17+
FS: afero.Afero{Fs: afero.NewMemMapFs()},
18+
},
19+
}
20+
21+
req := require.New(t)
22+
23+
desiredSpec := []byte("my cool spec")
24+
err := r.persistSpec(desiredSpec)
25+
req.NoError(err)
26+
27+
persistedSpec, err := r.StateManager.FS.ReadFile(".ship/release.yml")
28+
req.True(reflect.DeepEqual(desiredSpec, persistedSpec))
29+
}

0 commit comments

Comments
 (0)