Skip to content

Commit 6d1ab38

Browse files
factor a bit
1 parent e615cd6 commit 6d1ab38

File tree

3 files changed

+59
-24
lines changed

3 files changed

+59
-24
lines changed

pkg/tests/schema_generation_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ func Test_Generate(t *testing.T) {
145145

146146
outDir := t.TempDir()
147147

148-
// Create the output directory.
149148
var root afero.Fs
150149
if outDir != "" {
151150
absOutDir, err := filepath.Abs(outDir)
@@ -240,7 +239,6 @@ func Test_GenerateWithOverlay(t *testing.T) {
240239
},
241240
}
242241

243-
// Create the output directory.
244242
root := afero.NewMemMapFs()
245243

246244
err := afero.WriteFile(root, overlayFileName, overlayFileContent, 0o600)

pkg/tfgen/generate.go

+25-19
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func (l Language) shouldConvertExamples() bool {
112112
return false
113113
}
114114

115-
func aferoDirToBytesMap(fs afero.Fs, dir string) (map[string][]byte, error) {
115+
func dirToBytesMap(fs afero.Fs, dir string) (map[string][]byte, error) {
116116
result := make(map[string][]byte)
117117
err := afero.Walk(fs, dir, func(path string, info os.FileInfo, err error) error {
118118
if err != nil {
@@ -138,6 +138,27 @@ func aferoDirToBytesMap(fs afero.Fs, dir string) (map[string][]byte, error) {
138138
return result, err
139139
}
140140

141+
func writeBytesMapToDir(fs afero.Fs, dir string, files map[string][]byte) error {
142+
err := fs.MkdirAll(dir, 0o755)
143+
if err != nil {
144+
return pkgerrors.Wrap(err, "failed to create dir")
145+
}
146+
for name, content := range files {
147+
srcDir := filepath.Dir(name)
148+
if srcDir != "." {
149+
err = fs.MkdirAll(filepath.Join(dir, srcDir), 0o755)
150+
if err != nil {
151+
return pkgerrors.Wrap(err, "failed to create dir")
152+
}
153+
}
154+
err := afero.WriteFile(fs, filepath.Join(dir, name), content, 0o600)
155+
if err != nil {
156+
return pkgerrors.Wrap(err, "failed to write file")
157+
}
158+
}
159+
return nil
160+
}
161+
141162
func runPulumiPackageGenSDK(l Language, pkg *pschema.Package, extraFiles map[string][]byte) (map[string][]byte, error) {
142163
var err error
143164

@@ -155,7 +176,6 @@ func runPulumiPackageGenSDK(l Language, pkg *pschema.Package, extraFiles map[str
155176

156177
args := []string{"package", "gen-sdk", "--language", string(l), "--out", outDir}
157178

158-
// turn extraFiles into a folder with files
159179
if len(extraFiles) > 0 {
160180
overlayDir, err := afero.TempDir(fs, "", "pulumi-package-gen-sdk-overlays")
161181
if err != nil {
@@ -168,28 +188,14 @@ func runPulumiPackageGenSDK(l Language, pkg *pschema.Package, extraFiles map[str
168188
}
169189
}()
170190
dest := filepath.Join(overlayDir, string(l))
171-
err = fs.MkdirAll(dest, 0o755)
191+
err = writeBytesMapToDir(fs, dest, extraFiles)
172192
if err != nil {
173-
return nil, pkgerrors.Wrap(err, "failed to create temp dir")
174-
}
175-
for name, content := range extraFiles {
176-
dir := filepath.Dir(name)
177-
if dir != "." {
178-
err = fs.MkdirAll(filepath.Join(dest, dir), 0o755)
179-
if err != nil {
180-
return nil, pkgerrors.Wrap(err, "failed to create temp dir")
181-
}
182-
}
183-
err := afero.WriteFile(fs, filepath.Join(dest, name), content, 0o600)
184-
if err != nil {
185-
return nil, pkgerrors.Wrap(err, "failed to write file")
186-
}
193+
return nil, pkgerrors.Wrap(err, "failed to write overlay files")
187194
}
188195

189196
args = append(args, "--overlays", overlayDir)
190197
}
191198

192-
// write the schema to a file
193199
schemaDir, err := afero.TempDir(fs, "", "schema")
194200
if err != nil {
195201
return nil, pkgerrors.Wrap(err, "failed to create temp dir")
@@ -216,7 +222,7 @@ func runPulumiPackageGenSDK(l Language, pkg *pschema.Package, extraFiles map[str
216222
return nil, pkgerrors.New(string(out) + "\n" + stderr + "\n" + err.Error())
217223
}
218224

219-
return aferoDirToBytesMap(fs, outDir)
225+
return dirToBytesMap(fs, outDir)
220226
}
221227

222228
func (l Language) emitSDK(pkg *pschema.Package, info tfbridge.ProviderInfo, root afero.Fs,

pkg/tfgen/generate_test.go

+34-3
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ func Test_aferoDirToBytesMap(t *testing.T) {
685685
err = afero.WriteFile(fs, "/root/dir2/file4.txt", []byte("qux"), 0o600)
686686
require.NoError(t, err)
687687

688-
result, err := aferoDirToBytesMap(fs, "/root")
688+
result, err := dirToBytesMap(fs, "/root")
689689
require.NoError(t, err)
690690

691691
expected := map[string][]byte{
@@ -700,13 +700,44 @@ func Test_aferoDirToBytesMap(t *testing.T) {
700700
t.Run("empty directory", func(t *testing.T) {
701701
err := afero.WriteFile(fs, "/emptydir/.keep", []byte{}, 0o600)
702702
require.NoError(t, err)
703-
res, err := aferoDirToBytesMap(fs, "/emptydir")
703+
res, err := dirToBytesMap(fs, "/emptydir")
704704
require.NoError(t, err)
705705
require.Equal(t, map[string][]byte{".keep": {}}, res)
706706
})
707707

708708
t.Run("non-existent directory", func(t *testing.T) {
709-
_, err := aferoDirToBytesMap(fs, "/doesnotexist")
709+
_, err := dirToBytesMap(fs, "/doesnotexist")
710710
require.Error(t, err, "file does not exist")
711711
})
712712
}
713+
714+
func Test_writeBytesMapToDir(t *testing.T) {
715+
t.Parallel()
716+
fs := afero.NewMemMapFs()
717+
718+
t.Run("happy path", func(t *testing.T) {
719+
dir := "/root"
720+
files := map[string][]byte{
721+
"file1.txt": []byte("hello world"),
722+
"dir1/file2.txt": []byte("foo bar"),
723+
"dir1/file3.txt": []byte("baz"),
724+
"dir2/file4.txt": []byte("qux"),
725+
}
726+
err := writeBytesMapToDir(fs, dir, files)
727+
require.NoError(t, err)
728+
for name, content := range files {
729+
actual, err := afero.ReadFile(fs, filepath.Join(dir, name))
730+
require.NoError(t, err)
731+
require.Equal(t, content, actual)
732+
}
733+
})
734+
735+
t.Run("empty map", func(t *testing.T) {
736+
dir := "/emptydir"
737+
err := writeBytesMapToDir(fs, dir, map[string][]byte{})
738+
require.NoError(t, err)
739+
exists, err := afero.DirExists(fs, dir)
740+
require.NoError(t, err)
741+
require.True(t, exists)
742+
})
743+
}

0 commit comments

Comments
 (0)