#!/bin/bash

cvmfs_test_name="Post Mortem Stacktrace Retrieval"
cvmfs_test_suites="quick"

cvmfs_run_test() {
  logfile=$1

  local repo=lhcb.cern.ch
  local stacktrace_path="$(get_cvmfs_cachedir $repo)/stacktrace.${repo}"

  # make sure that there is no stack trace file present
  sudo rm -f $stacktrace_path > /dev/null

  # mount a repository
  cvmfs_mount $repo || return 1
  ls /cvmfs/${repo} || return 2

  # find out the PID of the mounted cvmfs process
  local pid=$(sudo cvmfs_talk -i $repo pid)

  # kill this cvmfs2 process
  sudo kill -s SIGSEGV $pid || return 3
  sleep 20

  # check if we got a stacktrace of a decent length
  sudo [ -f $stacktrace_path ] || return 4
  [ $(sudo cat $stacktrace_path | wc -l) -gt 20 ] || return 5
  if ! sudo cat $stacktrace_path | grep '(gdb)' > /dev/null 2>&1 && ! sudo cat $stacktrace_path | grep '(lldb)' > /dev/null 2>&1; then
  	return 6
  fi
  sudo cat $stacktrace_path

  # clean up the broken mount point (should fail!)
  # CernVM-FS should umount the broken mount point on its own
  sudo umount -l /cvmfs/${repo} && return 7

  return 0
}

