Class: Chef::Knife::CookbookTest

Inherits:
Chef::Knife show all
Defined in:
lib/chef/knife/cookbook_test.rb

Instance Attribute Summary

Attributes inherited from Chef::Knife

#name_args

Instance Method Summary collapse

Methods inherited from Chef::Knife

#ask_question, build_sub_class, #bulk_delete, #configure_chef, #confirm, #create_object, #delete_object, #edit_data, #edit_object, #file_exists_and_is_readable?, find_command, #format_for_display, #format_list_for_display, list_commands, load_commands, #load_from_file, #output, #pretty_print, #rest, #stdin, #stdout

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename

Instance Method Details

#runObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/chef/knife/cookbook_test.rb', line 41

def run 
  if config[:cookbook_path]
    Chef::Config[:cookbook_path] = config[:cookbook_path]
  else
    config[:cookbook_path] = Chef::Config[:cookbook_path]
  end

  if config[:all] 
    cl = Chef::CookbookLoader.new
    cl.each do |cookbook|
      test_cookbook(cookbook.name.to_s)
    end
  else
    @name_args.each do |cb|
      test_cookbook(cb)
    end
  end
end

#test_cookbook(cookbook) ⇒ Object



60
61
62
63
64
65
66
67
# File 'lib/chef/knife/cookbook_test.rb', line 60

def test_cookbook(cookbook)
  Chef::Log.info("Running syntax check on #{cookbook}")
  Array(config[:cookbook_path]).reverse.each do |path|
    cookbook_dir = File.expand_path(File.join(path, cookbook))
    test_ruby(cookbook_dir)
    test_templates(cookbook_dir)
  end
end

#test_ruby(cookbook_dir) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/chef/knife/cookbook_test.rb', line 69

def test_ruby(cookbook_dir)
  cache = Chef::Cache::Checksum.instance
  Dir[File.join(cookbook_dir, '**', '*.rb')].each do |ruby_file|
    key = cache.generate_key(ruby_file, "chef-test")
    fstat = File.stat(ruby_file)

    if cache.lookup_checksum(key, fstat) 
      Chef::Log.info("No change in checksum of #{ruby_file}")
    else
      Chef::Log.info("Testing #{ruby_file} for syntax errors...")
      Chef::Mixin::Command.run_command(:command => "ruby -c #{ruby_file}", :output_on_failure => true)
      cache.generate_checksum(key, ruby_file, fstat)
    end
  end
end

#test_templates(cookbook_dir) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/chef/knife/cookbook_test.rb', line 85

def test_templates(cookbook_dir)
  cache = Chef::Cache::Checksum.instance
  Dir[File.join(cookbook_dir, '**', '*.erb')].each do |erb_file|
    key = cache.generate_key(erb_file, "chef-test")
    fstat = File.stat(erb_file)

    if cache.lookup_checksum(key, fstat) 
      Chef::Log.info("No change in checksum of #{erb_file}")
    else
      Chef::Log.info("Testing template #{erb_file} for syntax errors...")
      Chef::Mixin::Command.run_command(:command => "sh -c 'erubis -x #{erb_file} | ruby -c'", :output_on_failure => true)
      cache.generate_checksum(key, erb_file, fstat)
    end
  end
end