"""Reto del laboratorio. Solo corre con solution/ presente: en la revisión del curso."""
import os
import subprocess
import time
import unittest

import labutil

SOLUTION = os.path.join(labutil.HERE, "solution")


@unittest.skipUnless(os.path.isdir(SOLUTION), "sin carpeta solution/; usen make check-reto")
class Reto(unittest.TestCase):
    def test_h4_moves_to_vlan_130(self):
        self.addCleanup(labutil.destroy, "campus")
        labutil.deploy("campus")
        lab = labutil.Lab("campus")
        time.sleep(3)
        for node in ("sw1", "sw2", "r1"):
            lab.apply_script(node, f"vlan/campus_{node}.sh")
        for node in ("sw2", "r1", "h4"):
            lab.apply_script(node, f"solution/reto_{node}.sh")
        done = subprocess.run(["python3", "check_lab.py", "--reto"], text=True,
                              capture_output=True, check=False, cwd=labutil.HERE)
        self.assertEqual(done.returncode, 0, done.stdout)
        self.assertNotIn("FALLA", done.stdout)
        # Un broadcast de h4 no llega a sw1.
        lines = lab.capture("sw1", "eth3", lambda: lab.ping("h4", "10.203.130.99"), "arp")
        self.assertEqual(lines, [])


if __name__ == "__main__":
    unittest.main()
