"""Unit tests: template_esh""" import os FILE_MODE = 0o754 LOCAL_CLASS = "esh_Test+@-!^Class" LOCAL_SYSTEM = "esh_Test+@-!^System" LOCAL_HOST = "esh_Test+@-!^Host" LOCAL_USER = "esh_Test+@-!^User" LOCAL_DISTRO = "esh_Test+@-!^Distro" TEMPLATE = f''' start of template esh class = ><%=$YADM_CLASS%>< esh os = ><%=$YADM_OS%>< esh host = ><%=$YADM_HOSTNAME%>< esh user = ><%=$YADM_USER%>< esh distro = ><%=$YADM_DISTRO%>< <% if [ "$YADM_CLASS" = "wrongclass1" ]; then -%> wrong class 1 <% fi -%> <% if [ "$YADM_CLASS" = "{LOCAL_CLASS}" ]; then -%> Included section for class = <%=$YADM_CLASS%> (<%=$YADM_CLASS%> repeated) <% fi -%> <% if [ "$YADM_CLASS" = "wrongclass2" ]; then -%> wrong class 2 <% fi -%> <% if [ "$YADM_OS" = "wrongos1" ]; then -%> wrong os 1 <% fi -%> <% if [ "$YADM_OS" = "{LOCAL_SYSTEM}" ]; then -%> Included section for os = <%=$YADM_OS%> (<%=$YADM_OS%> repeated) <% fi -%> <% if [ "$YADM_OS" = "wrongos2" ]; then -%> wrong os 2 <% fi -%> <% if [ "$YADM_HOSTNAME" = "wronghost1" ]; then -%> wrong host 1 <% fi -%> <% if [ "$YADM_HOSTNAME" = "{LOCAL_HOST}" ]; then -%> Included section for host = <%=$YADM_HOSTNAME%> (<%=$YADM_HOSTNAME%> again) <% fi -%> <% if [ "$YADM_HOSTNAME" = "wronghost2" ]; then -%> wrong host 2 <% fi -%> <% if [ "$YADM_USER" = "wronguser1" ]; then -%> wrong user 1 <% fi -%> <% if [ "$YADM_USER" = "{LOCAL_USER}" ]; then -%> Included section for user = <%=$YADM_USER%> (<%=$YADM_USER%> repeated) <% fi -%> <% if [ "$YADM_USER" = "wronguser2" ]; then -%> wrong user 2 <% fi -%> <% if [ "$YADM_DISTRO" = "wrongdistro1" ]; then -%> wrong distro 1 <% fi -%> <% if [ "$YADM_DISTRO" = "{LOCAL_DISTRO}" ]; then -%> Included section for distro = <%=$YADM_DISTRO%> (<%=$YADM_DISTRO%> again) <% fi -%> <% if [ "$YADM_DISTRO" = "wrongdistro2" ]; then -%> wrong distro 2 <% fi -%> end of template ''' EXPECTED = f''' start of template esh class = >{LOCAL_CLASS}< esh os = >{LOCAL_SYSTEM}< esh host = >{LOCAL_HOST}< esh user = >{LOCAL_USER}< esh distro = >{LOCAL_DISTRO}< Included section for class = {LOCAL_CLASS} ({LOCAL_CLASS} repeated) Included section for os = {LOCAL_SYSTEM} ({LOCAL_SYSTEM} repeated) Included section for host = {LOCAL_HOST} ({LOCAL_HOST} again) Included section for user = {LOCAL_USER} ({LOCAL_USER} repeated) Included section for distro = {LOCAL_DISTRO} ({LOCAL_DISTRO} again) end of template ''' def test_template_esh(runner, yadm, tmpdir): """Test processing by esh""" input_file = tmpdir.join('input') input_file.write(TEMPLATE, ensure=True) input_file.chmod(FILE_MODE) output_file = tmpdir.join('output') # ensure overwrite works when file exists as read-only (there is some # special processing when this is encountered because some environments do # not properly overwrite read-only files) output_file.write('existing') output_file.chmod(0o400) script = f""" YADM_TEST=1 source {yadm} local_class="{LOCAL_CLASS}" local_system="{LOCAL_SYSTEM}" local_host="{LOCAL_HOST}" local_user="{LOCAL_USER}" local_distro="{LOCAL_DISTRO}" template_esh "{input_file}" "{output_file}" """ run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' assert output_file.read().strip() == str(EXPECTED).strip() assert os.stat(output_file).st_mode == os.stat(input_file).st_mode def test_source(runner, yadm, tmpdir): """Test YADM_SOURCE""" input_file = tmpdir.join('input') input_file.write('<%= $YADM_SOURCE %>', ensure=True) input_file.chmod(FILE_MODE) output_file = tmpdir.join('output') script = f""" YADM_TEST=1 source {yadm} template_esh "{input_file}" "{output_file}" """ run = runner(command=['bash'], inp=script) assert run.success assert run.err == '' assert output_file.read().strip() == str(input_file) assert os.stat(output_file).st_mode == os.stat(input_file).st_mode