| 247 | } |
| 248 | |
| 249 | func moduleArchiveFS(t *testing.T, defs map[string]moduleDef) fs.FS { |
| 250 | memFS := afero.NewMemMapFs() |
| 251 | modRoot := ".terraform/modules" |
| 252 | err := memFS.MkdirAll(modRoot, 0o755) |
| 253 | require.NoError(t, err) |
| 254 | |
| 255 | mods := []*module{} |
| 256 | for name, def := range defs { |
| 257 | modDir := filepath.Join(modRoot, name) |
| 258 | err = memFS.Mkdir(modDir, 0o755) |
| 259 | require.NoError(t, err) |
| 260 | |
| 261 | f, err := memFS.Create(filepath.Join(modDir, "payload")) |
| 262 | require.NoError(t, err) |
| 263 | _, err = f.Write(def.payload) |
| 264 | require.NoError(t, err) |
| 265 | f.Close() |
| 266 | |
| 267 | mods = append(mods, &module{ |
| 268 | Source: name, |
| 269 | Version: "v0.1.0", |
| 270 | Key: name, |
| 271 | Dir: modDir, |
| 272 | }) |
| 273 | } |
| 274 | |
| 275 | data, _ := json.Marshal(modulesFile{ |
| 276 | Modules: mods, |
| 277 | }) |
| 278 | jm, err := memFS.Create(filepath.Join(modRoot, "modules.json")) |
| 279 | require.NoError(t, err) |
| 280 | _, err = jm.Write(data) |
| 281 | require.NoError(t, err) |
| 282 | jm.Close() |
| 283 | |
| 284 | return afero.NewIOFS(memFS) |
| 285 | } |