#!/usr/bin/env python3

import sys
import os
import subprocess
import tempfile

yard = "external_yard"

if sys.argv[1] == "--post-start":
	'''
	Create external cgroup yard to be passed to CRIU via --cgroup-yard
	'''
	os.mkdir(yard)
	subprocess.check_call(["mount", "-t", "tmpfs", "zdtm_yard", yard])
	with open("/proc/self/cgroup") as f:
		for line in f:
			cgr = line.split(":")[1]

			if cgr == "":
				cgr = "unified"

			if cgr.startswith("name="):
				ctrl = cgr[len("name="):]
				opts = "none," + cgr
			else:
				ctrl = cgr
				opts = cgr

			os.mkdir(yard + "/" + ctrl)
			if cgr == "unified":
				subprocess.check_call(["mount", "-t", "cgroup2", "none", yard + "/" + ctrl])
			else:
				subprocess.check_call(["mount", "-t", "cgroup", "none", yard + "/" + ctrl, "-o", opts])

if sys.argv[1] in ["--pre-restore", "--clean"]:
	'''
	Clean up the leftover cgroups created by the test
	'''
	tname = tempfile.mkdtemp()
	subprocess.call(["mount", "-t", "cgroup", "none", tname, "-o", "none,name=zdtmtst"])

	for cg in [os.path.join(tname, "subcg00", "subsubcg"),
			os.path.join(tname, "subcg00")]:
		if os.access(cg, os.F_OK):
			os.rmdir(cg)

	subprocess.call(["umount", tname])
	os.rmdir(tname)

if sys.argv[1] == "--clean":
	if os.access(yard, os.F_OK):
		subprocess.call(["umount", "-l", yard])
		os.rmdir(yard)
