#!/bin/bash
#
# Test for running CVMFS against an Azure S3 implementation
#
# In this test we create our own Azurite blob service.
# require az-cli and azurite to be installed, see $platform_setup.sh
# keys are hard-coded dev keys in azurite, so safe to have in code

cvmfs_test_name="Azure blob on azurite"
cvmfs_test_autofs_on_startup=false
cvmfs_test_suites="quick"

cleanup() {
  echo "*** cleaning up"
  sudo cvmfs_server rmfs -f azurite.cvmfs.io
  if [ -f azurite_pid ]; then
    sudo kill -9 $(cat azurite_pid)
  fi
}

create_azurite_config() {
  tee cvmfs_azurite.conf > /dev/null << EOF
CVMFS_S3_HOST=127.0.0.1:10000
CVMFS_S3_ACCESS_KEY=devstoreaccount1
CVMFS_S3_SECRET_KEY=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
CVMFS_S3_BUCKET=devstoreaccount1/test
CVMFS_S3_DNS_BUCKETS=false
CVMFS_S3_FLAVOR=azure
EOF
}


start_azurite() {
  echo "*** create azurite configuration"
  create_azurite_config || return 20

  echo "*** start azurite"
  azurite_command="sudo azurite --debug azurite.txt --loose --skipApiVersionCheck --location ./"
  local azurite_pid=$(run_background_service "$azurite_command")
  echo $azurite_pid > azurite_pid
  echo "*** Azurite PID is $azurite_pid"
  if [ "x$azurite_pid" = "x" ]; then
    return 10
  fi

  sleep 5

  echo "*** create the container and we make it public"
  az storage container create --name 'test' --connection-string 'DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;' --public-access blob || exit 21
}

cvmfs_run_test() {
  if ! running_on_s3; then
    echo "not running, since s3 tests are blocked"
    return 1
  fi

  trap cleanup EXIT HUP INT TERM || return $?

  echo "*** setup azurite"
  start_azurite || return 20

  echo "*** create repository"
  sudo cvmfs_server mkfs \
    -o root \
    -s cvmfs_azurite.conf \
    -w http://127.0.0.1:10000/devstoreaccount1/test  \
    azurite.cvmfs.io || return 40

  echo "*** poke around the new repository"
  sudo cvmfs_server transaction azurite.cvmfs.io || return 50
  sudo touch /cvmfs/azurite.cvmfs.io/miaomiao || return 51
  sudo cvmfs_server publish azurite.cvmfs.io || return 52
  sudo ls /cvmfs/azurite.cvmfs.io/miaomiao || return 53

  return 0
}
