summaryrefslogtreecommitdiffstats
path: root/nixos/tests/etcd.nix
diff options
context:
space:
mode:
authorJaka Hudoklin <jakahudoklin@gmail.com>2016-08-25 14:41:47 +0200
committerJaka Hudoklin <jakahudoklin@gmail.com>2016-08-25 14:42:22 +0200
commit0630233afa6440473f0c04825f252c508e8c534b (patch)
treee4444ee7dd76a37410e009a397899b2c357fcd1e /nixos/tests/etcd.nix
parent8256c07fc03625ea37ff2ebb29217c50e2ed6163 (diff)
etcd module: add test for simple one node etcd service
Diffstat (limited to 'nixos/tests/etcd.nix')
-rw-r--r--nixos/tests/etcd.nix123
1 files changed, 11 insertions, 112 deletions
diff --git a/nixos/tests/etcd.nix b/nixos/tests/etcd.nix
index 4eca6558dde0..f8a6791a834f 100644
--- a/nixos/tests/etcd.nix
+++ b/nixos/tests/etcd.nix
@@ -1,71 +1,6 @@
-# This test runs simple etcd cluster
+# This test runs simple etcd node
-import ./make-test.nix ({ pkgs, ... } : let
- certs = pkgs.runCommand "certs" {
- buildInputs = [pkgs.openssl];
- } ''
- mkdir -p $out
- openssl genrsa -out $out/ca-key.pem 2048
- openssl req -x509 -new -nodes -key $out/ca-key.pem -days 10000 -out $out/ca.pem -subj "/CN=etcd-ca"
-
- cat << EOF > openssl.cnf
- ions = v3_req
- distinguished_name = req_distinguished_name
- [req_distinguished_name]
- [ v3_req ]
- basicConstraints = CA:FALSE
- keyUsage = digitalSignature, keyEncipherment
- extendedKeyUsage = serverAuth
- subjectAltName = @alt_names
- [alt_names]
- DNS.1 = node1
- DNS.2 = node2
- DNS.3 = node3
- IP.1 = 127.0.0.1
- EOF
-
- openssl genrsa -out $out/etcd-key.pem 2048
- openssl req -new -key $out/etcd-key.pem -out etcd.csr -subj "/CN=etcd" -config openssl.cnf
- openssl x509 -req -in etcd.csr -CA $out/ca.pem -CAkey $out/ca-key.pem -CAcreateserial -out $out/etcd.pem -days 365 -extensions v3_req -extfile openssl.cnf
-
- cat << EOF > client-openssl.cnf
- ions = v3_req
- distinguished_name = req_distinguished_name
- [req_distinguished_name]
- [ v3_req ]
- basicConstraints = CA:FALSE
- keyUsage = digitalSignature, keyEncipherment
- extendedKeyUsage = clientAuth
- EOF
-
- openssl genrsa -out $out/etcd-client-key.pem 2048
- openssl req -new -key $out/etcd-client-key.pem -out etcd-client.csr -subj "/CN=etcd-client" -config client-openssl.cnf
- openssl x509 -req -in etcd-client.csr -CA $out/ca.pem -CAkey $out/ca-key.pem -CAcreateserial -out $out/etcd-client.pem -days 365 -extensions v3_req -extfile client-openssl.cnf
- '';
-
- nodeConfig = {
- services = {
- etcd = {
- enable = true;
- keyFile = "${certs}/etcd-key.pem";
- certFile = "${certs}/etcd.pem";
- trustedCaFile = "${certs}/ca.pem";
- peerClientCertAuth = true;
- listenClientUrls = ["https://127.0.0.1:2379"];
- listenPeerUrls = ["https://0.0.0.0:2380"];
- };
- };
-
- environment.variables = {
- ETCDCTL_CERT_FILE = "${certs}/etcd-client.pem";
- ETCDCTL_KEY_FILE = "${certs}/etcd-client-key.pem";
- ETCDCTL_CA_FILE = "${certs}/ca.pem";
- ETCDCTL_PEERS = "https://127.0.0.1:2379";
- };
-
- networking.firewall.allowedTCPPorts = [ 2380 ];
- };
-in {
+import ./make-test.nix ({ pkgs, ... } : {
name = "etcd";
meta = with pkgs.stdenv.lib.maintainers; {
@@ -73,56 +8,20 @@ in {
};
nodes = {
- node1 = { config, pkgs, nodes, ... }: {
- require = [nodeConfig];
- services.etcd = {
- initialCluster = ["node1=https://node1:2380" "node2=https://node2:2380"];
- initialAdvertisePeerUrls = ["https://node1:2380"];
- };
- };
-
- node2 = { config, pkgs, ... }: {
- require = [nodeConfig];
- services.etcd = {
- initialCluster = ["node1=https://node1:2380" "node2=https://node2:2380"];
- initialAdvertisePeerUrls = ["https://node2:2380"];
- };
- };
-
- node3 = { config, pkgs, ... }: {
- require = [nodeConfig];
- services.etcd = {
- initialCluster = ["node1=https://node1:2380" "node2=https://node2:2380" "node3=https://node3:2380"];
- initialAdvertisePeerUrls = ["https://node3:2380"];
- initialClusterState = "existing";
- };
+ node = { config, pkgs, nodes, ... }: {
+ services.etcd.enable = true;
};
};
testScript = ''
- subtest "should start etcd cluster", sub {
- $node1->start();
- $node2->start();
- $node1->waitForUnit("etcd.service");
- $node2->waitForUnit("etcd.service");
- $node2->waitUntilSucceeds("etcdctl cluster-health");
- $node1->succeed("etcdctl set /foo/bar 'Hello world'");
- $node2->succeed("etcdctl get /foo/bar | grep 'Hello world'");
- };
-
- subtest "should add another member", sub {
- $node1->succeed("etcdctl member add node3 https://node3:2380");
- $node3->start();
- $node3->waitForUnit("etcd.service");
- $node3->waitUntilSucceeds("etcdctl member list | grep 'node3'");
- $node3->succeed("etcdctl cluster-health");
+ subtest "should start etcd node", sub {
+ $node->start();
+ $node->waitForUnit("etcd.service");
};
- subtest "should survive member crash", sub {
- $node3->crash;
- $node1->succeed("etcdctl cluster-health");
- $node1->succeed("etcdctl set /foo/bar 'Hello degraded world'");
- $node1->succeed("etcdctl get /foo/bar | grep 'Hello degraded world'");
- };
+ subtest "should write and read some values to etcd", sub {
+ $node->succeed("etcdctl set /foo/bar 'Hello world'");
+ $node->succeed("etcdctl get /foo/bar | grep 'Hello world'");
+ }
'';
})