From c1f4c9b7f83b758af125898aacf09d3b57a18f3c Mon Sep 17 00:00:00 2001 From: Matt Ray Date: Wed, 8 Jan 2014 17:30:11 -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, added TESTING.md and fixed a broken test. Addresses: blueprint rubocop-for-metering Change-Id: I5a712c18033b6586548903dea93c8421050d971e --- .gitignore | 1 + .rubocop.yml | 7 +++++ Berksfile.lock | 14 +++++----- Gemfile | 16 +++++------ Gemfile.lock | 61 ++++++++++++++++++++++++++++-------------- README.md | 10 +------ Strainerfile | 3 ++- TESTING.md | 42 +++++++++++++++++++++++++++++ metadata.rb | 28 +++++++++---------- spec/collector_spec.rb | 2 +- 10 files changed, 124 insertions(+), 60 deletions(-) create mode 100644 .rubocop.yml create mode 100644 TESTING.md diff --git a/.gitignore b/.gitignore index dcce510..e92db3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .bundle/ +.cookbooks/ diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..7a296ac --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,7 @@ +# UTF-8 headers not generally in these files +Encoding: + Enabled: false + +# ignore long lines +LineLength: + Enabled: false diff --git a/Berksfile.lock b/Berksfile.lock index 9b1ca8e..3efa04b 100644 --- a/Berksfile.lock +++ b/Berksfile.lock @@ -14,25 +14,25 @@ "ref": "3b001b7e07758e2c81b5ae4d1bff8e4a1472b24a" }, "apt": { - "locked_version": "2.0.0" + "locked_version": "2.3.4" }, "database": { - "locked_version": "1.4.0" + "locked_version": "1.6.0" }, "mysql": { - "locked_version": "3.0.2" + "locked_version": "4.0.14" }, "openssl": { - "locked_version": "1.0.2" + "locked_version": "1.1.0" }, "build-essential": { - "locked_version": "1.4.0" + "locked_version": "1.4.2" }, "postgresql": { - "locked_version": "3.0.2" + "locked_version": "3.3.4" }, "aws": { - "locked_version": "0.101.2" + "locked_version": "1.0.0" }, "xfs": { "locked_version": "1.1.0" diff --git a/Gemfile b/Gemfile index 840af0a..76065e1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,9 @@ -source "https://rubygems.org" +source 'https://rubygems.org' -gem "chef", "~> 11.4.4" -gem "json", "<= 1.7.7" # chef 11 dependency -gem "berkshelf", "~> 2.0.10" -gem "chefspec", "~> 3.0.2" -gem "foodcritic", "~> 3.0.3" -gem "strainer" -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 0b478ca..9c331c2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -37,33 +37,46 @@ 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) + coderay (1.1.0) diff-lcs (1.2.5) erubis (2.7.0) faraday (0.8.8) multipart-post (~> 1.2.0) - fauxhai (2.0.0) + fauxhai (2.0.1) net-ssh ohai ffi (1.9.3) @@ -92,14 +105,16 @@ 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) + moneta (0.6.0) multi_json (1.8.2) multipart-post (1.2.0) net-http-persistent (2.9) @@ -120,13 +135,19 @@ 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) + rainbow (1.99.1) rake (10.1.0) rbzip2 (0.2.0) rest-client (1.6.7) @@ -160,8 +181,8 @@ 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) @@ -205,9 +226,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 diff --git a/README.md b/README.md index f820ffc..8f73cb2 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,7 @@ Attributes 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 44e3e14..4271c2a 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 0000000..2b52f68 --- /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 8f99bff..e2fb837 100644 --- a/metadata.rb +++ b/metadata.rb @@ -1,21 +1,21 @@ -name "openstack-metering" -maintainer "AT&T Services, Inc." -maintainer_email "cookbooks@lists.tfoundry.com" -license "Apache 2.0" -description "The OpenStack Metering service Ceilometer." +name 'openstack-metering' +maintainer 'AT&T Services, Inc.' +maintainer_email 'cookbooks@lists.tfoundry.com' +license 'Apache 2.0' +description 'The OpenStack Metering service Ceilometer.' long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "8.0.0" +version '8.0.0' -recipe "openstack-metering::agent-central", "Installs agent central service." -recipe "openstack-metering::agent-compute", "Installs agent compute service." -recipe "openstack-metering::api", "Installs API service." -recipe "openstack-metering::collector", "Installs nova network service." -recipe "openstack-metering::common", "Common metering configuration." -recipe "openstack-metering::identity_registration", "Registers the endpoints with Keystone" +recipe 'openstack-metering::agent-central', 'Installs agent central service.' +recipe 'openstack-metering::agent-compute', 'Installs agent compute service.' +recipe 'openstack-metering::api', 'Installs API service.' +recipe 'openstack-metering::collector', 'Installs nova network service.' +recipe 'openstack-metering::common', 'Common metering configuration.' +recipe 'openstack-metering::identity_registration', 'Registers the endpoints with Keystone' %w{ ubuntu suse }.each do |os| supports os end -depends "openstack-common", "~> 8.0" -depends "openstack-identity", "~> 8.0" +depends 'openstack-common', '~> 8.0' +depends 'openstack-identity', '~> 8.0' diff --git a/spec/collector_spec.rb b/spec/collector_spec.rb index 6f239fe..4a0dcb9 100644 --- a/spec/collector_spec.rb +++ b/spec/collector_spec.rb @@ -12,7 +12,7 @@ describe "openstack-metering::collector" do it "executes ceilometer dbsync" do command = "ceilometer-dbsync --config-file /etc/ceilometer/ceilometer.conf" - expect(@chef_run).to execute_command command + expect(@chef_run).to run_execute command end it "installs python-mysqldb", :A => true do