Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acde8e7f authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge "Convert kernel package to use test fixtures"

parents 785f378f e5ac250a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -27,8 +27,12 @@ import (
)

func init() {
	android.RegisterModuleType("prebuilt_kernel_modules", prebuiltKernelModulesFactory)
	pctx.Import("android/soong/cc/config")
	registerKernelBuildComponents(android.InitRegistrationContext)
}

func registerKernelBuildComponents(ctx android.RegistrationContext) {
	ctx.RegisterModuleType("prebuilt_kernel_modules", prebuiltKernelModulesFactory)
}

type prebuiltKernelModules struct {
+12 −79
Original line number Diff line number Diff line
@@ -15,73 +15,29 @@
package kernel

import (
	"io/ioutil"
	"os"
	"reflect"
	"strings"
	"testing"

	"android/soong/android"
	"android/soong/cc"
)

func testKernelModules(t *testing.T, bp string, fs map[string][]byte) (*android.TestContext, android.Config) {
	bp = bp + `
		cc_binary_host {
			name: "depmod",
			srcs: ["depmod.cpp"],
			stl: "none",
			static_executable: true,
			system_shared_libs: [],
		}
	`
	bp = bp + cc.GatherRequiredDepsForTest(android.Android)

	fs["depmod.cpp"] = nil
	cc.GatherRequiredFilesForTest(fs)

	config := android.TestArchConfig(buildDir, nil, bp, fs)

	ctx := android.NewTestArchContext(config)
	ctx.RegisterModuleType("prebuilt_kernel_modules", prebuiltKernelModulesFactory)
	ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
	cc.RegisterRequiredBuildComponentsForTest(ctx)

	ctx.Register()
	_, errs := ctx.ParseFileList(".", []string{"Android.bp"})
	android.FailIfErrored(t, errs)
	_, errs = ctx.PrepareBuildActions(config)
	android.FailIfErrored(t, errs)

	return ctx, config
}

func ensureListContains(t *testing.T, result []string, expected string) {
	t.Helper()
	if !android.InList(expected, result) {
		t.Errorf("%q is not found in %v", expected, result)
	}
}

func ensureContains(t *testing.T, result string, expected string) {
	t.Helper()
	if !strings.Contains(result, expected) {
		t.Errorf("%q is not found in %q", expected, result)
	}
}

func TestKernelModulesFilelist(t *testing.T) {
	ctx, _ := testKernelModules(t, `
	ctx := android.GroupFixturePreparers(
		cc.PrepareForTestWithCcDefaultModules,
		android.FixtureRegisterWithContext(registerKernelBuildComponents),
		android.MockFS{
			"depmod.cpp": nil,
			"mod1.ko":    nil,
			"mod2.ko":    nil,
		}.AddToFixture(),
	).RunTestWithBp(t, `
		prebuilt_kernel_modules {
			name: "foo",
			srcs: ["*.ko"],
			kernel_version: "5.10",
		}
	`,
		map[string][]byte{
			"mod1.ko": nil,
			"mod2.ko": nil,
		})
	`)

	expected := []string{
		"lib/modules/5.10/mod1.ko",
@@ -98,32 +54,9 @@ func TestKernelModulesFilelist(t *testing.T) {
	}
	actual = android.SortedUniqueStrings(actual)
	expected = android.SortedUniqueStrings(expected)
	if !reflect.DeepEqual(actual, expected) {
		t.Errorf("\ngot: %v\nexpected: %v\n", actual, expected)
	}
}

var buildDir string

func setUp() {
	var err error
	buildDir, err = ioutil.TempDir("", "soong_kernel_test")
	if err != nil {
		panic(err)
	}
}

func tearDown() {
	os.RemoveAll(buildDir)
	android.AssertDeepEquals(t, "foo packaging specs", expected, actual)
}

func TestMain(m *testing.M) {
	run := func() int {
		setUp()
		defer tearDown()

		return m.Run()
	}

	os.Exit(run())
	os.Exit(m.Run())
}