#!/bin/bash

# Test the profile repository daemon.
#
# This test starts an profile repository daemon and uses the profile
# repository client to verify that <profile>.Put(), <profile>.Label(),
# <profile>.Description(), <profile>.Speficiation(), and
# <profile>.Remove() work as expected.

source "$(go list -f {{.Dir}} v.io/core/shell/lib)/shell_test.sh"

# Run the test under the security agent.
shell_test::enable_agent "$@"

readonly WORKDIR="${shell_test_WORK_DIR}"

build() {
  PROFILED_BIN="$(shell_test::build_go_binary 'v.io/core/veyron/services/mgmt/profile/profiled')"
  PROFILE_BIN="$(shell_test::build_go_binary 'v.io/core/veyron/tools/profile')"
}

main() {
  local GOT OUTPUT RESULT WANT

  cd "${WORKDIR}"
  build

  shell_test::setup_server_test

  # Start the profile repository daemon.
  local -r REPO="profiled-test-repo"
  local -r STORE=$(shell::tmp_dir)
  shell_test::start_server "${VRUN}" "${PROFILED_BIN}" --name="${REPO}" --veyron.tcp.address=127.0.0.1:0 --store="${STORE}" \
    || shell_test::fail "line ${LINENO} failed to start server"

  # Create a profile.
  local -r PROFILE="${REPO}/test-profile"
  "${PROFILE_BIN}" put "${PROFILE}" || shell_test::fail "line ${LINENO}: 'put' failed"

  # Retrieve the profile label.
  OUTPUT=$(shell::tmp_file)
  "${PROFILE_BIN}" label "${PROFILE}" | tee "${OUTPUT}" || shell_test::fail "line ${LINENO}: 'label' failed"
  GOT=$(cat "${OUTPUT}")
  WANT="example"
  shell_test::assert_eq "${GOT}" "${WANT}" "${LINENO}"

  # Retrieve the profile description.
  OUTPUT=$(shell::tmp_file)
  "${PROFILE_BIN}" description "${PROFILE}" | tee "${OUTPUT}" || shell_test::fail "line ${LINENO}: 'description' failed"
  GOT=$(cat "${OUTPUT}")
  WANT="Example profile to test the profile manager implementation."
  shell_test::assert_eq "${GOT}" "${WANT}" "${LINENO}"

  # Retrieve the profile specification.
  OUTPUT=$(shell::tmp_file)
  "${PROFILE_BIN}" specification "${PROFILE}" | tee "${OUTPUT}" || shell_test::fail "line ${LINENO}: 'spec' failed"
  GOT=$(cat "${OUTPUT}")
  WANT='profile.Specification{Label:"example", Description:"Example profile to test the profile manager implementation.", Arch:"amd64", OS:"linux", Format:"ELF", Libraries:map[profile.Library]struct {}{profile.Library{Name:"foo", MajorVersion:"1", MinorVersion:"0"}:struct {}{}}}'
  shell_test::assert_eq "${GOT}" "${WANT}" "${LINENO}"

  # Remove the profile.
  "${PROFILE_BIN}" remove "${PROFILE}" || shell_test::fail "line ${LINENO}: 'remove' failed"

  # Check the profile no longer exists.
  RESULT=$(shell::check_result "${PROFILE_BIN}" label "${PROFILE}")
  shell_test::assert_ne "${RESULT}" "0" "${LINENO}"
  RESULT=$(shell::check_result "${PROFILE_BIN}" description "${PROFILE}")
  shell_test::assert_ne "${RESULT}" "0" "${LINENO}"
  RESULT=$(shell::check_result "${PROFILE_BIN}" specification "${PROFILE}")
  shell_test::assert_ne "${RESULT}" "0" "${LINENO}"

  shell_test::pass
}

main "$@"
