From 0a3e03b14bccd09de2731853f87ea60aa2be28b8 Mon Sep 17 00:00:00 2001 From: Matt Ray Date: Wed, 8 Jan 2014 17:37:12 -0600 Subject: [PATCH] Filling out initial rubocop support for metadata.rb and the Gemfile. https://blueprints.launchpad.net/openstack-chef/+spec/lint-and-unit-testing-for-havana Removing tailor, cleaning up metadata and Gemfile and adding TESTING.md. Will remove the .rubocop-todo.yml once the rest of the Rubocop support is filled out * updating chefspec to 3.1.4 (for chefspec coverage) Addresses: blueprint rubocop-for-network Change-Id: I9c9c5b48f3e1174b1e7ec7b5451a6ad9fd82b5e0 --- .rubocop.yml | 9 ++++-- Gemfile | 18 +++++------ Gemfile.lock | 84 +++++++++++++++++++++++++++++++--------------------- README.md | 10 +------ Strainerfile | 3 +- TESTING.md | 42 ++++++++++++++++++++++++++ metadata.rb | 26 ++++++++-------- 7 files changed, 123 insertions(+), 69 deletions(-) create mode 100644 TESTING.md diff --git a/.rubocop.yml b/.rubocop.yml index 71f50686..7a296ac7 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1,7 @@ -inherit_from: - - .rubocop-todo.yml +# UTF-8 headers not generally in these files +Encoding: + Enabled: false + +# ignore long lines +LineLength: + Enabled: false diff --git a/Gemfile b/Gemfile index a42e8e3d..76065e12 100644 --- a/Gemfile +++ b/Gemfile @@ -1,11 +1,9 @@ -# A sample Gemfile -source "https://rubygems.org" +source 'https://rubygems.org' -gem "chef", "~> 11.4.4" -gem "json", "<= 1.7.7" # chef dependency -gem "berkshelf", "~> 2.0.10" -gem "chefspec", "~> 3.1.0" -gem "foodcritic", "~> 3.0.3" -gem "strainer" -gem "webmock", "~> 1.11.0" -gem "rubocop" +gem 'chef', '~> 11.8' +gem 'json', '<= 1.7.7' # chef 11 dependency +gem 'berkshelf', '~> 2.0.10' +gem 'chefspec', '~> 3.1.4' +gem 'foodcritic', '~> 3.0.3' +gem 'strainer' +gem 'rubocop', '>= 0.16.0' diff --git a/Gemfile.lock b/Gemfile.lock index dd33f49b..2777d89e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,12 +9,12 @@ GEM gyoku (>= 0.4.0) nokogiri (>= 1.4.0) ast (1.1.0) - berkshelf (2.0.10) + berkshelf (2.0.12) activesupport (~> 3.2.0) addressable (~> 2.3.4) buff-shell_out (~> 0.1) chozo (>= 0.6.1) - faraday (>= 0.8.5) + faraday (~> 0.8.5) hashie (>= 2.0.2) minitar (~> 0.5.4) rbzip2 (~> 0.2.0) @@ -37,30 +37,41 @@ GEM celluloid-io (0.14.1) celluloid (>= 0.14.1) nio4r (>= 0.4.5) - chef (11.4.4) - erubis - highline (>= 1.6.9) + chef (11.8.2) + chef-zero (~> 1.6, >= 1.6.2) + diff-lcs (~> 1.2, >= 1.2.4) + erubis (~> 2.7) + highline (~> 1.6, >= 1.6.9) json (>= 1.4.4, <= 1.7.7) - mixlib-authentication (>= 1.3.0) - mixlib-cli (~> 1.3.0) - mixlib-config (>= 1.1.2) - mixlib-log (>= 1.3.0) - mixlib-shellout + mime-types (~> 1.16) + mixlib-authentication (~> 1.3) + mixlib-cli (~> 1.3) + mixlib-config (~> 2.0) + mixlib-log (~> 1.3) + mixlib-shellout (~> 1.2) net-ssh (~> 2.6) net-ssh-multi (~> 1.1.0) - ohai (>= 0.6.0) + ohai (~> 6.0) + pry (~> 0.9) + puma (~> 1.6) rest-client (>= 1.0.4, < 1.7.0) yajl-ruby (~> 1.1) - chefspec (3.0.2) + chef-zero (1.7.2) + hashie (~> 2.0) + json + mixlib-log (~> 1.3) + moneta (< 0.7.0) + rack + chefspec (3.1.4) chef (~> 11.0) fauxhai (~> 2.0) + i18n (>= 0.6.9, < 1.0.0) rspec (~> 2.14) chozo (0.6.1) activesupport (>= 3.2.0) hashie (>= 2.0.2) multi_json (>= 1.3.0) - crack (0.4.0) - safe_yaml (~> 0.9.0) + coderay (1.1.0) diff-lcs (1.2.5) erubis (2.7.0) faraday (0.8.8) @@ -80,10 +91,11 @@ GEM multi_json (~> 1.3) gssapi (1.0.3) ffi (>= 1.0.1) - gyoku (1.1.0) + gyoku (1.1.1) builder (>= 2.1.2) hashie (2.0.5) highline (1.6.20) + hitimes (1.2.1) httpclient (2.3.4.1) httpi (0.9.7) rack @@ -94,15 +106,17 @@ GEM logging (1.8.1) little-plugger (>= 1.1.3) multi_json (>= 1.3.6) - mime-types (2.0) + method_source (0.8.2) + mime-types (1.25.1) minitar (0.5.4) mixlib-authentication (1.3.0) mixlib-log - mixlib-cli (1.3.0) + mixlib-cli (1.4.0) mixlib-config (2.1.0) mixlib-log (1.6.0) mixlib-shellout (1.3.0) - multi_json (1.8.2) + moneta (0.6.0) + multi_json (1.8.3) multipart-post (1.2.0) net-http-persistent (2.9) net-ssh (2.7.0) @@ -112,7 +126,7 @@ GEM net-ssh (>= 2.1.4) net-ssh-gateway (>= 0.99.0) nio4r (0.5.0) - nokogiri (1.5.10) + nokogiri (1.5.11) nori (1.1.5) ohai (6.20.0) ipaddress @@ -122,18 +136,24 @@ GEM mixlib-shellout systemu (~> 2.5.2) yajl-ruby - parser (2.0.0) + parser (2.1.2) ast (~> 1.1) slop (~> 3.4, >= 3.4.5) polyglot (0.3.3) powerpack (0.0.9) + pry (0.9.12.4) + coderay (~> 1.0) + method_source (~> 0.8) + slop (~> 3.4) + puma (1.6.3) + rack (~> 1.2) rack (1.5.2) - rainbow (1.1.4) - rake (10.1.0) + rainbow (1.99.1) + rake (10.1.1) rbzip2 (0.2.0) rest-client (1.6.7) mime-types (>= 1.16) - retryable (1.3.3) + retryable (1.3.4) ridley (1.5.3) addressable buff-config (~> 0.2) @@ -162,12 +182,11 @@ GEM rspec-expectations (2.14.4) diff-lcs (>= 1.1.3, < 2.0) rspec-mocks (2.14.4) - rubocop (0.15.0) - parser (~> 2.0) + rubocop (0.16.0) + parser (~> 2.1) powerpack (~> 0.0.6) rainbow (>= 1.1.4) rubyntlm (0.1.1) - safe_yaml (0.9.3) savon (0.9.5) akami (~> 1.0) builder (>= 2.1.2) @@ -183,7 +202,8 @@ GEM buff-platform (~> 0.1) systemu (2.5.2) thor (0.18.1) - timers (1.1.0) + timers (2.0.0) + hitimes treetop (1.4.15) polyglot polyglot (>= 0.3.1) @@ -193,9 +213,6 @@ GEM hashie (>= 2.0.2) wasabi (1.0.0) nokogiri (>= 1.4.0) - webmock (1.11.0) - addressable (>= 2.2.7) - crack (>= 0.3.2) winrm (1.1.3) gssapi (~> 1.0.0) httpclient (~> 2.2, >= 2.2.0.2) @@ -211,10 +228,9 @@ PLATFORMS DEPENDENCIES berkshelf (~> 2.0.10) - chef (~> 11.4.4) - chefspec (~> 3.0.2) + chef (~> 11.8) + chefspec (~> 3.1.4) foodcritic (~> 3.0.3) json (<= 1.7.7) - rubocop + rubocop (>= 0.16.0) strainer - webmock (~> 1.11.0) diff --git a/README.md b/README.md index cd7cfa83..c41c9cc7 100644 --- a/README.md +++ b/README.md @@ -93,15 +93,7 @@ Templates Testing ======= -This cookbook uses [bundler](http://gembundler.com/), [berkshelf](http://berkshelf.com/), and [strainer](https://github.com/customink/strainer) to isolate dependencies and run tests. - -Tests are defined in Strainerfile. - -To run tests: - - $ bundle install # install gem dependencies - $ bundle exec berks install # install cookbook dependencies - $ bundle exec strainer test # run tests +Please refer to the [TESTING.md](TESTING.md) for instructions for testing the cookbook. License and Author ================== diff --git a/Strainerfile b/Strainerfile index 44e3e141..4271c2ae 100644 --- a/Strainerfile +++ b/Strainerfile @@ -1,5 +1,6 @@ # Strainerfile -rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK +rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK/Gemfile $SANDBOX/$COOKBOOK/metadata.rb --config $SANDBOX/$COOKBOOK/.rubocop.yml +# rubocop: bundle exec rubocop $SANDBOX/$COOKBOOK knife test: bundle exec knife cookbook test $COOKBOOK foodcritic: bundle exec foodcritic -f any -t ~FC003 -t ~FC023 $SANDBOX/$COOKBOOK chefspec: bundle exec rspec $SANDBOX/$COOKBOOK/spec diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 00000000..2b52f687 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,42 @@ +# Testing the Cookbook # + +This cookbook uses [bundler](http://gembundler.com/), [berkshelf](http://berkshelf.com/), and [strainer](https://github.com/customink/strainer) to isolate dependencies and run tests. + +Tests are defined in [Strainerfile](Strainerfile), which in turn calls rubocop, knife, foodcritic and chefspec. + +To run all of the tests with Strainer: + + $ bundle exec strainer test -s Strainerfile + +Or you may run the tests individually: + + $ bundle install --path=.bundle # install gem dependencies + $ bundle exec berks install --path=.cookbooks # install cookbook dependencies + $ bundle exec strainer test -s Strainerfile # run tests + +## Rubocop ## + +[Rubocop](https://github.com/bbatsov/rubocop) is a static Ruby code analyzer, based on the community [Ruby style guide](https://github.com/bbatsov/ruby-style-guide). We are attempting to adhere to this where applicable, slowly cleaning up the cookbooks until we can turn on Rubocop for gating the commits. + +### Attribute Rules ### + +Since there are slight style differences between the coding of attributes, recipes and metadata files there are specific `.rubocop.yml` files for each of: + + [Gemfile and metadata.rb](.rubocop.yml) + [attributes/*.rb](attributes/.rubocop.yml) + [recipes/.rubocop.yml](recipes/.rubocop.yml) + [spec/.rubocop.yml](spec/.rubocop.yml) + +## Knife ## + +[knife cookbook test](http://docs.opscode.com/chef/knife.html#test) is used to check the cookbook's Ruby and ERB files for basic syntax errors. + +## Foodcritic ## + +[Foodcritic](http://acrmp.github.io/foodcritic/) is a lint tool for Chef cookbooks. We ignore the following rules: + +[FC003](http://acrmp.github.io/foodcritic/#FC003) these cookbooks are not intended for Chef Solo. + +## Chefspec + +[ChefSpec](http://code.sethvargo.com/chefspec/) is a unit testing framework for testing Chef cookbooks. ChefSpec makes it easy to write examples and get fast feedback on cookbook changes without the need for virtual machines or cloud servers. diff --git a/metadata.rb b/metadata.rb index 94a3054c..703c202e 100644 --- a/metadata.rb +++ b/metadata.rb @@ -1,19 +1,19 @@ -name "openstack-network" -maintainer "Jay Pipes " -license "Apache 2.0" -description "Installs and configures the OpenStack Network API Service and various agents and plugins" +name 'openstack-network' +maintainer 'Jay Pipes ' +license 'Apache 2.0' +description 'Installs and configures the OpenStack Network API Service and various agents and plugins' long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "8.0.0" -recipe "openstack-network::server", "Installs packages required for a OpenStack Network server" -recipe "openstack-network::openvswitch", "Installs packages required for OVS" -recipe "openstack-network::metadata_agent", "Installs packages required for a OpenStack Network Metadata Agent" -recipe "openstack-network::identity_registration", "Registers OpenStack Network endpoints and service user with Keystone" +version '8.0.0' +recipe 'openstack-network::server', 'Installs packages required for a OpenStack Network server' +recipe 'openstack-network::openvswitch', 'Installs packages required for OVS' +recipe 'openstack-network::metadata_agent', 'Installs packages required for a OpenStack Network Metadata Agent' +recipe 'openstack-network::identity_registration', 'Registers OpenStack Network endpoints and service user with Keystone' %w{ ubuntu fedora redhat centos suse }.each do |os| supports os end -depends "openstack-identity", "~> 8.0" -depends "openstack-common", "~> 8.0" -depends "mysql" -depends "postgresql" +depends 'openstack-identity', '~> 8.0' +depends 'openstack-common', '~> 8.0' +depends 'mysql' +depends 'postgresql'