at 18.09-beta 2.6 kB view raw
1import ./make-test.nix ({ pkgs, ...}: 2let 3 # Change this to test a different version of Cassandra: 4 testPackage = pkgs.cassandra; 5 cassandraCfg = 6 { enable = true; 7 listenAddress = null; 8 listenInterface = "eth1"; 9 rpcAddress = null; 10 rpcInterface = "eth1"; 11 extraConfig = 12 { start_native_transport = true; 13 seed_provider = 14 [{ class_name = "org.apache.cassandra.locator.SimpleSeedProvider"; 15 parameters = [ { seeds = "cass0"; } ]; 16 }]; 17 }; 18 package = testPackage; 19 }; 20 nodeCfg = extra: {pkgs, config, ...}: 21 { environment.systemPackages = [ testPackage ]; 22 networking.firewall.enable = false; 23 services.cassandra = cassandraCfg // extra; 24 virtualisation.memorySize = 1024; 25 }; 26in 27{ 28 name = "cassandra-ci"; 29 30 nodes = { 31 cass0 = nodeCfg {}; 32 cass1 = nodeCfg {}; 33 cass2 = nodeCfg { jvmOpts = [ "-Dcassandra.replace_address=cass1" ]; }; 34 }; 35 36 testScript = '' 37 subtest "timers exist", sub { 38 $cass0->succeed("systemctl list-timers | grep cassandra-full-repair.timer"); 39 $cass0->succeed("systemctl list-timers | grep cassandra-incremental-repair.timer"); 40 }; 41 subtest "can connect via cqlsh", sub { 42 $cass0->waitForUnit("cassandra.service"); 43 $cass0->waitUntilSucceeds("nc -z cass0 9042"); 44 $cass0->succeed("echo 'show version;' | cqlsh cass0"); 45 }; 46 subtest "nodetool is operational", sub { 47 $cass0->waitForUnit("cassandra.service"); 48 $cass0->waitUntilSucceeds("nc -z localhost 7199"); 49 $cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass0'"); 50 }; 51 subtest "bring up cluster", sub { 52 $cass1->waitForUnit("cassandra.service"); 53 $cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2"); 54 $cass0->succeed("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'"); 55 }; 56 subtest "break and fix node", sub { 57 $cass1->block; 58 $cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep -c '^DN[[:space:]]+cass1'"); 59 $cass0->succeed("nodetool status | egrep -c '^UN' | grep 1"); 60 $cass1->unblock; 61 $cass1->waitUntilSucceeds("nodetool status | egrep -c '^UN' | grep 2"); 62 $cass0->succeed("nodetool status | egrep -c '^UN' | grep 2"); 63 }; 64 subtest "replace crashed node", sub { 65 $cass1->crash; 66 $cass2->waitForUnit("cassandra.service"); 67 $cass0->waitUntilFails("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass1'"); 68 $cass0->waitUntilSucceeds("nodetool status --resolve-ip | egrep '^UN[[:space:]]+cass2'"); 69 }; 70 ''; 71})