add a Rakefile to structure test runs

Having a Rakefile will allow us to change the actual test commands on
our side rather than relying on changes to the openstack-infra
repository. This should make it a lot faster to change things, but also
easier to test since the jenkins jobs are actually run in this
repository, not the openstack-infra one.

This commit defines the jobs we previously had defined in Jenkins and
uses 'high-level' naming consistently (i.e. lint, style vs. foodcritic,
rubocop).

There is also a :clean task to help with deleting the files generated by
the other jobs.

Also changed foodcritic to run on the source cookbook rather than the
one installed by berks, see
e.g. https://github.com/berkshelf/berkshelf/issues/931#issuecomment-29668369

Change-Id: I6e007888e1b37a54628ab5c09e62f636a0b622ed
blueprint: rakefile
This commit is contained in:
Ionuț Arțăriși 2014-09-30 14:21:24 +02:00
parent 0ab0cd3def
commit 31621684b9
5 changed files with 46 additions and 11 deletions

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
.bundle/
.cookbooks/
berks-cookbooks/
.kitchen/
.vagrant/
.coverage/

View File

@ -1,5 +1,5 @@
AllCops:
Includes:
Include:
- metadata.rb
- Gemfile
- attributes/**
@ -13,6 +13,7 @@ Encoding:
Exclude:
- metadata.rb
- Gemfile
- berks-cookbooks/**
NumericLiterals:
Enabled: false

View File

@ -8,3 +8,4 @@ gem 'chefspec', '~> 4.0.0'
gem 'rspec', '~> 3.0.0'
gem 'foodcritic', '~> 3.0.3'
gem 'rubocop', '~> 0.18.1'
gem 'rake', '~> 10.0'

33
Rakefile Normal file
View File

@ -0,0 +1,33 @@
task default: ["test"]
task :test => [:lint, :style, :unit]
task :bundler_prep do
mkdir_p '.bundle'
sh %{bundle install --path=.bundle --jobs 1 --retry 3 --verbose}
end
task :berks_prep => :bundler_prep do
sh %{bundle exec berks vendor}
end
task :lint => :bundler_prep do
sh %{bundle exec foodcritic --epic-fail any --tags ~FC003 --tags ~FC023 .}
end
task :style => :bundler_prep do
sh %{bundle exec rubocop}
end
task :unit => :berks_prep do
sh %{bundle exec rspec --format documentation}
end
task :clean do
rm_rf [
'.bundle',
'berks-cookbooks',
'Gemfile.lock',
'Berksfile.lock'
]
end

View File

@ -1,18 +1,18 @@
# Testing the Cookbook #
This cookbook uses [bundler](http://gembundler.com/) and [berkshelf](http://berkshelf.com/) to isolate dependencies.
This cookbook uses [bundler](http://gembundler.com/) and [berkshelf](http://berkshelf.com/) to isolate dependencies. Make sure you have `ruby 1.9.x`, `bundler`, `rake`, build essentials and the header files for `gecode` installed before continuing. Make sure that you're using gecode version 3. More info [here](https://github.com/opscode/dep-selector-libgecode/tree/0bad63fea305ede624c58506423ced697dd2545e#using-a-system-gecode-instead).
To setup the dependencies:
We have three test suites which you can run either, individually (there are three rake tasks):
$ bundle install --path=.bundle # install gem dependencies
$ bundle exec berks vendor .cookbooks # install cookbook dependencies and create the folder .cookbooks
$ rake lint
$ rake style
$ rake unit
To run the tests:
or altogether:
$ export COOKBOOK='openstack-identity'
$ bundle exec foodcritic -f any -t ~FC003 -t ~FC023 .cookbooks/$COOKBOOK
$ bundle exec rubocop .cookbooks/$COOKBOOK
$ bundle exec rspec --format documentation .cookbooks/$COOKBOOK/spec
$ rake test
The `rake` tasks will take care of installing the needed gem dependencies and cookbooks with `berkshelf`.
## Rubocop ##