I admit the code is confusing and too short, sorry.

What you want is just exactly what I do.

I start a test elasticsearch test cluster by doing this


    @BeforeMethod
    public void create() throws Exception {
        startNode("1");
        NodesInfoRequest nodesInfoRequest = new
NodesInfoRequest().transport(true);
        NodesInfoResponse response =
client("1").admin().cluster().nodesInfo(nodesInfoRequest).actionGet();
        InetSocketTransportAddress address =
(InetSocketTransportAddress)response.iterator().next()
                        .getTransport().getAddress().publishAddress();
        PORT = address.address().getPort();
        addresses.put("1", address);
       ....
    }

   ...

    protected URI getAddress() {
        return URI.create("es://localhost:" + PORT + "?es.cluster.name=" +
CLUSTER);
    }


 and now I can tell a TransportClient to use the server. For this I keep a
map of adresses of the server nodes in form of an URI.

Look at this code, which is trivially extending the abstract test code

    @Test
    public void testBulkClient() {
        final BulkClient es = new BulkClient()
                .newClient(getAddress());
        es.shutdown();
        if (es.hasErrors()) {
            logger.error("error", es.getThrowable());
        }
        assertFalse(es.hasErrors());
    }

I use "getAddress()" for the address of the elasticseach test cluster that
is currently running, and the "BulkClient" (which is my custom client
wrapping a TransportClient together with a BulkProcessor) is connecting to
the embedded test cluster with "newClient(...)". In this method I build a
Settings object that contains all the required info for the TransportClient
to connect.

The Setting object is something like

settingsBuilder()
                .put("cluster.name", findClusterName(uri))
                .put("network.server", false)
                .put("node.client", true)
                .put("client.transport.sniff", false)
                .put("client.transport.ignore_cluster_name", false)
                .put("client.transport.ping_timeout", "30s")
                .put("client.transport.nodes_sampler_interval", "30s")
                .build();

where "findClusterName()" is a routine to get the cluster name from the
parameters of the test.

The @AfterMethod shuts everything down, the "BulkClient" and the test
cluster.

If i want more nodes, I add "startNode("2")", "startNode("3")", to the
@BeforeMethod

Does this help?

Jörg

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CAKdsXoEL2w5kJby8PddkvHRdZNtAima3E1vAaEYOW%3D3mQN2_og%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to