| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  | import ./make-test.nix ({ pkgs, ...} : rec { | 
					
						
							|  |  |  |   name = "mesos"; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |     maintainers = [ offline kamilchm cstrahan ]; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2014-12-11 23:32:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |   nodes = { | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |     master = { ... }: { | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       networking.firewall.enable = false; | 
					
						
							|  |  |  |       services.zookeeper.enable = true; | 
					
						
							|  |  |  |       services.mesos.master = { | 
					
						
							|  |  |  |           enable = true; | 
					
						
							|  |  |  |           zk = "zk://master:2181/mesos"; | 
					
						
							| 
									
										
										
										
											2014-12-11 23:32:37 +01:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |     slave = { ... }: { | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       networking.firewall.enable = false; | 
					
						
							|  |  |  |       networking.nat.enable = true; | 
					
						
							|  |  |  |       virtualisation.docker.enable = true; | 
					
						
							|  |  |  |       services.mesos = { | 
					
						
							|  |  |  |         slave = { | 
					
						
							|  |  |  |           enable = true; | 
					
						
							|  |  |  |           master = "master:5050"; | 
					
						
							|  |  |  |           dockerRegistry = registry; | 
					
						
							|  |  |  |           executorEnvironmentVariables = { | 
					
						
							|  |  |  |             PATH = "/run/current-system/sw/bin"; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2014-12-11 23:32:37 +01:00
										 |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |   simpleDocker = pkgs.dockerTools.buildImage { | 
					
						
							|  |  |  |     name = "echo"; | 
					
						
							| 
									
										
										
										
											2018-08-29 19:38:00 +02:00
										 |  |  |     tag = "latest"; | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |     contents = [ pkgs.stdenv.shellPackage pkgs.coreutils ]; | 
					
						
							|  |  |  |     config = { | 
					
						
							|  |  |  |       Env = [ | 
					
						
							|  |  |  |         # When shell=true, mesos invokes "sh -c '<cmd>'", so make sure "sh" is | 
					
						
							|  |  |  |         # on the PATH. | 
					
						
							|  |  |  |         "PATH=${pkgs.stdenv.shellPackage}/bin:${pkgs.coreutils}/bin" | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |       Entrypoint = [ "echo" ]; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   registry = pkgs.runCommand "registry" { } ''
 | 
					
						
							|  |  |  |     mkdir -p $out | 
					
						
							|  |  |  |     cp ${simpleDocker} $out/echo:latest.tar | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testFramework = pkgs.pythonPackages.buildPythonPackage { | 
					
						
							|  |  |  |     name = "mesos-tests"; | 
					
						
							|  |  |  |     propagatedBuildInputs = [ pkgs.mesos ]; | 
					
						
							|  |  |  |     catchConflicts = false; | 
					
						
							|  |  |  |     src = ./mesos_test.py; | 
					
						
							|  |  |  |     phases = [ "installPhase" "fixupPhase" ]; | 
					
						
							|  |  |  |     installPhase = ''
 | 
					
						
							| 
									
										
										
										
											2017-09-24 14:52:44 +02:00
										 |  |  |       install -Dvm 0755 $src $out/bin/mesos_test.py | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       echo "done" > test.result | 
					
						
							|  |  |  |       tar czf $out/test.tar.gz test.result | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-11 23:32:37 +01:00
										 |  |  |   testScript = | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       startAll; | 
					
						
							| 
									
										
										
										
											2018-05-11 19:26:35 +02:00
										 |  |  |       $master->waitForUnit("zookeeper.service"); | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       $master->waitForUnit("mesos-master.service"); | 
					
						
							| 
									
										
										
										
											2018-05-11 19:26:35 +02:00
										 |  |  |       $slave->waitForUnit("docker.service"); | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       $slave->waitForUnit("mesos-slave.service"); | 
					
						
							| 
									
										
										
										
											2018-05-11 19:26:35 +02:00
										 |  |  |       $master->waitForOpenPort(2181); | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       $master->waitForOpenPort(5050); | 
					
						
							|  |  |  |       $slave->waitForOpenPort(5051); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-24 14:52:44 +02:00
										 |  |  |       # is slave registered? | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       $master->waitUntilSucceeds("curl -s --fail http://master:5050/master/slaves". | 
					
						
							|  |  |  |                                  " | grep -q \"\\\"hostname\\\":\\\"slave\\\"\""); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-24 14:52:44 +02:00
										 |  |  |       # try to run docker image | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |       $master->succeed("${pkgs.mesos}/bin/mesos-execute --master=master:5050". | 
					
						
							|  |  |  |                        " --resources=\"cpus:0.1;mem:32\" --name=simple-docker". | 
					
						
							|  |  |  |                        " --containerizer=mesos --docker_image=echo:latest". | 
					
						
							|  |  |  |                        " --shell=true --command=\"echo done\" | grep -q TASK_FINISHED"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # simple command with .tar.gz uri | 
					
						
							| 
									
										
										
										
											2017-09-24 14:52:44 +02:00
										 |  |  |       $master->succeed("${testFramework}/bin/mesos_test.py master ". | 
					
						
							| 
									
										
										
										
											2016-12-28 00:19:51 -05:00
										 |  |  |                        "${testFramework}/test.tar.gz"); | 
					
						
							| 
									
										
										
										
											2014-12-11 23:32:37 +01:00
										 |  |  |     '';
 | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  | }) |