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

Commit e5ac250a authored by Paul Duffin's avatar Paul Duffin
Browse files

Convert kernel package to use test fixtures

Bug: 181070625
Test: m nothing
Change-Id: Ibd3cc62feec1b911d74451d53cea81607d3bec36
parent cf7f2e0a
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())
}