Skip to content
This repository has been archived by the owner on Dec 31, 2022. It is now read-only.

Commit

Permalink
spec: Ubuntu integration tests finished
Browse files Browse the repository at this point in the history
Resolves #20
  • Loading branch information
ajgon committed Oct 27, 2016
1 parent d3a0836 commit 06e59c6
Show file tree
Hide file tree
Showing 9 changed files with 294 additions and 0 deletions.
34 changes: 34 additions & 0 deletions .kitchen.yml
Expand Up @@ -91,3 +91,37 @@ suites:
queues:
- default
- mailers
- name: thin_nginx_padrino_delayed_job
data_bags_path: "test/integration/data_bags/thin_nginx_padrino_delayed_job"
run_list:
- recipe[opsworks_ruby::setup]
- recipe[opsworks_ruby::provision]
- recipe[opsworks_ruby::deploy]
attributes:
deploy:
dummy_project:
framework:
adapter: 'padrino'
appserver:
adapter: 'thin'
max_connections: 4096
max_persistent_connections: 2048
worker:
adapter: 'delayed_job'
queues:
- default
- mailers
- name: nullified
data_bags_path: "test/integration/data_bags/nullified"
run_list:
- recipe[opsworks_ruby::setup]
- recipe[opsworks_ruby::deploy]
attributes:
deploy:
dummy_project:
framework:
adapter: 'null'
appserver:
adapter: 'null'
webserver:
adapter: 'null'
2 changes: 2 additions & 0 deletions .travis.yml
Expand Up @@ -19,6 +19,8 @@ env:
- INSTANCE=default-ubuntu-1404
- INSTANCE=all-options-ubuntu-1404
- INSTANCE=unicorn-apache-hanami-resque-ubuntu-1404
- INSTANCE=thin-nginx-padrino-delayed-job-ubuntu-1404
- INSTANCE=nullified-ubuntu-1404

before_install:
- gem install bundler
Expand Down
6 changes: 6 additions & 0 deletions libraries/drivers_appserver_null.rb
Expand Up @@ -5,6 +5,12 @@ class Null < Drivers::Appserver::Base
adapter :null
allowed_engines :null
output filter: []

