Package com.github.dreamhead.moco.runner

Source Code of com.github.dreamhead.moco.runner.ShutdownMonitorRunnerTest

package com.github.dreamhead.moco.runner;

import com.github.dreamhead.moco.bootstrap.tasks.ShutdownTask;
import org.apache.http.conn.HttpHostConnectException;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;

import static com.github.dreamhead.moco.bootstrap.arg.HttpArgs.httpArgs;
import static com.github.dreamhead.moco.helper.RemoteTestUtils.port;
import static com.github.dreamhead.moco.helper.RemoteTestUtils.root;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;

public class ShutdownMonitorRunnerTest extends AbstractRunnerTest {
    private final String SHUTDOWN_MOCO_KEY = "_SHUTDOWN_MOCO_KEY";
    private final int SHUTDOWN_PORT = 9527;

    @Before
    public void setup() {
        RunnerFactory factory = new RunnerFactory(SHUTDOWN_MOCO_KEY);
        runner = factory.createRunner(httpArgs().withPort(port()).withShutdownPort(SHUTDOWN_PORT).withConfigurationFile("src/test/resources/foo.json").build());
    }

    @Test(expected = HttpHostConnectException.class)
    public void should_shutdown_runner_by_socket() throws IOException {
        runner.run();

        try {
            assertThat(helper.get(root()), is("foo"));
        } catch (HttpHostConnectException e) {
            fail(e.getMessage());
        }

        shutdownMoco(SHUTDOWN_PORT, SHUTDOWN_MOCO_KEY);
        waitChangeHappens();
        helper.get(root());
    }

    @Test(expected = ConnectException.class)
    public void should_stop_runner_directly() throws IOException {
        runner.run();

        try {
            assertThat(helper.get(root()), is("foo"));
        } catch (HttpHostConnectException e) {
            fail(e.getMessage());
        }

        runner.stop();

        shutdownMoco(SHUTDOWN_PORT, SHUTDOWN_MOCO_KEY);
    }

    @Test(expected = HttpHostConnectException.class)
    public void should_stop_runner_via_shutdown_task() throws IOException {
        runner.run();

        try {
            assertThat(helper.get(root()), is("foo"));
        } catch (HttpHostConnectException e) {
            fail(e.getMessage());
        }

        ShutdownTask task = new ShutdownTask(SHUTDOWN_MOCO_KEY);
        task.run(new String[]{"-s", Integer.toString(SHUTDOWN_PORT)});

        waitChangeHappens();
        helper.get(root());
    }

    private void shutdownMoco(int shutdownPort, String shutdownMocoKey) throws IOException {
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), shutdownPort);
        socket.setSoLinger(false, 0);

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write((shutdownMocoKey + "\r\n").getBytes());

        outputStream.flush();
        socket.close();
    }

    @Test(expected = HttpHostConnectException.class)
    public void should_shutdown_with_shutdown_port() throws IOException {
        RunnerFactory factory = new RunnerFactory(SHUTDOWN_MOCO_KEY);
        runner = factory.createRunner(httpArgs().withPort(port()).withConfigurationFile("src/test/resources/foo.json").build());
        runner.run();

        try {
            assertThat(helper.get(root()), is("foo"));
        } catch (HttpHostConnectException e) {
            fail(e.getMessage());
        }

        ShutdownRunner shutdownRunner = (ShutdownRunner) runner;
        int port = shutdownRunner.shutdownPort();
        shutdownMoco(port, SHUTDOWN_MOCO_KEY);
        waitChangeHappens();
        helper.get(root());
    }
}
TOP

Related Classes of com.github.dreamhead.moco.runner.ShutdownMonitorRunnerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.