aboutsummaryrefslogtreecommitdiffstats
path: root/zkfacade/src/test/java/com/yahoo/vespa/curator/CuratorTest.java
blob: 52324e94273d47fd2bc95115b99dc13c820d6265 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.curator;

import com.yahoo.cloud.config.CuratorConfig;
import com.yahoo.net.HostName;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
import org.junit.Test;

import java.util.Optional;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

/**
 * Very simple testing of setting up curator
 *
 * @author Ulf Lilleengen
 */
public class CuratorTest {

    private static final String localhost = HostName.getLocalhost();

    private static final int port1 = 1;
    private static final int port2 = 2;
    private static final String spec1 = localhost + ":" + port1;
    private static final String spec2 = localhost + ":" + port2;

    @Test
    public void require_curator_is_created_from_config() {
        try (Curator curator = createCurator(createTestConfig())) {
            assertEquals(spec1 + "," + spec2, curator.zooKeeperEnsembleConnectionSpec());
            assertEquals(2, curator.zooKeeperEnsembleCount());
        }
    }

    @Test
    public void require_that_server_count_is_correct() {
        CuratorConfig.Builder builder = new CuratorConfig.Builder();
        builder.server(createZKBuilder(localhost, port1));
        try (Curator curator = createCurator(new CuratorConfig(builder))) {
            assertEquals(1, curator.zooKeeperEnsembleCount());
        }
    }

    @Test
    public void require_that_write_fails_if_data_is_more_than_jute_max_buffer() {
        CuratorConfig.Builder builder = new CuratorConfig.Builder();
        builder.server(createZKBuilder(localhost, port1));
        try (Curator curator = createCurator(new CuratorConfig(builder), 1)) {
            try {
                curator.set(Path.createRoot().append("foo"), Utf8.toBytes("more than 1 byte"));
                fail("Did not fail when writing more than juteMaxBuffer bytes");
            } catch (IllegalArgumentException e) {
                assertEquals("Cannot not set data at /foo, 16 bytes is too much, max number of bytes allowed per node is 1",
                             e.getMessage());
            }
        }
    }

    private CuratorConfig createTestConfig() {
        CuratorConfig.Builder builder = new CuratorConfig.Builder();
        builder.server(createZKBuilder(localhost, port1));
        builder.server(createZKBuilder(localhost, port2));
        return new CuratorConfig(builder);
    }

    private CuratorConfig.Server.Builder createZKBuilder(String hostname, int port) {
        CuratorConfig.Server.Builder zkBuilder = new CuratorConfig.Server.Builder();
        zkBuilder.hostname(hostname);
        zkBuilder.port(port);
        return zkBuilder;
    }

    private Curator createCurator(CuratorConfig curatorConfig)  {
        return createCurator(curatorConfig, Curator.defaultJuteMaxBuffer);
    }

    private Curator createCurator(CuratorConfig curatorConfig, long juteMaxBuffer)  {
        return new Curator(ConnectionSpec.create(curatorConfig.server(),
                                                 CuratorConfig.Server::hostname,
                                                 CuratorConfig.Server::port,
                                                 curatorConfig.zookeeperLocalhostAffinity()),
                           Optional.empty(),
                           juteMaxBuffer,
                           Curator.DEFAULT_ZK_SESSION_TIMEOUT);
    }

}