def configure
end
alias deploy_before_restart configure
alias after_deploy configure
alias after_undeploy configure
end
end
end
@@ -0,0 +1,35 @@
{
"app_id": "3aef37c1-7e2b-4255-bbf1-03e06f07701a",
"app_source": {
"password": "3aa161d358a167204502",
"revision": "padrino",
"ssh_key_comment": "Don't get cocky, this is a dummy key only for this purpose",
"ssh_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAoQkCQh13eet7vpN/IbFuxKlaeHLUmn9ZKGA9ZvJyTc88PkWa\nNRD9t3GzeGVYOfwTELgh1WJ88Qs1vz/zR+Wm4l9sbMusINJCMzTYnPuPRjPGqxkU\n6JEiknRgJGaSYRHS0QX4+VAkaD1rhJA4ETxOC7Eb/egfoTJNo28rey9PTjB6fiAV\nRvwY6xjPMA8aTmzGHS4C+L+FwNXGuCiqqS9H5brGzdGd2d1vD/OQYP3VNe7MLmy0\nXeaIj8HZ0fGGa8Nb07UBDuf2ChJ1kSnEobGyDtwimN8HJrdaoZYgetKtGC4m+dlW\nQN1YaWuKh9HBNc8YAEgNWs38h0qzZWfR9SAHowIDAQABAoIBADSy5QlL6Vh9xq40\nSKt3DF/RaCj4szioKj47WHzDJMLv6bAbSP7Kw6zvyaLBz6CSLI8RIwlYxLiBSaJ/\nxBaoQffc8HeeI4NOK5nkVmrxLA72TLKbb6s4K88vxHLFGmwn0AzVXogAQRnX18K3\nC5IgYQ4UdKuf9hHji2LLs7gJYHOehuKwlsp7xaq3LJFSjoMFyM00o2NWQ009UuUT\nkpkFUxIb0SfPgDPZJsKvBygPw+WN47C6E09n42udQOTq8YWExA2SlQWrzHTv1pwf\nQzxJBIUWX3SM/R7drVxwqd5tfyjgCt2EiHDPBvnU5uJcSB1NQwbf/l3twDbucvSp\nCkxMMjkCgYEAzFVnJkuJNuK7gySwvJerpwuEd7WmsLZ/DlMZXIuskZtxX9KHdbgJ\nPV785Ro1QIv+4tzxmYSVJovaDOGh56AjWdI4r4K8gfcWEG8SIddprPTryLGyRsdK\n2n75DtR+cWYVJachlZBTX9dljEYKxaHMqdsb0JjVRQ+/RDX+lVRkYT0CgYEAycDh\nyT0LZH3hVYo0DbKAYWNEJixKa5mjxKYPUiqkPYZBrR/UwxkoqScZw5P0CqnL5Xeo\nAlmDMg+MH3cG9UsBwph5OEyNBSDjZ9fcgrjyV79qG6G5ORNLvoybxrAi6roFYoO5\nUR2xFtGlWPhwI8XjIQveDQ+Oh1rpyvycHDp62l8CgYEAn4L4EDwddNxRF5KX6dHZ\nLYFfOvhylTcSPsN+Y/GhmNWpDu3R04MEq4UwlUT9V1MyejWS4Y5PxRSd9zpY4vHv\nRtpGaDT+JdMWxWN/2y1HkL5uJnEZxAkmFSXUFdCqmKnhTlCHdjOB8qq62mN/W0Lw\n+5RRxWjZ7JzbaktgX4DPD90CgYAiJkDRhECqaNg8V2FKND2gvmGpqHOMVPwwa/9J\n5Cfath/lwu6Le3WzdAfbX+6941G87I0GoMohLhqEtOv7lw+cNZzHF8YC6Tc0u4f6\npH14ttCqDqzAaXC3tysi7WtrmcMRksRKY6E3AJNhROQOWg+A53ZVdZ2lcZEDJ9Dw\nwkFLNwKBgAiVUf4INOpW+6XcmXnaVbj2iCuIjEgnFa222U5I6XLxYFi8KvxojipU\n/k06kephV723a3AKx9Hj2Dq1LHkmyHVG7WJtP14jv4d6VIScKePYrB07NoQaq/HL\n+PK1ghQJ4ZOk+L4H0qBmLtzRFotSQJlsGuw8qY6M0ieiauiCu+AD\n-----END RSA PRIVATE KEY-----\n",
"type": "git",
"url": "git@github.com:ajgon/dummy-app.git",
"user": "dummy"
},
"attributes": {
"auto_bundle_on_deploy": true,
"aws_flow_ruby_settings": {},
"document_root": "dummy_project",
"rails_env": null
},
"data_sources": [],
"domains": [
"dummy-project.example.com",
"dummy_project"
],
"enable_ssl": true,
"environment": {
"ENV_VAR1": "test",
"ENV_VAR2": "some data"
},
"name": "Dummy app",
"shortname": "dummy_project",
"ssl_configuration": {
},
"type": "other",
"deploy": true,
"id": "dummy_project"
}
@@ -0,0 +1,3 @@
{
"id": "arn_aws_rds_us-west-2_850906259207_db_dummy-project"
}
@@ -0,0 +1,38 @@
{
"app_id": "3aef37c1-7e2b-4255-bbf1-03e06f07701a",
"app_source": {
"password": "3aa161d358a167204502",
"revision": "padrino",
"ssh_key_comment": "Don't get cocky, this is a dummy key only for this purpose",
"ssh_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAoQkCQh13eet7vpN/IbFuxKlaeHLUmn9ZKGA9ZvJyTc88PkWa\nNRD9t3GzeGVYOfwTELgh1WJ88Qs1vz/zR+Wm4l9sbMusINJCMzTYnPuPRjPGqxkU\n6JEiknRgJGaSYRHS0QX4+VAkaD1rhJA4ETxOC7Eb/egfoTJNo28rey9PTjB6fiAV\nRvwY6xjPMA8aTmzGHS4C+L+FwNXGuCiqqS9H5brGzdGd2d1vD/OQYP3VNe7MLmy0\nXeaIj8HZ0fGGa8Nb07UBDuf2ChJ1kSnEobGyDtwimN8HJrdaoZYgetKtGC4m+dlW\nQN1YaWuKh9HBNc8YAEgNWs38h0qzZWfR9SAHowIDAQABAoIBADSy5QlL6Vh9xq40\nSKt3DF/RaCj4szioKj47WHzDJMLv6bAbSP7Kw6zvyaLBz6CSLI8RIwlYxLiBSaJ/\nxBaoQffc8HeeI4NOK5nkVmrxLA72TLKbb6s4K88vxHLFGmwn0AzVXogAQRnX18K3\nC5IgYQ4UdKuf9hHji2LLs7gJYHOehuKwlsp7xaq3LJFSjoMFyM00o2NWQ009UuUT\nkpkFUxIb0SfPgDPZJsKvBygPw+WN47C6E09n42udQOTq8YWExA2SlQWrzHTv1pwf\nQzxJBIUWX3SM/R7drVxwqd5tfyjgCt2EiHDPBvnU5uJcSB1NQwbf/l3twDbucvSp\nCkxMMjkCgYEAzFVnJkuJNuK7gySwvJerpwuEd7WmsLZ/DlMZXIuskZtxX9KHdbgJ\nPV785Ro1QIv+4tzxmYSVJovaDOGh56AjWdI4r4K8gfcWEG8SIddprPTryLGyRsdK\n2n75DtR+cWYVJachlZBTX9dljEYKxaHMqdsb0JjVRQ+/RDX+lVRkYT0CgYEAycDh\nyT0LZH3hVYo0DbKAYWNEJixKa5mjxKYPUiqkPYZBrR/UwxkoqScZw5P0CqnL5Xeo\nAlmDMg+MH3cG9UsBwph5OEyNBSDjZ9fcgrjyV79qG6G5ORNLvoybxrAi6roFYoO5\nUR2xFtGlWPhwI8XjIQveDQ+Oh1rpyvycHDp62l8CgYEAn4L4EDwddNxRF5KX6dHZ\nLYFfOvhylTcSPsN+Y/GhmNWpDu3R04MEq4UwlUT9V1MyejWS4Y5PxRSd9zpY4vHv\nRtpGaDT+JdMWxWN/2y1HkL5uJnEZxAkmFSXUFdCqmKnhTlCHdjOB8qq62mN/W0Lw\n+5RRxWjZ7JzbaktgX4DPD90CgYAiJkDRhECqaNg8V2FKND2gvmGpqHOMVPwwa/9J\n5Cfath/lwu6Le3WzdAfbX+6941G87I0GoMohLhqEtOv7lw+cNZzHF8YC6Tc0u4f6\npH14ttCqDqzAaXC3tysi7WtrmcMRksRKY6E3AJNhROQOWg+A53ZVdZ2lcZEDJ9Dw\nwkFLNwKBgAiVUf4INOpW+6XcmXnaVbj2iCuIjEgnFa222U5I6XLxYFi8KvxojipU\n/k06kephV723a3AKx9Hj2Dq1LHkmyHVG7WJtP14jv4d6VIScKePYrB07NoQaq/HL\n+PK1ghQJ4ZOk+L4H0qBmLtzRFotSQJlsGuw8qY6M0ieiauiCu+AD\n-----END RSA PRIVATE KEY-----\n",
"type": "git",
"url": "git@github.com:ajgon/dummy-app.git",
"user": "dummy"
},
"attributes": {
"auto_bundle_on_deploy": true,
"aws_flow_ruby_settings": {},
"document_root": "dummy_project",
"rails_env": null
},
"data_sources": [],
"domains": [
"dummy-project.example.com",
"dummy_project"
],
"enable_ssl": true,
"environment": {
"ENV_VAR1": "test",
"ENV_VAR2": "some data"
},
"name": "Dummy app",
"shortname": "dummy_project",
"ssl_configuration": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIICkzCCAfwCCQCs8PFrlPxmzTANBgkqhkiG9w0BAQUFADCBjTELMAkGA1UEBhMC\nVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExGDAWBgNVBAcTD1NpbGxpY29uIFZhbGxl\neTEWMBQGA1UEChQNb3Bzd29ya3NfcnVieTEWMBQGA1UEAxQNKi5leGFtcGxlLmNv\nbTEfMB0GCSqGSIb3DQEJARYQaWdvckByemVnb2NraS5wbDAeFw0xNjEwMjUxMzU4\nNDVaFw0xNzEwMjUxMzU4NDVaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs\naWZvcm5pYTEYMBYGA1UEBxMPU2lsbGljb24gVmFsbGV5MRYwFAYDVQQKFA1vcHN3\nb3Jrc19ydWJ5MRYwFAYDVQQDFA0qLmV4YW1wbGUuY29tMR8wHQYJKoZIhvcNAQkB\nFhBpZ29yQHJ6ZWdvY2tpLnBsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDF\nkSHFW+Vaffu/IHps5m5H/U+zeuIUuc/STWTzo82b+8Lv47n3jYB8Rx98Ti8lcPLW\nAIfRSo0pKry9vMYUNbzq+5bEoyfJWWnFgKlHwL5Znl2104Go9sjGHOcnggTFxoH+\n3GbBlM122h2aaxNDn3BLpvlCbfWRkyuZBJRYJ8BDAwIDAQABMA0GCSqGSIb3DQEB\nBQUAA4GBAJvYjvy/bK+8bFKt/EelhSWM/+/YWxQeH6WyKVkKCFu8SAcudtIUN0+b\nmgtpX8hLR7OfJ1QGHbj50USBvMcZcXPseSA9tl3uVsFeIHpVIJDzwcXd2UIklqa0\nTWWRQeP80euInTpyMZ3nygG48O00WGDV081UMS0mLUxAKVeLdUJA\n-----END CERTIFICATE-----\n",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQDFkSHFW+Vaffu/IHps5m5H/U+zeuIUuc/STWTzo82b+8Lv47n3\njYB8Rx98Ti8lcPLWAIfRSo0pKry9vMYUNbzq+5bEoyfJWWnFgKlHwL5Znl2104Go\n9sjGHOcnggTFxoH+3GbBlM122h2aaxNDn3BLpvlCbfWRkyuZBJRYJ8BDAwIDAQAB\nAoGAC5gWyUQ5U3QtP+wiAx4KvsLI2JmPhvPYlFjiYcHtIQhHSlis4zA0qBZsbJkR\n/zp/pbtmPQwI+K9/YAsh/LGionUEfNyM4m3tuvLY860AqTlD4fCFANvLEXX4ryGq\n4Jjy8Vsq8+Yf9+Ej2VaKBR2TJJxczdgeDii2t74f+Y44DeECQQD+aBRGl18yfk5Y\nkrSWA1vnG7Nnd1eh0WXN1wUVq1/wgt8P2Ejuwyf2KrKgYoUOBfSL+p9mwsO6cR4X\ns9YJTRKJAkEAxs3qM7YoM2xFuohcuMCzTb+7kpV5nahZc0NyipFtCUfKU0JAqgr5\nN5HTQ756s3pvoifkVNE0b14xpnj1Qmt2KwJBALWlCH0SjXUW+8eAEBJgGZlcjO7e\nJiKyyRZ8ZPQA5cJrHutISWK40uqPt/SOA2Rs2hur+W48t9WB+LOBwtvnPMkCQFyX\n84j6QmcQ+rkSYf0640hHENoI/IfNrTveIi8f5KT55uY4aV3JlqGnLbrTsNp/IBdq\ndRJ8DewA9ycOF01EN9kCQEJVMn/cgbTT4hNyte2ycyHxTSh1h5ImipV8khcopanV\naSxsp8mM4JwGSzWtfF9+EMVymZ2OsH7oSYfawzKjSGg=\n-----END RSA PRIVATE KEY-----\n",
"chain": "-----BEGIN CERTIFICATE-----\nMIICkzCCAfwCCQCs8PFrlPxmzTANBgkqhkiG9w0BAQUFADCBjTELMAkGA1UEBhMC\nVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExGDAWBgNVBAcTD1NpbGxpY29uIFZhbGxl\neTEWMBQGA1UEChQNb3Bzd29ya3NfcnVieTEWMBQGA1UEAxQNKi5leGFtcGxlLmNv\nbTEfMB0GCSqGSIb3DQEJARYQaWdvckByemVnb2NraS5wbDAeFw0xNjEwMjUxMzU4\nNDVaFw0xNzEwMjUxMzU4NDVaMIGNMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs\naWZvcm5pYTEYMBYGA1UEBxMPU2lsbGljb24gVmFsbGV5MRYwFAYDVQQKFA1vcHN3\nb3Jrc19ydWJ5MRYwFAYDVQQDFA0qLmV4YW1wbGUuY29tMR8wHQYJKoZIhvcNAQkB\nFhBpZ29yQHJ6ZWdvY2tpLnBsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDF\nkSHFW+Vaffu/IHps5m5H/U+zeuIUuc/STWTzo82b+8Lv47n3jYB8Rx98Ti8lcPLW\nAIfRSo0pKry9vMYUNbzq+5bEoyfJWWnFgKlHwL5Znl2104Go9sjGHOcnggTFxoH+\n3GbBlM122h2aaxNDn3BLpvlCbfWRkyuZBJRYJ8BDAwIDAQABMA0GCSqGSIb3DQEB\nBQUAA4GBAJvYjvy/bK+8bFKt/EelhSWM/+/YWxQeH6WyKVkKCFu8SAcudtIUN0+b\nmgtpX8hLR7OfJ1QGHbj50USBvMcZcXPseSA9tl3uVsFeIHpVIJDzwcXd2UIklqa0\nTWWRQeP80euInTpyMZ3nygG48O00WGDV081UMS0mLUxAKVeLdUJA\n-----END CERTIFICATE-----\n"
},
"type": "other",
"deploy": true,
"id": "dummy_project"
}
@@ -0,0 +1,3 @@
{
"id": "arn_aws_rds_us-west-2_850906259207_db_dummy-project"
}
62 changes: 62 additions & 0 deletions test/integration/nullified/serverspec/nullified_spec.rb
@@ -0,0 +1,62 @@
# frozen_string_literal: true
require 'spec_helper'

