#!/bin/bash
#
# Copyright 2020 The Cobalt Authors. 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.

# Unset the previous test's name and runner function.
unset TEST_NAME
unset TEST_FILE
unset -f run_test

TEST_NAME="ValidSlotOverwritten"
TEST_FILE="test.html"

function run_test() {
  clear_storage

  start_cobalt "file:///tests/${TEST_FILE}" "${TEST_NAME}.0.log" "update from test channel installed"

  if [[ $? -ne 0 ]]; then
    error "Failed to download and install the test package"
    return 1
  fi

  start_cobalt "file:///tests/${TEST_FILE}" "${TEST_NAME}.1.log" "App is up to date"

  if [[ $? -ne 0 ]]; then
    error "Failed to run the downloaded installation"
    return 1
  fi

  SLOT="$(get_current_installation_slot "${TEST_NAME}.1.log")"

  # Warning: do not wrap '$TAIL' with double quotes or else it will not actually
  # resolve to the correct command.
  delete_file "$(run_command "find ${STORAGE_DIR}/installation_${SLOT} -name app_key_*.good | ${TAIL} -1")"

  create_file "${STORAGE_DIR}/installation_${SLOT}/app_key_TEST.good"

  start_cobalt "file:///tests/${TEST_FILE}" "${TEST_NAME}.2.log" "AdoptInstallation: current_installation=${SLOT}"

  if [[ $? -ne 0 ]]; then
    error "Failed to adopt installation"
    return 1
  fi

  return 0
}

