@Test public void testRunReadyProcess(TestContext context) throws Exception { AtomicInteger status = new AtomicInteger(); CommandBuilder builder = CommandBuilder.command("hello"); Async runningLatch = context.async(1); builder.processHandler(process -> { context.assertEquals(0, status.getAndIncrement()); runningLatch.countDown(); process.end(); }); Command command = builder.build(vertx); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, command); context.assertEquals(ExecStatus.READY, process.status()); process.run(); context.assertEquals(ExecStatus.RUNNING, process.status()); runningLatch.awaitSuccess(5000); long now = System.currentTimeMillis(); while (process.status() != ExecStatus.TERMINATED) { context.assertTrue(System.currentTimeMillis() - now < 5000); } }
@Test public void testSendEvent(TestContext context) { CountDownLatch latch = new CountDownLatch(1); commands.add(CommandBuilder.command("foo").processHandler(process -> { process.suspendHandler(v -> { process.end(0); }); latch.countDown(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Async async = context.async(); Pty pty = Pty.create(); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { async.complete(); })).run(); try { latch.await(10, TimeUnit.SECONDS); } catch (InterruptedException e) { context.fail(e); } job.suspend(); }
@Test public void testThrowExceptionInProcess(TestContext context) { commands.add(CommandBuilder.command("foo").processHandler(process -> { throw new RuntimeException(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Async async = context.async(); Pty pty = Pty.create(); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(code -> { context.assertEquals(1, job.process().exitCode()); async.complete(); })).run(); }
@Test public void testSuspendRunningProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); AtomicInteger status = new AtomicInteger(); Async suspendedLatch = context.async(2); Async runningLatch = context.async(); builder.processHandler(process -> { context.assertEquals(0, status.getAndIncrement()); process.suspendHandler(v -> suspendedLatch.complete()); runningLatch.complete(); }); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.run(); runningLatch.awaitSuccess(10000); process.suspend(v -> { context.assertEquals(ctx, Vertx.currentContext()); context.assertEquals(1, status.getAndIncrement()); suspendedLatch.countDown(); }); }
@Test public void testStdout(TestContext context) { commands.add(CommandBuilder.command("foo").processHandler(process -> { process.write("bye_world"); process.end(0); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Async async = context.async(); LinkedList<String> out = new LinkedList<>(); Pty pty = Pty.create(); pty.stdoutHandler(out::add); job.setTty(pty.slave()); job.statusUpdateHandler(CommandProcessTest.terminateHandler(code -> { context.assertEquals(0, job.process().exitCode()); context.assertEquals(Arrays.asList("bye_world"), out); async.complete(); })).run(); }
@Test public void testTerminateRunningProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); AtomicInteger status = new AtomicInteger(); Async terminatedLatch = context.async(3); Async runningLatch = context.async(); builder.processHandler(process -> { process.endHandler(v -> { context.assertEquals(0, status.getAndIncrement()); terminatedLatch.countDown(); }); runningLatch.complete(); }); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.terminatedHandler(exitCode -> terminatedLatch.countDown()); process.run(); runningLatch.awaitSuccess(10000); process.terminate(v -> { context.assertEquals(ctx, Vertx.currentContext()); context.assertEquals(1, status.getAndIncrement()); terminatedLatch.countDown(); }); }
@Test public void testStdin(TestContext context) { CountDownLatch latch = new CountDownLatch(1); commands.add(CommandBuilder.command("foo").processHandler(process -> { process.stdinHandler(data -> { context.assertEquals("hello_world", data); process.end(0); }); latch.countDown(); })); Shell shell = server.createShell(); Job job = shell.createJob(CliToken.tokenize("foo")); Async async = context.async(); Pty pty = Pty.create(); job.setTty(pty.slave()); job.statusUpdateHandler(CommandProcessTest.terminateHandler(code -> { context.assertEquals(0, job.process().exitCode()); async.complete(); })).run(); try { latch.await(10, TimeUnit.SECONDS); } catch (InterruptedException e) { context.fail(e); } pty.write("hello_world"); }
@Test public void testResumeSuspendedProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); AtomicInteger status = new AtomicInteger(); Async runningLatch = context.async(); Async suspendedLatch = context.async(); Async resumedLatch = context.async(2); builder.processHandler(process -> { process.suspendHandler(v -> { suspendedLatch.complete(); }); process.resumeHandler(v -> { context.assertEquals(0, status.getAndIncrement()); resumedLatch.countDown(); }); runningLatch.complete(); }); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.run(); runningLatch.awaitSuccess(10000); process.suspend(); suspendedLatch.awaitSuccess(10000); process.resume(v -> { context.assertEquals(ctx, Vertx.currentContext()); context.assertEquals(1, status.getAndIncrement()); resumedLatch.countDown(); }); }
@Test public void testClose(TestContext context) { Async endLatch = context.async(2); Async runningLatch = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { process.endHandler(v -> endLatch.countDown()); runningLatch.countDown(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Pty pty = Pty.create(); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { endLatch.countDown(); })).run(); runningLatch.awaitSuccess(10000); shell.close(); endLatch.awaitSuccess(10000); context.assertEquals(0, shell.jobController().jobs().size()); }
}); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.run(); runningLatch.awaitSuccess(10000);
@Test public void testRun(TestContext context) { commands.add(CommandBuilder.command("foo").processHandler(process -> { process.end(3); })); Shell shell = server.createShell(); Job job = shell.createJob(CliToken.tokenize("foo")); Async async = context.async(); job.setTty(Pty.create().slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(code -> { context.assertEquals(3, job.process().exitCode()); async.complete(); })).run(); }
@Test public void testEndRunningProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); Async endedHandler = context.async(); builder.processHandler(process -> { process.endHandler(v -> endedHandler.complete()); process.end(0); }); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); Async terminatedHandler = context.async(); process.terminatedHandler(exitCode -> { context.assertEquals(ctx, Vertx.currentContext()); terminatedHandler.complete(); }); process.run(); }
@Test public void testSessionGet(TestContext context) throws Exception { Async async = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { Session session = process.session(); context.assertNotNull(session); context.assertEquals("the_value", session.get("the_key")); process.end(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Session session = new SessionImpl(); session.put("the_key", "the_value"); Pty pty = Pty.create(); job.setSession(session).setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { context.assertEquals(0, job.process().exitCode()); async.complete(); })).run(); }
}); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.terminatedHandler(exitCode -> { context.assertEquals(ctx, Vertx.currentContext());
@Test public void testSessionPut(TestContext context) throws Exception { Async async = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { Session session = process.session(); context.assertNotNull(session); context.assertNull(session.get("the_key")); session.put("the_key", "the_value"); process.end(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Pty pty = Pty.create(); Session session = new SessionImpl(); job.setSession(session).setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { context.assertEquals(0, job.process().exitCode()); context.assertEquals("the_value", session.get("the_key")); async.complete(); })).run(); }
@Test public void testTerminateReadyProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); Async terminatedLatch = context.async(2); builder.processHandler(process -> context.fail()); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); process.terminatedHandler(exitCode -> { context.assertEquals(ctx, Vertx.currentContext()); terminatedLatch.countDown(); }); process.terminate(v -> { context.assertEquals(ctx, Vertx.currentContext()); terminatedLatch.countDown(); }); }
@Test public void testSessionRemove(TestContext context) throws Exception { Async async = context.async(); commands.add(CommandBuilder.command("foo").processHandler(process -> { Session session = process.session(); context.assertNotNull(session); context.assertEquals("the_value", session.remove("the_key")); process.end(); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Pty pty = Pty.create(); Session session = new SessionImpl(); session.put("the_key", "the_value"); job.setSession(session).setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { context.assertEquals(0, job.process().exitCode()); context.assertNull(session.get("the_key")); async.complete(); })).run(); }
@Test public void testEndSuspendedProcess(TestContext context) throws Exception { CommandBuilder builder = CommandBuilder.command("hello"); Async runningLatch = context.async(); Async endedHandler = context.async(); builder.processHandler(process -> { process.suspendHandler(v -> { process.end(0); }); process.endHandler(v -> endedHandler.complete()); runningLatch.complete(); }); Context ctx = vertx.getOrCreateContext(); Process process = createProcessInContext(ctx, builder.build(vertx)); Async terminatedHandler = context.async(); process.terminatedHandler(exitCode -> { context.assertEquals(ctx, Vertx.currentContext()); terminatedHandler.complete(); }); process.run(); runningLatch.awaitSuccess(10000); process.suspend(); }
@Test public void testResize(TestContext context) { commands.add(CommandBuilder.command("foo").processHandler(process -> { context.assertEquals(20, process.width()); context.assertEquals(10, process.height()); process.resizehandler(v -> { context.assertEquals(25, process.width()); context.assertEquals(15, process.height()); process.end(0); }); process.write("ping"); })); Shell shell = server.createShell(); Job job = shell.createJob("foo"); Pty pty = Pty.create(); Async async = context.async(); pty.setSize(20, 10); pty.stdoutHandler(text -> { pty.setSize(25, 15); }); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(status -> { async.complete(); })).run(); }
job.suspend(); }); job.setTty(pty.slave()).statusUpdateHandler(CommandProcessTest.terminateHandler(code -> { testContext.assertTrue(shellCtx == Vertx.currentContext()); async.complete();