describe 'opsworks_ruby::setup' do
describe package('ruby2.3') do
it { should be_installed }
end

describe package('libsqlite3-dev') do
it { should be_installed }
end

describe package('git') do
it { should be_installed }
end

describe package('nginx') do
it { should_not be_installed }
end

describe package('apache2') do
it { should_not be_installed }
end

describe file('/usr/local/bin/bundle') do
it { should be_symlink }
end
end

describe 'opsworks_ruby::configure' do
context 'webserver' do
describe file('/etc/nginx') do
it { should_not exist }
end

describe file('/etc/apache2') do
it { should_not exist }
end
end
end

describe 'opsworks_ruby::deploy' do
context 'scm' do
describe file('/tmp/ssh-git-wrapper.sh') do
its(:content) { should include 'exec ssh -o UserKnownHostsFile=/dev/null' }
end

describe file('/srv/www/dummy_project/current/.git') do
it { should_not exist }
end
end

context 'webserver' do
describe service('nginx') do
it { should_not be_running }
end

describe service('apache2') do
it { should_not be_running }
end
end
end
@@ -0,0 +1,111 @@
# frozen_string_literal: true
# rubocop:disable Metrics/BlockLength
require 'spec_helper'

describe 'opsworks_ruby::setup' do
describe package('ruby2.3') do
it { should be_installed }
end

