@Before
    public void start_tunnel() throws Exception {

        props.load(new FileInputStream(props_file));

        try {
            if (tunnel_main != null) return;
            write_tunnel_config();
            tunnel_main = new Main(working_directory, new String[]{config_file.getAbsolutePath()});
            tunnel_main.start();
            Thread.sleep(2000);
        } catch (org.json.simple.parser.ParseException t) {
            System.err.println(t.getClass().getName());
            t.printStackTrace(System.err);
            System.err.flush();
            Assert.fail("Failed to start TroubleTunnel with " + "config file: '" + config_file.getAbsolutePath() + "', which was generated from template: '" + template_file.getAbsolutePath() + "");
        }
    }