Move filesystem into Config
The filesystem object was available through ModuleContext.Fs(), but
gives too much access to the filesystem without enforicing correct
dependencies. In order to support sandboxing the soong_build
process move the filesystem into the Config. The next change will
make it private.
Bug: 146437378
Test: all Soong tests
Change-Id: I5d3ae9108f120fd335b21efd612aefa078378813
diff --git a/android/testing.go b/android/testing.go
index 26f1e4d..aaf98f5 100644
--- a/android/testing.go
+++ b/android/testing.go
@@ -16,7 +16,6 @@
import (
"fmt"
- "path/filepath"
"regexp"
"strings"
"testing"
@@ -68,7 +67,11 @@
ctx.postDeps = append(ctx.postDeps, f)
}
-func (ctx *TestContext) Register() {
+func (ctx *TestContext) Register(config Config) {
+ ctx.SetFs(config.fs)
+ if config.mockBpList != "" {
+ ctx.SetModuleListFile(config.mockBpList)
+ }
registerMutators(ctx.Context.Context, ctx.preArch, ctx.preDeps, ctx.postDeps)
ctx.RegisterSingletonType("env", EnvSingleton)
@@ -132,25 +135,6 @@
"\nall singletons: %v", name, allSingletonNames))
}
-// MockFileSystem causes the Context to replace all reads with accesses to the provided map of
-// filenames to contents stored as a byte slice.
-func (ctx *TestContext) MockFileSystem(files map[string][]byte) {
- // no module list file specified; find every file named Blueprints or Android.bp
- pathsToParse := []string{}
- for candidate := range files {
- base := filepath.Base(candidate)
- if base == "Blueprints" || base == "Android.bp" {
- pathsToParse = append(pathsToParse, candidate)
- }
- }
- if len(pathsToParse) < 1 {
- panic(fmt.Sprintf("No Blueprint or Android.bp files found in mock filesystem: %v\n", files))
- }
- files[blueprint.MockModuleListFile] = []byte(strings.Join(pathsToParse, "\n"))
-
- ctx.Context.MockFileSystem(files)
-}
-
type testBuildProvider interface {
BuildParamsForTests() []BuildParams
RuleParamsForTests() map[blueprint.Rule]blueprint.RuleParams