describe package('libsqlite3-dev') do
it { should be_installed }
end

describe package('git') do
it { should be_installed }
end

describe package('nginx') do
it { should be_installed }
end

describe file('/usr/local/bin/bundle') do
it { should be_symlink }
end
end

describe 'opsworks_ruby::configure' do
context 'webserver' do
describe file('/etc/nginx/ssl/dummy-project.example.com.key') do
its(:content) { should include '-----BEGIN RSA PRIVATE KEY-----' }
end

describe file('/etc/nginx/ssl/dummy-project.example.com.crt') do
its(:content) { should include '-----BEGIN CERTIFICATE-----' }
end

describe file('/etc/nginx/ssl/dummy-project.example.com.ca') do
its(:content) { should include '-----BEGIN CERTIFICATE-----' }
end

describe file('/etc/nginx/sites-enabled/dummy_project.conf') do
it { should be_symlink }
end

describe file('/etc/nginx/sites-available/dummy_project.conf') do
its(:content) { should include 'upstream thin_dummy-project.example.com' }
its(:content) { should include 'ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";' }
its(:content) { should include 'root /srv/www/dummy_project/current/public;' }
end
end

context 'appserver' do
describe file('/srv/www/dummy_project/shared/config/thin.yml') do
its(:content) { should include 'max_conns: 4096' }
its(:content) { should include 'max_persistent_conns: 2048' }
its(:content) { should include 'socket: "/srv/www/dummy_project/shared/sockets/thin.sock"' }
end

