The module will configure a Cassandra server with common options being tweakable. Included is also a test which will spin up 3 nodes and verify that the cluster can be formed, broken, and repaired.
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
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;
 | 
						|
      virtualisation.memorySize = 1024;
 | 
						|
    };
 | 
						|
 | 
						|
in
 | 
						|
{
 | 
						|
  name = "cassandra-ci";
 | 
						|
 | 
						|
  nodes = {
 | 
						|
    cass0 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.1" {};
 | 
						|
    cass1 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.2" {};
 | 
						|
    cass2 = {pkgs, config, nodes, ...}: nodeCfg nodes "192.168.1.3" {
 | 
						|
      extraParams = [
 | 
						|
        ''JVM_OPTS="$JVM_OPTS -Dcassandra.replace_address=192.168.1.2"''
 | 
						|
      ];
 | 
						|
      listenAddress = "192.168.1.3";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  testScript = ''
 | 
						|
    subtest "start seed", 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;
 | 
						|
    };
 | 
						|
    subtest "cassandra user/group", sub {
 | 
						|
      $cass0->succeed("id \"${user}\" >/dev/null");
 | 
						|
      $cass1->succeed("id \"${user}\" >/dev/null");
 | 
						|
    };
 | 
						|
    subtest "bring up cassandra cluster", sub {
 | 
						|
      $cass1->waitForUnit("cassandra.service");
 | 
						|
      $cass0->waitUntilSucceeds("nodetool status | grep -c UN  | grep 2");
 | 
						|
    };
 | 
						|
    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");
 | 
						|
    };
 | 
						|
    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");
 | 
						|
    };
 | 
						|
  '';
 | 
						|
})
 |