1{ pkgs, ... }:
2
3let
4 inherit (pkgs) lib;
5 tests = {
6 default = testsForPackage { sparkPackage = pkgs.spark; };
7 };
8
9 testsForPackage =
10 args:
11 lib.recurseIntoAttrs {
12 sparkCluster = testSparkCluster args;
13 passthru.override = args': testsForPackage (args // args');
14 };
15 testSparkCluster =
16 { sparkPackage, ... }:
17 pkgs.testers.nixosTest ({
18 name = "spark";
19
20 nodes = {
21 worker =
22 { nodes, pkgs, ... }:
23 {
24 services.spark = {
25 package = sparkPackage;
26 worker = {
27 enable = true;
28 master = "master:7077";
29 };
30 };
31 virtualisation.memorySize = 2048;
32 };
33 master =
34 { config, pkgs, ... }:
35 {
36 services.spark = {
37 package = sparkPackage;
38 master = {
39 enable = true;
40 bind = "0.0.0.0";
41 };
42 };
43 networking.firewall.allowedTCPPorts = [
44 22
45 7077
46 8080
47 ];
48 };
49 };
50
51 testScript = ''
52 master.wait_for_unit("spark-master.service")
53 worker.wait_for_unit("spark-worker.service")
54 worker.copy_from_host( "${./spark_sample.py}", "/spark_sample.py" )
55 assert "<title>Spark Master at spark://" in worker.succeed("curl -sSfkL http://master:8080/")
56 worker.succeed("spark-submit --version | systemd-cat")
57 worker.succeed("spark-submit --master spark://master:7077 --executor-memory 512m --executor-cores 1 /spark_sample.py")
58 '';
59 });
60in
61tests