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

Commit 8dee71f1 authored by Roland Levillain's avatar Roland Levillain Committed by Gerrit Code Review
Browse files

Merge changes I10c6ed68,I14d6defe

* changes:
  Check Android Runtime (Boot) device configuration flag `enable_apex_image`.
  Refactor unit test for Android Runtime (Boot) device configuration flags.
parents 3e15c9f9 b7bb0a13
Loading
Loading
Loading
Loading
+90 −13
Original line number Diff line number Diff line
@@ -172,14 +172,42 @@ function check_no_zygote_gc_runtime_option {
  done
}

# test_android_runtime_flag FLAG VALUE GC_RUNTIME_OPTION
# ------------------------------------------------------
# Test device configuration FLAG with VALUE. Check that GC_RUNTIME_OPTION is
# passed as GC Runtime option by the zygote.
# check_android_runtime_message CONTEXT MESSAGE
# ---------------------------------------------
# Return whether AndroidRuntime generated MESSAGE in logcat. Use CONTEXT in
# logging.
function check_android_runtime_message {
  local context=$1
  local message=$2

  say "[$context] Check that AndroidRuntime generated expected message in logcat..."
  adb logcat -d -s AndroidRuntime | grep -F -q "$message" \
    || fail "Found no message \"$message\" generated by AndroidRuntime"
}

# check_no_android_runtime_message CONTEXT MESSAGE
# ------------------------------------------------
# Return whether AndroidRuntime did not generate MESSAGE in logcat. Use CONTEXT
# in logging.
function check_no_android_runtime_message {
  local context=$1
  local message=$2

  say "[$context] Check that AndroidRuntime did not generate unexpected message in logcat..."
  adb logcat -d -s AndroidRuntime | grep -F -q -v "$message" \
    || fail "Found message \"$message\" generated by AndroidRuntime"
}

# test_android_runtime_flag FLAG VALUE CHECK_EFFECT CHECK_NO_EFFECT
# -----------------------------------------------------------------
# Test device configuration FLAG with VALUE. CHECK_EFFECT and CHECK_NO_EFFECT
# are functions that are passed a context as sole argument and that respectively
# check the effect or the absence of effect of the flag.
function test_android_runtime_flag {
  local flag=$1
  local value=$2
  local gc_runtime_option=$3
  local check_effect=$3
  local check_no_effect=$4

  # Persistent system property (set after a reboot) associated with the device
  # configuration flag.
@@ -193,26 +221,26 @@ function test_android_runtime_flag {
  sleep 3

  # Check that both the device configuration flag and the associated system
  # property are set, but that the zygote hasn't had the flag passed to it as a
  # GC runtime option (as we haven't rebooted yet).
  # property are set, but that flag has not produced an effect on the system (as
  # we haven't rebooted yet).
  local context="Flag set, before reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_no_effect "$context"

  # Reboot device for the flag value to take effect.
  reboot_and_wait_for_device
  context="Flag set, after 1st reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_effect "$context"

  # Reboot device a second time and check that the state has persisted.
  reboot_and_wait_for_device
  context="Flag set, after 2nd reboot"
  check_device_config_flag "$context" "$flag" "$value"
  check_system_property "$context" "$prop" "$value"
  check_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_effect "$context"

  say "Unsetting device configuration flag..."
  adb shell device_config delete "$namespace" "$flag" >/dev/null
@@ -224,9 +252,13 @@ function test_android_runtime_flag {
  context="Flag unset, after 3rd reboot"
  check_no_device_config_flag "$context" "$flag"
  check_no_system_property "$context" "$prop"
  check_no_zygote_gc_runtime_option "$context" "$gc_runtime_option"
  $check_no_effect "$context"
}


# Pre-test actions.
# =================

# Enumerate Zygote processes.
case $(adb shell getprop ro.zygote) in
  (zygote32) zygotes="zygote";;
@@ -235,8 +267,53 @@ case $(adb shell getprop ro.zygote) in
esac

# Test "enable_generational_cc" flag values.
test_android_runtime_flag enable_generational_cc false nogenerational_cc
test_android_runtime_flag enable_generational_cc true generational_cc
# ==========================================

function check_nogenerational_cc {
  check_zygote_gc_runtime_option "$1" nogenerational_cc
}
function check_no_nogenerational_cc {
  check_no_zygote_gc_runtime_option "$1" nogenerational_cc
}

function check_generational_cc {
  check_zygote_gc_runtime_option "$1" generational_cc
}
function check_no_generational_cc {
  check_no_zygote_gc_runtime_option "$1" generational_cc
}

test_android_runtime_flag \
  enable_generational_cc false check_nogenerational_cc check_no_nogenerational_cc
test_android_runtime_flag \
  enable_generational_cc true check_generational_cc check_no_generational_cc

# Test "enable_apex_image" flag values.
# =====================================

default_boot_image_message="Using default boot image"
function check_default_boot_image {
  check_android_runtime_message "$1" "$default_boot_image_message"
}
function check_no_default_boot_image {
  check_no_android_runtime_message "$1" "$default_boot_image_message"
}

apex_boot_image_message="Using Apex boot image: '-Ximage:/system/framework/apex.art'"
function check_apex_boot_image {
  check_android_runtime_message "$1" "$apex_boot_image_message"
}
function check_no_apex_boot_image {
  check_no_android_runtime_message "$1" "$apex_boot_image_message"
}

test_android_runtime_flag \
  enable_apex_image false check_default_boot_image check_no_default_boot_image
test_android_runtime_flag \
  enable_apex_image true check_apex_boot_image check_no_apex_boot_image

# Post-test actions.
# ==================

if [[ "$exit_status" -eq 0 ]]; then
  banner "All tests passed."