summaryrefslogtreecommitdiffstats
path: root/nixos/tests
diff options
context:
space:
mode:
authorCharles Strahan <charles@cstrahan.com>2017-01-21 19:05:18 -0500
committerGitHub <noreply@github.com>2017-01-21 19:05:18 -0500
commitd298a961f1db2356495026702dd9bbc396e000af (patch)
tree1c5fd8464c7d280eac9a3333798fce462cab8200 /nixos/tests
parent5b1b089de350aa67233a8be237a4eb5d263f5409 (diff)
parent7ebcada02028e5ce8199cc123fda6aa1aba72e64 (diff)
Merge pull request #21416 from cstrahan/mesos-1.1.0
mesos: 1.0.1 -> 1.1.0
Diffstat (limited to 'nixos/tests')
-rw-r--r--nixos/tests/mesos.nix97
-rw-r--r--nixos/tests/mesos_test.py72
2 files changed, 150 insertions, 19 deletions
diff --git a/nixos/tests/mesos.nix b/nixos/tests/mesos.nix
index 3610603aeba2..6e9af126f032 100644
--- a/nixos/tests/mesos.nix
+++ b/nixos/tests/mesos.nix
@@ -1,32 +1,91 @@
-import ./make-test.nix ({ pkgs, ...} : {
- name = "simple";
+import ./make-test.nix ({ pkgs, ...} : rec {
+ name = "mesos";
meta = with pkgs.stdenv.lib.maintainers; {
- maintainers = [ offline ];
+ maintainers = [ offline kamilchm cstrahan ];
};
- machine = { config, pkgs, ... }: {
- services.zookeeper.enable = true;
- virtualisation.docker.enable = true;
- services.mesos = {
- slave = {
- enable = true;
- master = "zk://localhost:2181/mesos";
- attributes = {
- tag1 = "foo";
- tag2 = "bar";
- };
+ nodes = {
+ master = { config, pkgs, ... }: {
+ networking.firewall.enable = false;
+ services.zookeeper.enable = true;
+ services.mesos.master = {
+ enable = true;
+ zk = "zk://master:2181/mesos";
};
- master = {
- enable = true;
- zk = "zk://localhost:2181/mesos";
+ };
+
+ slave = { config, pkgs, ... }: {
+ 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";
+ };
+ };
};
};
};
+ simpleDocker = pkgs.dockerTools.buildImage {
+ name = "echo";
+ 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 = ''
+ mkdir $out
+ cp $src $out/mesos_test.py
+ chmod +x $out/mesos_test.py
+
+ echo "done" > test.result
+ tar czf $out/test.tar.gz test.result
+ '';
+ };
+
testScript =
''
startAll;
- $machine->waitForUnit("mesos-master.service");
- $machine->waitForUnit("mesos-slave.service");
+ $master->waitForUnit("mesos-master.service");
+ $slave->waitForUnit("mesos-slave.service");
+
+ $master->waitForOpenPort(5050);
+ $slave->waitForOpenPort(5051);
+
+ # is slave registred?
+ $master->waitUntilSucceeds("curl -s --fail http://master:5050/master/slaves".
+ " | grep -q \"\\\"hostname\\\":\\\"slave\\\"\"");
+
+ # try to run docker image
+ $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
+ $master->succeed("${testFramework}/mesos_test.py master ".
+ "${testFramework}/test.tar.gz");
'';
})
diff --git a/nixos/tests/mesos_test.py b/nixos/tests/mesos_test.py
new file mode 100644
index 000000000000..be8bb32e49a7
--- /dev/null
+++ b/nixos/tests/mesos_test.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+import uuid
+import time
+import subprocess
+import os
+
+import sys
+
+from mesos.interface import Scheduler
+from mesos.native import MesosSchedulerDriver
+from mesos.interface import mesos_pb2
+
+def log(msg):
+ process = subprocess.Popen("systemd-cat", stdin=subprocess.PIPE)
+ (out,err) = process.communicate(msg)
+
+class NixosTestScheduler(Scheduler):
+ def __init__(self):
+ self.master_ip = sys.argv[1]
+ self.download_uri = sys.argv[2]
+
+ def resourceOffers(self, driver, offers):
+ log("XXX got resource offer")
+
+ offer = offers[0]
+ task = self.new_task(offer)
+ uri = task.command.uris.add()
+ uri.value = self.download_uri
+ task.command.value = "cat test.result"
+ driver.launchTasks(offer.id, [task])
+
+ def statusUpdate(self, driver, update):
+ log("XXX status update")
+ if update.state == mesos_pb2.TASK_FAILED:
+ log("XXX test task failed with message: " + update.message)
+ driver.stop()
+ sys.exit(1)
+ elif update.state == mesos_pb2.TASK_FINISHED:
+ driver.stop()
+ sys.exit(0)
+
+ def new_task(self, offer):
+ task = mesos_pb2.TaskInfo()
+ id = uuid.uuid4()
+ task.task_id.value = str(id)
+ task.slave_id.value = offer.slave_id.value
+ task.name = "task {}".format(str(id))
+
+ cpus = task.resources.add()
+ cpus.name = "cpus"
+ cpus.type = mesos_pb2.Value.SCALAR
+ cpus.scalar.value = 0.1
+
+ mem = task.resources.add()
+ mem.name = "mem"
+ mem.type = mesos_pb2.Value.SCALAR
+ mem.scalar.value = 32
+
+ return task
+
+if __name__ == '__main__':
+ log("XXX framework started")
+
+ framework = mesos_pb2.FrameworkInfo()
+ framework.user = "root"
+ framework.name = "nixos-test-framework"
+ driver = MesosSchedulerDriver(
+ NixosTestScheduler(),
+ framework,
+ sys.argv[1] + ":5050"
+ )
+ driver.run()