#!/usr/bin/python3 -E
import sys
import selinux


verbose = 0
errors = 0


def untrans(trans, val):
    global errors, verbose
    (rc, raw) = selinux.selinux_trans_to_raw_context(trans)
    if raw != val:
        print("untrans: '%s' -> '%s' != '%s' FAILED" % (trans, raw, val))
        errors += 1
    else:
        if verbose:
            print("untrans: '%s' -> '%s' == '%s' SUCCESS" % (trans, raw, val))


def trans(raw, val):
    global errors, verbose
    (rc, trans) = selinux.selinux_raw_to_trans_context(raw)
    if trans != val:
        print("trans: '%s' -> '%s' != '%s' FAILED" % (raw, trans, val))
        errors += 1
    else:
        if verbose:
            print("trans: '%s' -> '%s' == '%s' SUCCESS" % (raw, trans, val))


if len(sys.argv) > 1 and sys.argv[1] == "-v":
    verbose = 1

for arg in sys.argv[1:]:
    f = open(arg, 'r')
    for line in f:
        if line.startswith('#'):
            continue
        if not line.strip():
            continue
        line = line.rstrip('\n')
        if line.find("==") != -1:
            t, r = line.split("==")
            untrans("a:b:c:" + t, "a:b:c:" + r)
            trans("a:b:c:" + r, "a:b:c:" + t)
        else:
            t, r = line.split("=")
            untrans("a:b:c:" + t, "a:b:c:" + r)
    f.close()

s = "s"
if errors == 1:
    s = ""
print("mlstrans-test done with %d error%s" % (errors, s))

sys.exit(errors)
