test-kitchen 0.7.0 → 1.0.0.alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/.gitignore +20 -0
  2. data/.travis.yml +11 -0
  3. data/.yardopts +3 -0
  4. data/Gemfile +13 -0
  5. data/Guardfile +11 -0
  6. data/LICENSE +15 -0
  7. data/README.md +131 -0
  8. data/Rakefile +69 -0
  9. data/bin/kitchen +9 -4
  10. data/features/cli.feature +17 -0
  11. data/features/cli_init.feature +156 -0
  12. data/features/support/env.rb +14 -0
  13. data/lib/kitchen/busser.rb +166 -0
  14. data/lib/kitchen/chef_data_uploader.rb +156 -0
  15. data/lib/kitchen/cli.rb +540 -0
  16. data/lib/kitchen/collection.rb +55 -0
  17. data/lib/kitchen/color.rb +46 -0
  18. data/lib/kitchen/config.rb +223 -0
  19. data/lib/kitchen/driver/base.rb +180 -0
  20. data/lib/kitchen/driver/dummy.rb +81 -0
  21. data/lib/kitchen/driver/ssh_base.rb +192 -0
  22. data/lib/kitchen/driver.rb +42 -0
  23. data/lib/kitchen/errors.rb +52 -0
  24. data/lib/kitchen/instance.rb +327 -0
  25. data/lib/kitchen/instance_actor.rb +42 -0
  26. data/lib/kitchen/loader/yaml.rb +105 -0
  27. data/lib/kitchen/logger.rb +145 -0
  28. data/{cookbooks/test-kitchen/libraries/helpers.rb → lib/kitchen/logging.rb} +13 -9
  29. data/lib/kitchen/manager.rb +45 -0
  30. data/lib/kitchen/metadata_chopper.rb +52 -0
  31. data/lib/kitchen/platform.rb +61 -0
  32. data/lib/kitchen/rake_tasks.rb +59 -0
  33. data/lib/kitchen/shell_out.rb +65 -0
  34. data/lib/kitchen/state_file.rb +88 -0
  35. data/lib/kitchen/suite.rb +76 -0
  36. data/lib/kitchen/thor_tasks.rb +62 -0
  37. data/lib/kitchen/util.rb +79 -0
  38. data/{cookbooks/test-kitchen/recipes/erlang.rb → lib/kitchen/version.rb} +9 -6
  39. data/lib/kitchen.rb +98 -0
  40. data/lib/vendor/hash_recursive_merge.rb +74 -0
  41. data/spec/kitchen/collection_spec.rb +80 -0
  42. data/spec/kitchen/color_spec.rb +54 -0
  43. data/spec/kitchen/config_spec.rb +201 -0
  44. data/spec/kitchen/driver/dummy_spec.rb +191 -0
  45. data/spec/kitchen/instance_spec.rb +162 -0
  46. data/spec/kitchen/loader/yaml_spec.rb +243 -0
  47. data/spec/kitchen/platform_spec.rb +48 -0
  48. data/spec/kitchen/state_file_spec.rb +122 -0
  49. data/spec/kitchen/suite_spec.rb +64 -0
  50. data/spec/spec_helper.rb +47 -0
  51. data/templates/plugin/driver.rb.erb +23 -0
  52. data/templates/plugin/license_apachev2.erb +15 -0
  53. data/templates/plugin/license_gplv2.erb +18 -0
  54. data/templates/plugin/license_gplv3.erb +16 -0
  55. data/templates/plugin/license_mit.erb +22 -0
  56. data/templates/plugin/license_reserved.erb +5 -0
  57. data/templates/plugin/version.rb.erb +12 -0
  58. data/test-kitchen.gemspec +44 -0
  59. metadata +290 -82
  60. data/config/Cheffile +0 -47
  61. data/config/Kitchenfile +0 -39
  62. data/config/Vagrantfile +0 -114
  63. data/cookbooks/test-kitchen/attributes/default.rb +0 -25
  64. data/cookbooks/test-kitchen/metadata.rb +0 -27
  65. data/cookbooks/test-kitchen/recipes/chef.rb +0 -19
  66. data/cookbooks/test-kitchen/recipes/compat.rb +0 -39
  67. data/cookbooks/test-kitchen/recipes/default.rb +0 -51
  68. data/cookbooks/test-kitchen/recipes/ruby.rb +0 -29
  69. data/lib/test-kitchen/cli/destroy.rb +0 -36
  70. data/lib/test-kitchen/cli/init.rb +0 -37
  71. data/lib/test-kitchen/cli/platform_list.rb +0 -37
  72. data/lib/test-kitchen/cli/project_info.rb +0 -44
  73. data/lib/test-kitchen/cli/ssh.rb +0 -36
  74. data/lib/test-kitchen/cli/status.rb +0 -36
  75. data/lib/test-kitchen/cli/test.rb +0 -68
  76. data/lib/test-kitchen/cli.rb +0 -282
  77. data/lib/test-kitchen/dsl.rb +0 -63
  78. data/lib/test-kitchen/environment.rb +0 -166
  79. data/lib/test-kitchen/platform.rb +0 -79
  80. data/lib/test-kitchen/project/base.rb +0 -159
  81. data/lib/test-kitchen/project/cookbook.rb +0 -97
  82. data/lib/test-kitchen/project/cookbook_copy.rb +0 -58
  83. data/lib/test-kitchen/project/ruby.rb +0 -37
  84. data/lib/test-kitchen/project/supported_platforms.rb +0 -75
  85. data/lib/test-kitchen/project.rb +0 -23
  86. data/lib/test-kitchen/runner/base.rb +0 -154
  87. data/lib/test-kitchen/runner/openstack/dsl.rb +0 -39
  88. data/lib/test-kitchen/runner/openstack/environment.rb +0 -141
  89. data/lib/test-kitchen/runner/openstack.rb +0 -147
  90. data/lib/test-kitchen/runner/vagrant.rb +0 -95
  91. data/lib/test-kitchen/runner.rb +0 -21
  92. data/lib/test-kitchen/scaffold.rb +0 -88
  93. data/lib/test-kitchen/ui.rb +0 -73
  94. data/lib/test-kitchen/version.rb +0 -21
  95. data/lib/test-kitchen.rb +0 -34
