Project

General

Profile

Download (10.2 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'
require 'puppet_proxy/puppet_plugin'
require 'puppet_proxy/environment'

class PuppetEnvironmentTest < Test::Unit::TestCase

def setup
Proxy::Puppet::Plugin.load_test_settings(:puppet_conf => './test/fixtures/puppet.conf', :use_cache => false)
end

def test_puppet_class_should_be_an_opject
klass = Proxy::Puppet::Environment.new :name => "production", :paths => ["/etc/puppet/env/production"]
assert_kind_of Proxy::Puppet::Environment, klass
end

def test_should_provide_puppet_envs
env = Proxy::Puppet::Environment.send(:config_environments, :main => {}, :master => {})
assert env.keys.include?(:production)
end

def test_should_provide_env_objects
environments = mock_puppet_env

assert_kind_of Array, environments

env = environments.first
assert_kind_of Proxy::Puppet::Environment, env
end

def test_an_env_should_have_puppet_classes
env = mock_puppet_env.first
assert_respond_to env, :classes
assert_kind_of Array, env.classes
Puppet::Node::Environment.clear
assert_kind_of Proxy::Puppet::PuppetClass, env.classes.first
end

def test_uses_puppet_config
config_reader = mock('config')
config_reader.expects(:get).returns(:main => {}, :master => {})
Proxy::Puppet::Initializer.expects(:load)
Proxy::Puppet::Initializer.expects(:config).returns('/foo/puppet.conf').at_least_once
Proxy::Puppet::ConfigReader.expects(:new).with('/foo/puppet.conf').returns(config_reader)
Proxy::Puppet::Environment.expects(:use_environment_api?).returns(false)
Proxy::Puppet::Environment.expects(:config_environments).with(:main => {}, :master => {}).returns({})
Proxy::Puppet::Environment.all
end

def test_classes_calls_scan_directory
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns({})
env = Proxy::Puppet::Environment.new(:name => 'production', :paths => ['/etc/puppet/modules', '/etc/puppet/production'])
::Proxy::Puppet::ClassScanner.expects(:scan_directory).with('/etc/puppet/modules', 'production')
::Proxy::Puppet::ClassScanner.expects(:scan_directory).with('/etc/puppet/production', 'production')
env.classes
end

def test_classes_calls_scan_directory_with_eparser_master
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(:master => {:parser => 'future'})
env = Proxy::Puppet::Environment.new(:name => 'production', :paths => ['/etc/puppet/modules', '/etc/puppet/production'])
Proxy::Puppet::ClassScannerEParser.expects(:scan_directory).with('/etc/puppet/modules', 'production')
Proxy::Puppet::ClassScannerEParser.expects(:scan_directory).with('/etc/puppet/production', 'production')
env.classes
end

def test_classes_calls_scan_directory_with_eparser_main
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(:main => {:parser => 'future'})
env = Proxy::Puppet::Environment.new(:name => 'production', :paths => ['/etc/puppet/modules', '/etc/puppet/production'])
Proxy::Puppet::ClassScannerEParser.expects(:scan_directory).with('/etc/puppet/modules', 'production')
Proxy::Puppet::ClassScannerEParser.expects(:scan_directory).with('/etc/puppet/production', 'production')
env.classes
end

def test_single_static_env
config = {
:main => {},
:production => { :modulepath=>'./test/fixtures/environments/prod' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['production']
end

def test_master_is_remapped_to_production_when_solo
config = {
:main => {},
:master => { :modulepath=>'./test/fixtures/environments/prod' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['production']
end

def test_multiple_static_env
config = {
:main => {},
:production => { :modulepath=>'./test/fixtures/environments/prod' },
:development => { :modulepath=>'./test/fixtures/environments/dev' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['development', 'production']
end

def test_multiple_modulepath_in_single_env_loads_all_classes
config = {
:main => {},
:production => { :modulepath=>'./test/fixtures/environments/dev:./test/fixtures/environments/prod' },
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['production']
assert_array_equal env.first.classes.map { |c| c.name}, ['test','test2']
end

def test_single_modulepath_in_single_env_with_dynamic_path
config = {
:main => {},
:master => { :modulepath=>'./test/fixtures/environments/$environment/' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['dev','prod']
env_class_map = env.map { |e| [e.name, e.classes.map { |c| c.name }].flatten }
assert_array_equal env_class_map, [["prod", "test"], ["dev", "test2"]]
end

def test_multiple_modulepath_in_single_env_with_multiple_dynamic_path
config = {
:main => {},
:master => { :modulepath=>'./test/fixtures/multi_module/$environment/modules1:./test/fixtures/multi_module/$environment/modules2' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['dev','prod']
env_class_map = env.map { |e| [e.name, e.classes.map { |c| c.name }].flatten }
assert_array_equal env_class_map, [["prod", "test1", "test2"], ["dev", "test3", "test4"]]
end

def test_multiple_modulepath_in_single_env_with_multiple_dynamic_path_and_static_path
config = {
:main => {},
:master => { :modulepath=>'./test/fixtures/environments/prod:./test/fixtures/multi_module/$environment/modules1:./test/fixtures/multi_module/$environment/modules2' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['master','dev','prod']
env_class_map = env.map { |e| [e.name, e.classes.map { |c| c.name }].flatten }
assert_array_equal env_class_map, [["master", "test"], ["prod", "test1", "test2"], ["dev", "test3", "test4"]]
end

def test_multiple_modulepath_in_single_env_with_dynamic_path
config = {
:main => {},
:master => { :modulepath=>'./test/fixtures/environments/$environment:./test/fixtures/modules_include' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['dev', 'prod', 'master']
end

def test_multiple_modulepath_in_single_env_with_broken_entry
config = {
:main => {},
:master => { :modulepath=>'./no/such/$environment/modules:./test/fixtures/environments/prod' }
}
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns(config)
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['master']
end

def test_use_environment_api_with_environmentpath_set_main
assert Proxy::Puppet::Environment.send(:use_environment_api?, :main => {:environmentpath => '/etc'})
end

def test_use_environment_api_with_environmentpath_set_master
assert Proxy::Puppet::Environment.send(:use_environment_api?, :master => {:environmentpath => '/etc'})
end

def test_use_environment_api_with_no_environmentpath
assert !Proxy::Puppet::Environment.send(:use_environment_api?, {})
end

def test_use_environment_api_override_false
Proxy::Puppet::Plugin.settings.stubs(:puppet_use_environment_api).returns(false)
assert !Proxy::Puppet::Environment.send(:use_environment_api?, :main => {:environmentpath => '/etc'})
end

def test_use_environment_api_override_true
Proxy::Puppet::Plugin.settings.stubs(:puppet_use_environment_api).returns(true)
assert Proxy::Puppet::Environment.send(:use_environment_api?, {})
end

def test_all_calls_config_environments
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns({})
Proxy::Puppet::Environment.expects(:use_environment_api?).returns(false)
Proxy::Puppet::Environment.expects(:config_environments).returns({})
Proxy::Puppet::Environment.all
end

def test_all_calls_api_environments
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns({})
Proxy::Puppet::Environment.expects(:use_environment_api?).returns(true)
Proxy::Puppet::Environment.expects(:api_environments).returns({})
Proxy::Puppet::Environment.all
end

def test_api_environments
api = mock('EnvironmentsApi')
api.expects(:find_environments).returns(JSON.load(File.read('./test/fixtures/environments_api.json')))
Proxy::Puppet::EnvironmentsApi.expects(:new).returns(api)

envs = Proxy::Puppet::Environment.send(:api_environments)
assert_equal ['production', 'example_env', 'development', 'common'].sort, envs.keys.sort
['production', 'example_env', 'development', 'common'].each do |e|
assert_equal ["/etc/puppet/environments/#{e}/modules", "/etc/puppet/modules", "/usr/share/puppet/modules"], envs[e]
end
end

def test_should_provide_puppet_envs_from_api
Proxy::Puppet::ConfigReader.any_instance.stubs(:get).returns({})
Proxy::Puppet::Environment.expects(:use_environment_api?).returns(true)
Proxy::Puppet::Environment.expects(:api_environments).returns('production' => ['/etc/puppet/environments/production/modules', '/etc/puppet/modules'])
env = Proxy::Puppet::Environment.all
assert_array_equal env.map { |e| e.name }, ['production']
end

private

def mock_puppet_env
Proxy::Puppet::Environment.stubs(:config_environments).with(is_a(Hash)).returns(:production => "./test/fixtures/environments/prod")
Proxy::Puppet::Environment.all
end

def assert_array_equal(expected, actual, message=nil)
full_message = build_message(message, "<?> expected but was\n<?>.\n", expected, actual)
assert_block(full_message) { (expected.size == actual.size) && (expected - actual == []) }
end

end
(13-13/19)