|  | // Copyright 2018 Google Inc. All rights reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | package bpf | 
|  |  | 
|  | import ( | 
|  | "os" | 
|  | "testing" | 
|  |  | 
|  | "android/soong/android" | 
|  | "android/soong/cc" | 
|  | ) | 
|  |  | 
|  | func TestMain(m *testing.M) { | 
|  | os.Exit(m.Run()) | 
|  | } | 
|  |  | 
|  | var prepareForBpfTest = android.GroupFixturePreparers( | 
|  | cc.PrepareForTestWithCcDefaultModules, | 
|  | android.FixtureMergeMockFs( | 
|  | map[string][]byte{ | 
|  | "bpf.c":              nil, | 
|  | "bpf_invalid_name.c": nil, | 
|  | "BpfTest.cpp":        nil, | 
|  | }, | 
|  | ), | 
|  | PrepareForTestWithBpf, | 
|  | ) | 
|  |  | 
|  | func TestBpfDataDependency(t *testing.T) { | 
|  | bp := ` | 
|  | bpf { | 
|  | name: "bpf.o", | 
|  | srcs: ["bpf.c"], | 
|  | } | 
|  |  | 
|  | cc_test { | 
|  | name: "vts_test_binary_bpf_module", | 
|  | srcs: ["BpfTest.cpp"], | 
|  | data: [":bpf.o"], | 
|  | gtest: false, | 
|  | } | 
|  | ` | 
|  |  | 
|  | prepareForBpfTest.RunTestWithBp(t, bp) | 
|  |  | 
|  | // We only verify the above BP configuration is processed successfully since the data property | 
|  | // value is not available for testing from this package. | 
|  | // TODO(jungjw): Add a check for data or move this test to the cc package. | 
|  | } | 
|  |  | 
|  | func TestBpfSourceName(t *testing.T) { | 
|  | bp := ` | 
|  | bpf { | 
|  | name: "bpf_invalid_name.o", | 
|  | srcs: ["bpf_invalid_name.c"], | 
|  | } | 
|  | ` | 
|  | prepareForBpfTest.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern( | 
|  | `\QAndroid.bp:2:3: module "bpf_invalid_name.o" variant "android_common": invalid character '_' in source name\E`)). | 
|  | RunTestWithBp(t, bp) | 
|  | } | 
|  |  | 
|  | func TestBpfWithBazel(t *testing.T) { | 
|  | bp := ` | 
|  | bpf { | 
|  | name: "bpf.o", | 
|  | srcs: ["bpf.c"], | 
|  | bazel_module: { label: "//bpf" }, | 
|  | } | 
|  | ` | 
|  |  | 
|  | result := android.GroupFixturePreparers( | 
|  | prepareForBpfTest, android.FixtureModifyConfig(func(config android.Config) { | 
|  | config.BazelContext = android.MockBazelContext{ | 
|  | OutputBaseDir: "outputbase", | 
|  | LabelToOutputFiles: map[string][]string{ | 
|  | "//bpf": []string{"bpf.o"}}} | 
|  | })).RunTestWithBp(t, bp) | 
|  |  | 
|  | output := result.Module("bpf.o", "android_common").(*bpf) | 
|  |  | 
|  | expectedOutputFiles := []string{"outputbase/execroot/__main__/bpf.o"} | 
|  | android.AssertDeepEquals(t, "output files", expectedOutputFiles, output.objs.Strings()) | 
|  | } |