@@ -1,141 +0,0 @@
1
- require 'test-kitchen/environment'
2
- require 'json'
3
- require 'fog'
4
-
5
- module TestKitchen
6
- class Environment
7
- class Openstack < TestKitchen::Environment
8
- attr_reader :username, :password, :tenant, :auth_url
9
- attr_reader :servers
10
-
11
- def initialize(conf={})
12
- super
13
- @username = conf[:username] || config.username
14
- @password = conf[:password] || config.password
15
- @tenant = conf[:tenant] || config.tenant
16
- @auth_url = conf[:auth_url] || config.auth_url
17
- @servers = {}
18
- load
19
- end
20
-
21
- def create_server(platform_name, server_def)
22
- @servers[platform_name] ||=
23
- begin
24
- server = connection.servers.create({ :name => server_def[:instance_name],
25
- :image_ref => server_def[:image_id],
26
- :flavor_ref => server_def[:flavor_id],
27
- :key_name => server_def[:keyname]})
28
- server.wait_for { ready? }
29
- sleep(2) until tcp_test_ssh(server.public_ip_address['addr'])
30
- save
31
- server
32
- end
33
-
34
- # These won't persist on the fog objectso we have to set them every
35
- # time. :(
36
- @servers[platform_name].username = server_def[:ssh_user]
37
- if server_def[:ssh_key]
38
- @servers[platform_name].private_key_path = File.expand_path(server_def[:ssh_key])
39
- end
40
- @servers[platform_name]
41
- end
42
-
43
- def tcp_test_ssh(hostname)
44
- tcp_socket = TCPSocket.new(hostname, '22')
45
- IO.select([tcp_socket], nil, nil, 5)
46
- rescue SocketError, Errno::ETIMEDOUT, Errno::EPERM,
47
- Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ENETUNREACH
48
- false
49
- ensure
50
- tcp_socket && tcp_socket.close
51
- end
52
-
53
- def connection
54
- @connection ||= Fog::Compute.new(:provider => 'OpenStack',
55
- :openstack_username => username,
56
- :openstack_api_key => password,
57
- :openstack_auth_url => auth_url,
58
- :openstack_tenant => tenant)
59
- end
60
-
61
-
62
- # The following functions all take a name of
63
- # of a VM in our enironment
64
-
65
- def status(name)
66
- if @servers.has_key?(name)
67
- @servers[name].state.to_s.downcase
68
- else
69
- "not created"
70
- end
71
- end
72
-
73
- def destroy(name)
74
- @servers[name].destroy if @servers.has_key?(name)
75
- @servers.delete(name)
76
- save
77
- end
78
-
79
-
80
- # Ideally we could use the #ssh and #scp functions on Fog's server '
81
- # object. But these seem to be broken in the case of Openstack
82
-
83
- def ssh_options(name)
84
- if key = @servers[name].private_key_path
85
- {:keys => [key]}
86
- else
87
- {}
88
- end
89
- end
90
-
91
- def ssh(name)
92
- server = @servers[name]
93
- Fog::SSH.new(server.public_ip_address['addr'], server.username, ssh_options(name))
94
- end
95
-
96
- def scp(name)
97
- server = @servers[name]
98
- Fog::SCP.new(server.public_ip_address['addr'], server.username, ssh_options(name))
99
- end
100
-
101
- # GROSS: Global config as a class variable
102
- def config
103
- @@config
104
- end
105
-
106
- def self.config
107
- @@config
108
- end
109
-
110
- def self.config=(config)
111
- @@config = config
112
- end
113
-
114
- private
115
-
116
- # Store state in .openstack_state file,
117
- # allowing us to re-use already created VMs
118
-
119
- def state_file
120
- File.join(root_path, ".openstack_state")
121
- end
122
-
123
- def load
124
- if File.exists?(state_file)
125
- state = JSON.parse(File.read(state_file))
126
- state.each do |platform, id|
127
- @servers[platform] = connection.servers.get(id)
128
- end
129
- end
130
- end
131
-
132
- def save
133
- state = {}
134
- @servers.each {|k,s| state[k] = s.id}
135
- File.open(state_file, 'w') do |f|
136
- f.write(state.to_json)
137
- end
138
- end
139
- end
140
- end
141
- end
@@ -1,147 +0,0 @@
1
- #
2
- # Author:: Steven Danna (<steve@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'fog'
20
- require 'test-kitchen/runner/openstack/environment'
21
-
22
- module TestKitchen
23
- module Runner
24
- class Openstack < Base
25
-
26
-
27
- # @vm: The TestKitchen::Platform::Version object
28
- #
29
- # @platform: From the parent constructor, contains the full name
30
- # of the relevant platform if we were created by #for_platform
31
-
32
- attr_accessor :vm
33
-
34
- def initialize(env, options={})
35
- super
36
-
37
- if @platform
38
- @vm = env.all_platforms[@platform]
39
- end
40
-
41
- @os_env = TestKitchen::Environment::Openstack.new()
42
- end
43
-
44
- def create
45
- env.ui.msg "[#{platform}] Provisioning guest on Openstack", :green
46
- @os_env.create_server(@platform,
47
- { :instance_name => (vm.instance_name || "cookbook-tester-#{platform}"),
48
- :image_id => vm.image_id,
49
- :flavor_id => vm.flavor_id,
50
- :keyname => vm.keyname,
51
- :ssh_key => vm.ssh_key,
52
- :ssh_user => vm.ssh_user})
53
-
54
- end
55
-
56
- def converge
57
- install_chef if vm.install_chef
58
- move_repo
59
- move_cookbooks
60
- run_chef_solo
61
- end
62
-
63
- # status and destroy are expected to operate on all
64
- # vm's in an environment
65
- def status
66
- env.all_platforms.each do |name, ver|
67
- env.ui.msg "#{name}\t#{@os_env.status(name)}"
68
- end
69
- end
70
-
71
- def destroy
72
- env.all_platforms.each do |name, platform|
73
- env.ui.msg "[#{name}] Terminating openstack server", :yellow
74
- @os_env.destroy name
75
- end
76
- end
77
-
78
- def execute_remote_command(platform_name, command, message=nil)
79
- env.ui.msg("[#{platform_name}] #{message}", :green) if message
80
- results = @os_env.ssh(platform_name).run(command) do |data|
81
- stdout, stderr = data.map {|s| s.rstrip}
82
- stdout.lines.each do |line|
83
- env.ui.msg "[#{platform_name}] #{line}", :green
84
- end
85
- stderr.lines.each do |line|
86
- env.ui.msg "[#{platform_name}] #{line}", :red
87
- end
88
- end
89
- if results.first.status != 0
90
- msg = message || "Remote command"
91
- env.ui.msg "[#{platform_name}] #{msg} failed!", :red
92
- end
93
- end
94
-
95
- private
96
-
97
- def install_chef(name=platform)
98
- execute_remote_command(name, vm.install_chef_cmd, "Installing Chef")
99
- end
100
-
101
- def run_chef_solo(name=platform)
102
- execute_remote_command(name, "echo '#{json_for_node}' > node.json",
103
- "Creating node configuration JSON")
104
- execute_remote_command(name, "echo 'cookbook_path [ \"#{remote_cookbook_dir}\" ]' > solo.rb",
105
- "Creating chef-solo configuration")
106
- execute_remote_command(name, "sudo chef-solo -j node.json -c solo.rb",
107
- "Running chef-solo on host")
108
- end
109
-
110
- def move_cookbooks(name=platform)
111
- env.ui.msg("[#{name}] Moving cookbooks via SCP", :green)
112
- @os_env.scp(name).upload(File.join(env.tmp_path, "cookbooks"),
113
- remote_cookbook_dir, :recursive => true)
114
- end
115
-
116
- def move_repo(name=platform)
117
- env.ui.msg("[#{name}] Moving repo via SCP", :green)
118
- execute_remote_command(name, "sudo mkdir -p #{remote_root_dir}")
119
- execute_remote_command(name, "sudo chown #{vm.ssh_user} #{remote_root_dir}")
120
- @os_env.scp(name).upload(File.join(env.tmp_path, "cookbook_under_test"),
121
- configuration.guest_source_root,
122
- {:recursive => true})
123
- end
124
-
125
- def json_for_node
126
- {
127
- 'test-kitchen' => {
128
- 'project' => configuration.to_hash.merge('source_root' => configuration.guest_source_root,
129
- 'test_root' => configuration.guest_test_root)},
130
- 'run_list' => run_list
131
- }.to_json
132
- end
133
-
134
- def run_list
135
- configuration.run_list + [test_recipe_name]
136
- end
137
-
138
- def remote_root_dir
139
- File.dirname(configuration.guest_source_root)
140
- end
141
-
142
- def remote_cookbook_dir
143
- File.join(remote_root_dir, 'cookbooks')
144
- end
145
- end
146
- end
147
- end
@@ -1,95 +0,0 @@
1
- #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'vagrant'
20
-
21
- module TestKitchen
22
- module Runner
23
- class Vagrant < Base
24
-
25
- def initialize(env, options={})
26
- super
27
- @env, @options = env, options
28
- end
29
-
30
- def create
31
- vagrant_env.cli(vagrant_cli_argv(['up', '--no-provision']))
32
- end
33
-
34
- def converge
35
- vagrant_env.cli(vagrant_cli_argv('provision'))
36
- end
37
-
38
- def status
39
- vagrant_env.cli(vagrant_cli_argv('status'))
40
- end
41
-
42
- def destroy
43
- vagrant_env.cli(vagrant_cli_argv(['destroy', '--force']))
44
- end
45
-
46
- def ssh
47
- vagrant_env.cli(vagrant_cli_argv('ssh'))
48
- end
49
-
50
- def execute_remote_command(vm, command, message=nil)
51
- vm = vagrant_env.vms[vm.to_sym] unless vm.kind_of?(::Vagrant::VM)
52
- vm.ui.info(message, :color => :yellow) if message
53
- vm.channel.execute(command, :error_check => false) do |type, data|
54
- next if data =~ /stdin: is not a tty/
55
- if [:stderr, :stdout].include?(type)
56
- # Output the data with the proper color based on the stream.
57
- color = type == :stdout ? :green : :red
58
- vm.ui.info(data, :color => color, :prefix => false, :new_line => false)
59
- end
60
- end
61
- end
62
-
63
- private
64
-
65
- def vagrant_env
66
- @vagrant_env ||= begin
67
- # massive hack
68
- if test_recipe_name
69
- vagrant_file = "test_recipe_name='#{test_recipe_name}'\n"
70
- else
71
- vagrant_file = 'test_recipe_name=nil'
72
- end
73
- vagrant_file += IO.read(TestKitchen.source_root.join('config', 'Vagrantfile'))
74
- env.create_tmp_file('Vagrantfile', vagrant_file)
75
-
76
- options = {
77
- :ui_class => ::Vagrant::UI::Colored,
78
- :cwd => env.tmp_path
79
- }
80
-
81
- env = ::Vagrant::Environment.new(options)
82
- env.load!
83
- env
84
- end
85
- end
86
-
87
- def vagrant_cli_argv(command)
88
- argv = Array(command)
89
- argv << platform if platform
90
- argv
91
- end
92
-
93
- end
94
- end
95
- end
@@ -1,21 +0,0 @@
1
- #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'test-kitchen/runner/base'
20
- require 'test-kitchen/runner/vagrant'
21
- require 'test-kitchen/runner/openstack'
@@ -1,88 +0,0 @@
1
- #
2
- # Author:: Andrew Crump (<andrew@kotirisoftware.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'fileutils'
20
- require 'chef/cookbook/metadata'
21
-
22
- module TestKitchen
23
-
24
- class Scaffold
25
-
26
- def generate(output_dir)
27
-
28
- scaffold_file '.gitignore',
29
- <<-eos
30
- .bundle
31
- .cache
32
- .kitchen
33
- bin
34
- eos
35
-
36
- scaffold_file 'Gemfile',
37
- <<-eos
38
- source :rubygems
39
-
40
- gem 'test-kitchen'
41
- eos
42
-
43
- scaffold_file 'test/kitchen/Kitchenfile',
44
- <<-eos
45
- #{project_type(output_dir)} "#{project_name(output_dir)}" do
46
-
47
- end
48
- eos
49
- end
50
-
51
- private
52
-
53
- def project_name(output_dir)
54
- if has_metadata?(output_dir)
55
- get_cookbook_name(output_dir)
56
- else
57
- File.basename(output_dir)
58
- end
59
- end
60
-
61
- def get_cookbook_name(output_dir)
62
- md = Chef::Cookbook::Metadata.new
63
- md.from_file(File.join(output_dir, 'metadata.rb'))
64
- md.name
65
- end
66
-
67
- def has_metadata?(output_dir)
68
- File.exists?(File.join(output_dir, 'metadata.rb'))
69
- end
70
-
71
- def project_type(output_dir)
72
- if has_metadata?(output_dir)
73
- 'cookbook'
74
- else
75
- 'integration_test'
76
- end
77
- end
78
-
79
- def scaffold_file(path, content)
80
- FileUtils.mkdir_p(File.dirname(path))
81
- unless File.exists?(path)
82
- File.open(path, 'w') {|f| f.write(content.gsub(/^ {10}/, '')) }
83
- end
84
- end
85
-
86
- end
87
-
88
- end
@@ -1,73 +0,0 @@
1
- #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- module TestKitchen
20
- class UI
21
-
22
- attr_reader :stdout
23
- attr_reader :stderr
24
- attr_reader :stdin
25
-
26
- def initialize(stdout, stderr, stdin, config)
27
- @stdout, @stderr, @stdin, @config = stdout, stderr, stdin, config
28
- end
29
-
30
- def highline
31
- @highline ||= begin
32
- require 'highline'
33
- HighLine.new
34
- end
35
- end
36
-
37
- # Prints a message to stdout. Aliased as +info+ for compatibility with
38
- # the logger API.
39
- def msg(message, *colors)
40
- if colors
41
- message = color(message, *colors)
42
- end
43
- stdout.puts message
44
- end
45
-
46
- alias :info :msg
47
-
48
- # Prints a msg to stderr. Used for warn, error, and fatal.
49
- def err(message)
50
- stderr.puts message
51
- end
52
-
53
- # Print a warning message
54
- def warn(message)
55
- err("#{color('WARNING:', :yellow, :bold)} #{message}")
56
- end
57
-
58
- # Print an error message
59
- def error(message)
60
- err("#{color('ERROR:', :red, :bold)} #{message}")
61
- end
62
-
63
- # Print a message describing a fatal error.
64
- def fatal(message)
65
- err("#{color('FATAL:', :red, :bold)} #{message}")
66
- end
67
-
68
- def color(string, *colors)
69
- highline.color(string, *colors)
70
- end
71
-
72
- end
73
- end
@@ -1,21 +0,0 @@
1
- #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- module TestKitchen
20
- VERSION = "0.7.0"
21
- end
data/lib/test-kitchen.rb DELETED
@@ -1,34 +0,0 @@
1
- #
2
- # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
- # Copyright:: Copyright (c) 2012 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'ripper'
20
- require 'test-kitchen/cli'
21
- require 'test-kitchen/dsl'
22
- require 'test-kitchen/project'
23
- require 'test-kitchen/runner'
24
- require 'test-kitchen/version'
25
-
26
- module TestKitchen
27
-
28
- # The source root is the path to the root directory of
29
- # the test-kitchen gem.
30
- def self.source_root
31
- @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
32
- end
33
-
34
- end