diff options
author | Thomas Bach <hacking@babibo.de> | 2017-11-07 14:11:56 +0100 |
---|---|---|
committer | Tim Steinbach <NeQuissimus@users.noreply.github.com> | 2018-08-07 14:48:43 +0000 |
commit | 31e11bdd60fd164bc7f52c0a4f59024382a58851 (patch) | |
tree | 05f5eae7c537b7a71ac4f57a61d06fcd4ec58522 /nixos/tests/cassandra.nix | |
parent | 291018b34e6712037db5c07cd735ca6cccf936fc (diff) |
cassandra: rewrote service from scratch
Adds a replacement for the previously broken
`services.database.cassandra` with tests for a multi-node setup.
Diffstat (limited to 'nixos/tests/cassandra.nix')
-rw-r--r-- | nixos/tests/cassandra.nix | 89 |
1 files changed, 46 insertions, 43 deletions
diff --git a/nixos/tests/cassandra.nix b/nixos/tests/cassandra.nix index ca8f35ef3bff..60d0c6d76068 100644 --- a/nixos/tests/cassandra.nix +++ b/nixos/tests/cassandra.nix @@ -1,68 +1,71 @@ import ./make-test.nix ({ pkgs, ...}: let - user = "cassandra"; - nodeCfg = nodes: selfIP: cassandraOpts: - { - services.cassandra = { - enable = true; - listenAddress = selfIP; - rpcAddress = "0.0.0.0"; - seeds = [ "192.168.1.1" ]; - package = pkgs.cassandra_2_0; - jre = pkgs.openjdk; - clusterName = "ci ahoy"; - authenticator = "PasswordAuthenticator"; - authorizer = "CassandraAuthorizer"; - user = user; - } // cassandraOpts; - nixpkgs.config.allowUnfree = true; + # Change this to test a different version of Cassandra: + testPackage = pkgs.cassandra; + cassandraCfg = + { enable = true; + listenAddress = null; + listenInterface = "eth1"; + rpcAddress = null; + rpcInterface = "eth1"; + extraConfig = + { start_native_transport = true; + seed_provider = + [{ class_name = "org.apache.cassandra.locator.SimpleSeedProvider"; + parameters = [ { seeds = "cass0"; } ]; + }]; + }; + package = testPackage; + }; + nodeCfg = extra: {pkgs, config, ...}: + { environment.systemPackages = [ testPackage ]; + networking.firewall.enable = false; + services.cassandra = cassandraCfg // extra; virtualisation.memorySize = 1024; }; - in { name = "cassandra-ci"; nodes = { - cass0 = { nodes, ... }: nodeCfg nodes "192.168.1.1" {}; - cass1 = { nodes, ... }: nodeCfg nodes "192.168.1.2" {}; - cass2 = { nodes, ... }: nodeCfg nodes "192.168.1.3" { - extraParams = [ - ''JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=192.168.1.2"'' - ]; - listenAddress = "192.168.1.3"; - }; + cass0 = nodeCfg {}; + cass1 = nodeCfg {}; + cass2 = nodeCfg { jvmOpts = [ "-Dcassandra.replace_address=cass1" ]; }; }; testScript = '' - subtest "start seed", sub { + subtest "timers exist", sub { + $cass0->succeed("systemctl list-timers | grep cassandra-full-repair.timer"); + $cass0->succeed("systemctl list-timers | grep cassandra-incremental-repair.timer"); + }; + subtest "can connect via cqlsh", sub { $cass0->waitForUnit("cassandra.service"); - $cass0->waitForOpenPort(9160); - $cass0->execute("echo show version | cqlsh localhost -u cassandra -p cassandra"); - sleep 2; - $cass0->succeed("echo show version | cqlsh localhost -u cassandra -p cassandra"); - $cass1->start; + $cass0->waitUntilSucceeds("nc -z cass0 9042"); + $cass0->succeed("echo 'show version;' | cqlsh cass0"); }; - subtest "cassandra user/group", sub { - $cass0->succeed("id \"${user}\" >/dev/null"); - $cass1->succeed("id \"${user}\" >/dev/null"); + subtest "nodetool is operational", sub { + $cass0->waitForUnit("cassandra.service"); + $cass0->waitUntilSucceeds("nc -z localhost 7199"); + $cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass0'"); }; - subtest "bring up cassandra cluster", sub { + subtest "bring up cluster", sub { $cass1->waitForUnit("cassandra.service"); - $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2"); + $cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2"); + $cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'"); }; subtest "break and fix node", sub { - $cass0->block; - $cass0->waitUntilSucceeds("nodetool status | grep -c DN | grep 1"); - $cass0->unblock; - $cass0->waitUntilSucceeds("nodetool status | grep -c UN | grep 2"); + $cass1->block; + $cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep -c '^DN[[:space:]]+cass1'"); + $cass0->succeed("nodetool status | egrep -c '^UN' | grep 1"); + $cass1->unblock; + $cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2"); + $cass0->succeed("nodetool status | egrep -c '^UN' | grep 2"); }; subtest "replace crashed node", sub { $cass1->crash; - $cass2->start; $cass2->waitForUnit("cassandra.service"); - $cass0->waitUntilFails("nodetool status | grep UN | grep 192.168.1.2"); - $cass0->waitUntilSucceeds("nodetool status | grep UN | grep 192.168.1.3"); + $cass0->waitUntilFails("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'"); + $cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass2'"); }; ''; }) |