at 15.09-beta 3.4 kB view raw
1# This test runs etcd as single node, multy node and using discovery 2 3import ./make-test.nix ({ pkgs, ... } : { 4 name = "etcd"; 5 meta = with pkgs.stdenv.lib.maintainers; { 6 maintainers = [ offline ]; 7 }; 8 9 nodes = { 10 simple = 11 { config, pkgs, nodes, ... }: 12 { 13 services.etcd.enable = true; 14 services.etcd.listenClientUrls = ["http://0.0.0.0:4001"]; 15 environment.systemPackages = [ pkgs.curl ]; 16 networking.firewall.allowedTCPPorts = [ 4001 ]; 17 }; 18 19 20 node1 = 21 { config, pkgs, nodes, ... }: 22 { 23 services = { 24 etcd = { 25 enable = true; 26 listenPeerUrls = ["http://0.0.0.0:7001"]; 27 initialAdvertisePeerUrls = ["http://node1:7001"]; 28 initialCluster = ["node1=http://node1:7001" "node2=http://node2:7001"]; 29 }; 30 }; 31 32 networking.firewall.allowedTCPPorts = [ 7001 ]; 33 }; 34 35 node2 = 36 { config, pkgs, ... }: 37 { 38 services = { 39 etcd = { 40 enable = true; 41 listenPeerUrls = ["http://0.0.0.0:7001"]; 42 initialAdvertisePeerUrls = ["http://node2:7001"]; 43 initialCluster = ["node1=http://node1:7001" "node2=http://node2:7001"]; 44 }; 45 }; 46 47 networking.firewall.allowedTCPPorts = [ 7001 ]; 48 }; 49 50 discovery1 = 51 { config, pkgs, nodes, ... }: 52 { 53 services = { 54 etcd = { 55 enable = true; 56 listenPeerUrls = ["http://0.0.0.0:7001"]; 57 initialAdvertisePeerUrls = ["http://discovery1:7001"]; 58 discovery = "http://simple:4001/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/"; 59 }; 60 }; 61 62 networking.firewall.allowedTCPPorts = [ 7001 ]; 63 }; 64 65 discovery2 = 66 { config, pkgs, ... }: 67 { 68 services = { 69 etcd = { 70 enable = true; 71 listenPeerUrls = ["http://0.0.0.0:7001"]; 72 initialAdvertisePeerUrls = ["http://discovery2:7001"]; 73 discovery = "http://simple:4001/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/"; 74 }; 75 }; 76 77 networking.firewall.allowedTCPPorts = [ 7001 ]; 78 }; 79 }; 80 81 testScript = '' 82 subtest "single node", sub { 83 $simple->start(); 84 $simple->waitForUnit("etcd.service"); 85 $simple->succeed("etcdctl set /foo/bar 'Hello world'"); 86 $simple->waitUntilSucceeds("etcdctl get /foo/bar | grep 'Hello world'"); 87 }; 88 89 subtest "multy node", sub { 90 $node1->start(); 91 $node2->start(); 92 $node1->waitForUnit("etcd.service"); 93 $node2->waitForUnit("etcd.service"); 94 $node1->succeed("etcdctl set /foo/bar 'Hello world'"); 95 $node2->waitUntilSucceeds("etcdctl get /foo/bar | grep 'Hello world'"); 96 $node1->shutdown(); 97 $node2->shutdown(); 98 }; 99 100 subtest "discovery", sub { 101 $simple->succeed("curl -X PUT http://localhost:4001/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=2"); 102 103 $discovery1->start(); 104 $discovery2->start(); 105 $discovery1->waitForUnit("etcd.service"); 106 $discovery2->waitForUnit("etcd.service"); 107 $discovery1->succeed("etcdctl set /foo/bar 'Hello world'"); 108 $discovery2->waitUntilSucceeds("etcdctl get /foo/bar | grep 'Hello world'"); 109 }; 110 ''; 111})