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");
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  '';
							 | 
						||
| 
								 | 
							
								})
							 |