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

Commit

Permalink
spec: speed up tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ajgon committed Oct 8, 2021
1 parent bcd55de commit 11ff52d
Show file tree
Hide file tree
Showing 7 changed files with 482 additions and 154 deletions.
7 changes: 3 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ RUN echo 'deb https://deb.nodesource.com/node_14.x buster main' > /etc/apt/sourc
rm -rf /var/lib/apt/lists/*
RUN gem update --no-document --system
RUN npm install -g conventional-changelog-cli
RUN pip3 install mike mkdocs-material yamllint

RUN echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
RUN locale-gen
ENV LC_ALL en_US.UTF-8

RUN pip3 install mike mkdocs-material yamllint
ENV CHEF_LICENSE=accept
RUN echo 'deb [trusted=yes] https://packages.chef.io/repos/apt/stable bionic main' > /etc/apt/sources.list.d/chefdk.list && \
curl -s https://packages.chef.io/chef.asc | apt-key add - && \
apt-get update && \
Expand All @@ -33,8 +34,7 @@ RUN mkdir -p "$APP_HOME"
COPY Gemfile* $APP_HOME/
WORKDIR $APP_HOME

RUN gem install bundler -v "$(cat Gemfile.lock | grep 'BUNDLED WITH' -A2 | tail -n 1)"
RUN bundle install -j 4
RUN chef exec bundle install -j 4

COPY package.json $APP_HOME/
RUN npm install
Expand All @@ -49,6 +49,5 @@ COPY README.md $APP_HOME/
COPY metadata.rb $APP_HOME/
COPY Berksfile* $APP_HOME/

ENV CHEF_LICENSE=accept
RUN chef exec berks

2 changes: 1 addition & 1 deletion TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

```
docker-compose run --rm -e SKIP="AuthorName AuthorEmail" cookbook \
bash -c "overcommit --sign && overcommit -r && rspec"
bash -c "chef exec bundle exec overcommit --sign && chef exec bundle exec overcommit -r && chef exec bundle exec rspec"
```

## Integration Testing
Expand Down
142 changes: 112 additions & 30 deletions spec/unit/recipes/configure_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,6 @@
require 'spec_helper'

describe 'opsworks_ruby::configure' do
let(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = node['deploy']
solo_node.set['nginx'] = node['nginx']
end
end
let(:chef_run) do
chef_runner.converge(described_recipe)
end
let(:chef_runner_rhel) do
ChefSpec::SoloRunner.new(platform: 'amazon', version: '2016.03') do |solo_node|
solo_node.set['deploy'] = node['deploy']
end
end
let(:chef_run_rhel) do
chef_runner_rhel.converge(described_recipe)
end
let(:monit_installed) { false }
before do
stub_search(:aws_opsworks_app, '*:*').and_return([aws_opsworks_app])
Expand All @@ -32,6 +15,24 @@
end

context 'context savvy' do
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = node['deploy']
solo_node.set['nginx'] = node['nginx']
end
end
cached(:chef_run) do
chef_runner.converge(described_recipe)
end
cached(:chef_runner_rhel) do
ChefSpec::SoloRunner.new(platform: 'amazon', version: '2016.03') do |solo_node|
solo_node.set['deploy'] = node['deploy']
end
end
cached(:chef_run_rhel) do
chef_runner_rhel.converge(described_recipe)
end

it 'creates shared' do
expect(chef_run).to create_directory("/srv/www/#{aws_opsworks_app['shortname']}/shared")
end
Expand Down Expand Up @@ -67,6 +68,23 @@
end

context 'Postgresql + Git + Unicorn + Nginx + Rails + Sidekiq' do
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = node['deploy']
solo_node.set['nginx'] = node['nginx']
end
end
cached(:chef_run) do
chef_runner.converge(described_recipe)
end
cached(:chef_runner_rhel) do
ChefSpec::SoloRunner.new(platform: 'amazon', version: '2016.03') do |solo_node|
solo_node.set['deploy'] = node['deploy']
end
end
cached(:chef_run_rhel) do
chef_runner_rhel.converge(described_recipe)
end
let(:monit_installed) { true }

it 'creates proper database.yml template with connection options' do
Expand All @@ -79,7 +97,7 @@
end

context 'custom database config' do
let(:chef_runner) do
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
app_name = aws_opsworks_app['shortname']
solo_node.set['deploy'][app_name]['database'] = {
Expand All @@ -88,6 +106,9 @@
}
end
end
cached(:chef_run) do
chef_runner.converge(described_recipe)
end

it 'creates proper database.yml template when multi-level config is provided' do
db_config = { primary: { test: 1 }, secondary: { test: 2 } }
Expand All @@ -114,7 +135,7 @@

context 'when the logrotate settings are overridden by attributes at various levels of precedence' do
let(:logrotate_paths) { %w[/some/path/to/a.log] }
let(:chef_runner) do
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['defaults']['global']['logrotate_cookbook'] = 'default_global_cookbook'
solo_node.set['defaults']['global']['logrotate_template_name'] = 'default_global_template.erb'
Expand Down Expand Up @@ -142,6 +163,9 @@
solo_node.set['nginx'] = node['nginx']
end
end
cached(:chef_run) do
chef_runner.converge(described_recipe)
end

it 'configures logrotate for the app framework using the provided framework and global settings' do
expect(chef_run)
Expand Down Expand Up @@ -174,6 +198,37 @@

context 'when the set of logrotate paths empty' do
let(:logrotate_paths) { [] }
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['defaults']['global']['logrotate_cookbook'] = 'default_global_cookbook'
solo_node.set['defaults']['global']['logrotate_template_name'] = 'default_global_template.erb'
solo_node.set['defaults']['global']['logrotate_template_owner'] = 'me'
solo_node.set['defaults']['global']['logrotate_template_group'] = 'a_group'
solo_node.set['defaults']['global']['logrotate_template_mode'] = '0700'
solo_node.set['defaults']['global']['logrotate_options'] = %w[a b c d]
solo_node.set['defaults']['framework']['logrotate_rotate'] = 60
solo_node.set['defaults']['framework']['logrotate_template_name'] = 'some_template.erb'

app_name = aws_opsworks_app['shortname']
solo_node.set['deploy'][app_name]['global']['logrotate_name'] = 'app_global_name'
solo_node.set['deploy'][app_name]['global']['logrotate_cookbook'] = 'app_global_cookbook'
solo_node.set['deploy'][app_name]['global']['logrotate_rotate'] = 45
solo_node.set['deploy'][app_name]['global']['logrotate_template_mode'] = '0750'
solo_node.set['deploy'][app_name]['framework']['logrotate_name'] = 'myapp'
solo_node.set['deploy'][app_name]['framework']['logrotate_cookbook'] = 'other_cookbook'
solo_node.set['deploy'][app_name]['framework']['logrotate_log_paths'] = logrotate_paths
solo_node.set['deploy'][app_name]['framework']['logrotate_frequency'] = 'weekly'
solo_node.set['deploy'][app_name]['framework']['logrotate_rotate'] = 15
solo_node.set['deploy'][app_name]['framework']['logrotate_template_owner'] = 'you'
solo_node.set['deploy'][app_name]['framework']['logrotate_template_mode'] = '0755'
solo_node.set['deploy'][app_name]['framework']['logrotate_options'] = %w[g h i j]

solo_node.set['nginx'] = node['nginx']
end
end
cached(:chef_run) do
chef_runner.converge(described_recipe)
end

it 'does not create any logrotate file' do
expect(chef_run).not_to enable_logrotate_app('myapp')
Expand Down Expand Up @@ -495,7 +550,7 @@
end

context 'Mysql + Puma + Apache2 + hanami.rb + resque' do
let(:chef_run) do
cached(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
deploy = node['deploy']
deploy['dummy_project']['appserver']['adapter'] = 'puma'
Expand Down Expand Up @@ -769,7 +824,7 @@
end

context 'rhel' do
let(:chef_run_rhel) do
cached(:chef_run_rhel) do
ChefSpec::SoloRunner.new(platform: 'amazon', version: '2015.03') do |solo_node|
deploy = node['deploy']
deploy['dummy_project']['appserver']['adapter'] = 'puma'
Expand Down Expand Up @@ -880,7 +935,7 @@
end

context 'Postgres (postgis) + Passenger + Apache2' do
let(:chef_runner) do
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
deploy = node['deploy']
deploy['dummy_project']['database'] = {
Expand All @@ -903,7 +958,7 @@
solo_node.set['deploy'] = deploy
end
end
let(:chef_run) { chef_runner.converge(described_recipe) }
cached(:chef_run) { chef_runner.converge(described_recipe) }

before do
stub_search(:aws_opsworks_rds_db_instance, '*:*').and_return([])
Expand Down Expand Up @@ -986,10 +1041,32 @@
end

context 'when default ports are overridden' do
before do
chef_runner.node.set['deploy'][aws_opsworks_app['shortname']]['webserver']['port'] = 8080
chef_runner.node.set['deploy'][aws_opsworks_app['shortname']]['webserver']['ssl_port'] = 8443
cached(:chef_runner) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
deploy = node['deploy']
deploy['dummy_project']['database'] = {
'adapter' => 'postgis',
'username' => 'dbuser',
'password' => '03c1bc98cdd5eb2f9c75',
'host' => 'dummy-project.c298jfowejf.us-west-2.rds.amazon.com',
'port' => 3265
}
deploy['dummy_project']['appserver']['adapter'] = 'passenger'
deploy['dummy_project']['appserver']['max_pool_size'] = 10
deploy['dummy_project']['appserver']['min_instances'] = 5
deploy['dummy_project']['appserver']['mount_point'] = '/some/mount/point'
deploy['dummy_project']['appserver']['pool_idle_time'] = 300
deploy['dummy_project']['appserver']['max_request_queue_size'] = 100
deploy['dummy_project']['appserver']['error_document'] = { "503": '503.html', "504": '504.html' }
deploy['dummy_project']['appserver']['passenger_max_preloader_idle_time'] = 300
deploy['dummy_project']['webserver']['adapter'] = 'apache2'
deploy['dummy_project']['webserver']['port'] = 8080
deploy['dummy_project']['webserver']['ssl_port'] = 8443
deploy['dummy_project']['global']['environment'] = 'production'
solo_node.set['deploy'] = deploy
end
end
cached(:chef_run) { chef_runner.converge(described_recipe) }

it 'listens on the specified ports rather than the default ports' do
f = "/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf"
Expand All @@ -1016,13 +1093,13 @@
}
)
end
let(:chef_run) do
cached(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = dummy_node['deploy']
solo_node.set['nginx'] = node['nginx']
end.converge(described_recipe)
end
let(:chef_run_rhel) do
cached(:chef_run_rhel) do
ChefSpec::SoloRunner.new(platform: 'amazon', version: '2015.03') do |solo_node|
solo_node.set['deploy'] = dummy_node['deploy']
solo_node.set['nginx'] = node['nginx']
Expand Down Expand Up @@ -1294,7 +1371,7 @@
}
})
end
let(:chef_run) do
cached(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = supplied_node['deploy']
end.converge(described_recipe)
Expand Down Expand Up @@ -1330,6 +1407,11 @@
}
})
end
cached(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['deploy'] = supplied_node['deploy']
end.converge(described_recipe)
end

before do
stub_search(:aws_opsworks_app, '*:*').and_return([aws_opsworks_app(data_sources: [])])
Expand All @@ -1349,7 +1431,7 @@
end

context 'empty node[\'deploy\']' do
let(:chef_run) do
cached(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04') do |solo_node|
solo_node.set['lsb'] = node['lsb']
end.converge(described_recipe)
Expand Down
Loading

0 comments on commit 11ff52d

Please sign in to comment.