1import ./make-test.nix ({ pkgs, ...}:
2let
3 user = "cassandra";
4 nodeCfg = nodes: selfIP: cassandraOpts:
5 {
6 services.cassandra = {
7 enable = true;
8 listenAddress = selfIP;
9 rpcAddress = "0.0.0.0";
10 seeds = [ "192.168.1.1" ];
11 package = pkgs.cassandra_2_0;
12 jre = pkgs.openjdk;
13 clusterName = "ci ahoy";
14 authenticator = "PasswordAuthenticator";
15 authorizer = "CassandraAuthorizer";
16 user = user;
17 } // cassandraOpts;
18 nixpkgs.config.allowUnfree = true;
19 virtualisation.memorySize = 1024;
20 };
21
22in
23{
24 name = "cassandra-ci";
25
26 nodes = {
27 cass0 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.1" {};
28 cass1 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.2" {};
29 cass2 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.3" {
30 extraParams = [
31 ''JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=192.168.1.2"''
32 ];
33 listenAddress = "192.168.1.3";
34 };
35 };
36
37 testScript = ''
38 subtest "start seed", sub {
39 $cass0->waitForUnit("cassandra.service");
40 $cass0->waitForOpenPort(9160);
41 $cass0->execute("echo show version | cqlsh localhost -u cassandra -p cassandra");
42 sleep 2;
43 $cass0->succeed("echo show version | cqlsh localhost -u cassandra -p cassandra");
44 $cass1->start;
45 };
46 subtest "cassandra user/group", sub {
47 $cass0->succeed("id \"${user}\" >/dev/null");
48 $cass1->succeed("id \"${user}\" >/dev/null");
49 };
50 subtest "bring up cassandra cluster", sub {
51 $cass1->waitForUnit("cassandra.service");
52 $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2");
53 };
54 subtest "break and fix node", sub {
55 $cass0->block;
56 $cass0->waitUntilSucceeds("nodetool status | grep -c DN | grep 1");
57 $cass0->unblock;
58 $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2");
59 };
60 subtest "replace crashed node", sub {
61 $cass1->crash;
62 $cass2->start;
63 $cass2->waitForUnit("cassandra.service");
64 $cass0->waitUntilFails("nodetool status | grep UN | grep 192.168.1.2");
65 $cass0->waitUntilSucceeds("nodetool status | grep UN | grep 192.168.1.3");
66 };
67 '';
68})