#!/bin/sh -eux

PASS=0

cleanup() {
    [ "$PASS" = "1" ] || (echo FAIL && exit 1)
}

trap cleanup EXIT HUP INT TERM

LXCFSDIR=${LXCFSDIR:-/var/lib/lxcfs}

if ! mountpoint -q ${LXCFSDIR}; then
    echo "lxcfs isn't mounted on ${LXCFSDIR}"
    exit 1
fi

[ ! -d /sys/fs/cgroup/memory ] && exit 0
[ ! -d /sys/fs/cgroup/cpuset ] && exit 0

initcpuset=`awk -F: '/cpuset/ { print $3 }' /proc/1/cgroup`
initmemory=`awk -F: '/memory/ { print $3 }' /proc/1/cgroup`

cpupath=/sys/fs/cgroup/cpuset/${initcpuset}
mempath=/sys/fs/cgroup/memory/${initmemory}

rmdir ${cpupath}/lxcfs_test_proc || true
rmdir ${mempath}/lxcfs_test_proc || true
mkdir ${cpupath}/lxcfs_test_proc
mkdir ${mempath}/lxcfs_test_proc

echo 1 > ${cpupath}/lxcfs_test_proc/tasks
echo 1 > ${mempath}/lxcfs_test_proc/tasks

echo $((64*1024*1024)) > ${mempath}/lxcfs_test_proc/memory.limit_in_bytes
echo 0 > ${cpupath}/lxcfs_test_proc/cpuset.cpus

# Test uptime
[ "$(cat ${LXCFSDIR}/proc/uptime)" = "0.00 0.00" ]

# Test cpuinfo
[ "$(grep "^processor" ${LXCFSDIR}/proc/cpuinfo | wc -l)" = "1" ]
grep -q "^processor.*0$" ${LXCFSDIR}/proc/cpuinfo

# Test stat
[ "$(grep "^cpu" ${LXCFSDIR}/proc/stat | wc -l)" = "2" ]

# Test meminfo
grep -q "^MemTotal.*65536 kB$" ${LXCFSDIR}/proc/meminfo

PASS=1
echo PASS
