Explorar el Código

Merge pull request #20 from bfirsh/add-ci-test-for-docker-cloud

Docker Cloud stack file and CI tests
Ben Firshman hace 9 años
padre
commit
c6a5cc9b1c

+ 33 - 0
dockercloud.yml

@@ -0,0 +1,33 @@
+db:
+  image: 'postgres:9.4'
+  restart: always
+redis:
+  image: 'redis:latest'
+  restart: always
+result-app:
+  autoredeploy: true
+  image: 'instavote/result-app:latest'
+  ports:
+    - '80:80'
+  restart: always
+lb:
+  autoredeploy: true
+  image: 'dockercloud/haproxy:latest'
+  links:
+    - voting-app
+  ports:
+    - "80:80"
+  roles:
+    - global
+  restart: always
+voting-app:
+  autoredeploy: true
+  image: 'instavote/voting-app:latest'
+  restart: always
+  target_num_containers: 5
+
+worker:
+  autoredeploy: true
+  image: 'instavote/worker:latest'
+  restart: always
+  target_num_containers: 3

+ 60 - 0
result-app/docker-compose.test.yml

@@ -0,0 +1,60 @@
+version: '2'
+
+services:
+
+  sut:
+    build: ./tests/
+    depends_on:
+      - voting-app
+      - result-app
+      - worker
+    networks:
+      - front-tier
+
+  voting-app:
+    build: ../voting-app/
+    ports: ["80"]
+    depends_on:
+      - redis
+      - db
+    networks:
+      - front-tier
+      - back-tier
+
+  result-app:
+    build: .
+    ports: ["80"]
+    depends_on:
+      - redis
+      - db
+    networks:
+      - front-tier
+      - back-tier
+
+  worker:
+    build: ../worker/
+    depends_on:
+      - redis
+      - db
+    networks:
+      - back-tier
+
+  redis:
+    image: redis:alpine
+    ports: ["6379"]
+    networks:
+      - back-tier
+
+  db:
+    image: postgres:9.4
+    volumes:
+      - "db-data:/var/lib/postgresql/data"
+    networks:
+      - back-tier
+
+volumes:
+  db-data:
+
+networks:
+  front-tier:
+  back-tier:

+ 5 - 0
result-app/tests/Dockerfile

@@ -0,0 +1,5 @@
+FROM node
+RUN npm install -g phantomjs
+ADD . /app
+WORKDIR /app
+CMD ["/app/tests.sh"]

+ 15 - 0
result-app/tests/render.js

@@ -0,0 +1,15 @@
+var system = require('system');
+var page = require('webpage').create();
+var url = system.args[1];
+
+page.onLoadFinished = function() {
+  setTimeout(function(){
+    console.log(page.content);
+    phantom.exit();
+  }, 1000);
+};
+
+page.open(url, function() {
+    page.evaluate(function() {
+  });
+});

+ 15 - 0
result-app/tests/tests.sh

@@ -0,0 +1,15 @@
+#!/bin/sh
+while ! timeout 1 bash -c "echo > /dev/tcp/voting-app/80"; do sleep 1; done
+curl -sS -X POST --data "vote=a" http://voting-app > /dev/null
+curl -sS -X POST --data "vote=b" http://voting-app > /dev/null
+sleep 10
+if phantomjs render.js http://result-app | grep -q '2 votes'; then
+  echo -e "\e[42m------------"
+  echo -e "\e[92mTests passed"
+  echo -e "\e[42m------------"
+  exit 0
+fi
+  echo -e "\e[41m------------"
+  echo -e "\e[91mTests failed"
+  echo -e "\e[41m------------"
+  exit 1