summaryrefslogtreecommitdiffstats
path: root/nixos/tests/cassandra.nix
diff options
context:
space:
mode:
authorThomas Bach <hacking@babibo.de>2017-11-07 14:11:56 +0100
committerTim Steinbach <NeQuissimus@users.noreply.github.com>2018-08-07 14:48:43 +0000
commit31e11bdd60fd164bc7f52c0a4f59024382a58851 (patch)
tree05f5eae7c537b7a71ac4f57a61d06fcd4ec58522 /nixos/tests/cassandra.nix
parent291018b34e6712037db5c07cd735ca6cccf936fc (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.nix89
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'");
};
'';
})