Fix writing soong.variables .

ConfiguredJarList had a marshaler but no unmarshaler.

Bug: 182965747
Test: Presubmits.
Change-Id: Id03669f4a0a3d389063a4e4b11af6d6be63dbba3
This commit is contained in:
Lukacs T. Berki 2021-03-17 13:34:30 +01:00
parent 45a4971808
commit 720b3964fe
4 changed files with 51 additions and 58 deletions

View File

@ -19,6 +19,7 @@ package android
import ( import (
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@ -1635,6 +1636,20 @@ func (l *ConfiguredJarList) UnmarshalJSON(b []byte) error {
return nil return nil
} }
func (l *ConfiguredJarList) MarshalJSON() ([]byte, error) {
if len(l.apexes) != len(l.jars) {
return nil, errors.New(fmt.Sprintf("Inconsistent ConfiguredJarList: apexes: %q, jars: %q", l.apexes, l.jars))
}
list := make([]string, 0, len(l.apexes))
for i := 0; i < len(l.apexes); i++ {
list = append(list, l.apexes[i]+":"+l.jars[i])
}
return json.Marshal(list)
}
// ModuleStem hardcodes the stem of framework-minus-apex to return "framework". // ModuleStem hardcodes the stem of framework-minus-apex to return "framework".
// //
// TODO(b/139391334): hard coded until we find a good way to query the stem of a // TODO(b/139391334): hard coded until we find a good way to query the stem of a

View File

@ -16,6 +16,7 @@ package android
import ( import (
"fmt" "fmt"
"path/filepath"
"reflect" "reflect"
"strings" "strings"
"testing" "testing"
@ -87,6 +88,37 @@ func TestMissingVendorConfig(t *testing.T) {
} }
} }
func verifyProductVariableMarshaling(t *testing.T, v productVariables) {
dir := t.TempDir()
path := filepath.Join(dir, "test.variables")
err := saveToConfigFile(&v, path)
if err != nil {
t.Errorf("Couldn't save default product config: %q", err)
}
var v2 productVariables
err = loadFromConfigFile(&v2, path)
if err != nil {
t.Errorf("Couldn't load default product config: %q", err)
}
}
func TestDefaultProductVariableMarshaling(t *testing.T) {
v := productVariables{}
v.SetDefaultConfig()
verifyProductVariableMarshaling(t, v)
}
func TestBootJarsMarshaling(t *testing.T) {
v := productVariables{}
v.SetDefaultConfig()
v.BootJars = ConfiguredJarList{
apexes: []string{"apex"},
jars: []string{"jar"},
}
verifyProductVariableMarshaling(t, v)
}
func assertStringEquals(t *testing.T, expected, actual string) { func assertStringEquals(t *testing.T, expected, actual string) {
if actual != expected { if actual != expected {
t.Errorf("expected %q found %q", expected, actual) t.Errorf("expected %q found %q", expected, actual)

View File

@ -426,6 +426,9 @@ func (v *productVariables) SetDefaultConfig() {
Malloc_zero_contents: boolPtr(true), Malloc_zero_contents: boolPtr(true),
Malloc_pattern_fill_contents: boolPtr(false), Malloc_pattern_fill_contents: boolPtr(false),
Safestack: boolPtr(false), Safestack: boolPtr(false),
BootJars: ConfiguredJarList{apexes: []string{}, jars: []string{}},
UpdatableBootJars: ConfiguredJarList{apexes: []string{}, jars: []string{}},
} }
if runtime.GOOS == "linux" { if runtime.GOOS == "linux" {

View File

@ -4,7 +4,7 @@
# in a source tree that only contains enough files for Bazel and Soong to work. # in a source tree that only contains enough files for Bazel and Soong to work.
HARDWIRED_MOCK_TOP= HARDWIRED_MOCK_TOP=
# Uncomment this for to be able to view the source tree after a test is run # Uncomment this to be able to view the source tree after a test is run
# HARDWIRED_MOCK_TOP=/tmp/td # HARDWIRED_MOCK_TOP=/tmp/td
REAL_TOP="$(readlink -f "$(dirname "$0")"/../..)" REAL_TOP="$(readlink -f "$(dirname "$0")"/../..)"
@ -85,63 +85,6 @@ function setup() {
export ALLOW_MISSING_DEPENDENCIES=true export ALLOW_MISSING_DEPENDENCIES=true
mkdir -p out/soong mkdir -p out/soong
# This is necessary because the empty soong.variables file written to satisfy
# Ninja would contain "BootJars: {}" instead of "BootJars: []" which cannot
# be parsed back
# TODO(b/182965747): Fix this.
cat > out/soong/soong.variables <<'EOF'
{
"BuildNumberFile": "build_number.txt",
"Platform_version_name": "S",
"Platform_sdk_version": 30,
"Platform_sdk_codename": "S",
"Platform_sdk_final": false,
"Platform_version_active_codenames": [
"S"
],
"Platform_vndk_version": "S",
"DeviceName": "generic_arm64",
"DeviceArch": "arm64",
"DeviceArchVariant": "armv8-a",
"DeviceCpuVariant": "generic",
"DeviceAbi": [
"arm64-v8a"
],
"DeviceSecondaryArch": "arm",
"DeviceSecondaryArchVariant": "armv8-a",
"DeviceSecondaryCpuVariant": "generic",
"DeviceSecondaryAbi": [
"armeabi-v7a",
"armeabi"
],
"HostArch": "x86_64",
"HostSecondaryArch": "x86",
"CrossHost": "windows",
"CrossHostArch": "x86",
"CrossHostSecondaryArch": "x86_64",
"AAPTCharacteristics": "nosdcard",
"AAPTConfig": [
"normal",
"large",
"xlarge",
"hdpi",
"xhdpi",
"xxhdpi"
],
"AAPTPreferredConfig": "xhdpi",
"AAPTPrebuiltDPI": [
"xhdpi",
"xxhdpi"
],
"Malloc_not_svelte": true,
"Malloc_zero_contents": true,
"Malloc_pattern_fill_contents": false,
"Safestack": false,
"BootJars": [],
"UpdatableBootJars": [],
"Native_coverage": null
}
EOF
} }
function run_soong() { function run_soong() {