#!/bin/bash

# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Abort on error.
set -e

# Load common constants and variables.
. "$(dirname "$0")/common.sh"

usage() {
    echo "Usage $PROG image [config]"
}

main() {
    # We want to catch all the discrepancies, not just the first one.
    # So, any time we find one, we set testfail=1 and continue.
    # When finished we will use testfail to determine our exit value.
    local testfail=0

    if [[ $# -ne 1 ]] && [[ $# -ne 2 ]]; then
        usage
        exit 1
    fi

    local image="$1"

    # Default config location: same name/directory as this script,
    # with a .config file extension, ie ensure_no_nonrelease_files.config.
    local configfile="$(dirname "$0")/${0/%.sh/.config}"
    # Or, maybe a config was provided on the command line.
    if [[ $# -eq 2 ]]; then
        configfile="$2"
    fi
    # Either way, load test-expectations data from config.
    . "${configfile}" || return 1

    local loopdev=$(loopback_partscan "${image}")
    local rootfs=$(make_temp_dir)
    mount_loop_image_partition_ro "${loopdev}" 3 "${rootfs}"
    # Pick the right set of test-expectation data to use.
    local brdvar=$(get_boardvar_from_lsb_release "${rootfs}")
    eval "release_file_blocklist=(\"\${RELEASE_FILE_BLOCKLIST_${brdvar}[@]}\")"

    for file in ${release_file_blocklist}; do
        if [ -e "${rootfs}/${file}" ]; then
            error "${file} exists in this image!"
            ls -al "${rootfs}/${file}"
            testfail=1
        fi
    done

    # Verify that session_manager isn't configured to pass additional
    # environment variables or command-line arguments to Chrome.
    local config_path="${rootfs}/etc/chrome_dev.conf"
    local matches=$(grep -s "^[^#]" "${config_path}")
    if [ -n "${matches}" ]; then
        error "Found commands in ${config_path}:"
        error "${matches}"
        testfail=1
    fi

    exit ${testfail}
}
main "$@"