describe file('/srv/www/dummy_project/shared/scripts/thin.service') do
its(:content) { should include 'ENV[\'ENV_VAR1\'] = "test"' }
its(:content) { should include 'ENV[\'RACK_ENV\'] = "production"' }
its(:content) { should include 'PID_PATH="/srv/www/dummy_project/shared/pids/thin.pid"' }
its(:content) { should include 'def thin_running?' }
end
end

context 'worker' do
describe file('/etc/monit/conf.d/delayed_job_dummy_project.monitrc') do
its(:content) { should include 'group delayed_job_dummy_project_group' }
its(:content) { should include 'check process delayed_job_dummy_project-1' }
its(:content) do
should include 'RACK_ENV="production" DATABASE_URL="sqlite:///srv/www/dummy_project/shared/db/data.sqlite3" ' \
'bin/delayed_job start --pid-dir=/srv/www/dummy_project/shared/pids/ -i 0 ' \
'--queues=default,mailers'
end
its(:content) { should include 'logger -t delayed_job-dummy_project-1' }
its(:content) { should include 'check process delayed_job_dummy_project-2' }
its(:content) do
should include 'RACK_ENV="production" DATABASE_URL="sqlite:///srv/www/dummy_project/shared/db/data.sqlite3" ' \
'bin/delayed_job start --pid-dir=/srv/www/dummy_project/shared/pids/ -i 1 ' \
'--queues=default,mailers'
end
its(:content) { should include 'logger -t delayed_job-dummy_project-2' }
end
end
end

describe 'opsworks_ruby::deploy' do
context 'scm' do
describe file('/tmp/ssh-git-wrapper.sh') do
its(:content) { should include 'exec ssh -o UserKnownHostsFile=/dev/null' }
end

describe file('/srv/www/dummy_project/current/.git') do
it { should_not exist }
end
end

context 'webserver' do
describe service('nginx') do
it { should be_running }
end
end

context 'appserver' do
describe command('pgrep -f thin | tr \'\n\' \' \'') do
its(:stdout) { should match(/(?:[0-9]+ ){2}/) }
end
end
end
# rubocop:enable Metrics/BlockLength

0 comments on commit 06e59c6

Please sign in to comment.