Skip to content

Commit

Permalink
Test CLI parser using engineyard-serverside-adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
martinemde committed Apr 8, 2013
1 parent 6d42e81 commit 331012b
Show file tree
Hide file tree
Showing 15 changed files with 183 additions and 195 deletions.
1 change: 0 additions & 1 deletion Gemfile
Expand Up @@ -2,4 +2,3 @@ source 'https://rubygems.org'
gemspec

gem 'pry'
gem 'engineyard-serverside-adapter', :path => '../engineyard-serverside-adapter'
1 change: 1 addition & 0 deletions engineyard-serverside.gemspec
Expand Up @@ -23,6 +23,7 @@ Gem::Specification.new do |s|
s.add_development_dependency('timecop')
s.add_development_dependency('simplecov')
s.add_development_dependency('engineyard-cloud-client', '~>1.0.11')
s.add_development_dependency('engineyard-serverside-adapter', '~>2.0.6')
s.add_development_dependency('sqlite3')
s.add_development_dependency('pg', '0.13.2')

Expand Down
2 changes: 1 addition & 1 deletion lib/engineyard-serverside/cli.rb
Expand Up @@ -162,7 +162,7 @@ def init(options, action)
yield config, shell
rescue EY::Serverside::RemoteFailure => e
shell.exception "#{e.message}"
abort
raise
rescue Exception => e
shell.exception "#{e.backtrace[0]}: #{e.message} (#{e.class})"
raise
Expand Down
8 changes: 8 additions & 0 deletions lib/engineyard-serverside/configuration.rb
Expand Up @@ -68,6 +68,8 @@ def self.def_required_option(name, key=nil)
def_option(:bundle_without) { (%w[test development] - [framework_env]).join(' ') }
def_option(:user) { ENV['USER'] }
def_option(:group) { user }
def_option :services_check_command, "which /usr/local/ey_resin/ruby/bin/ey-services-setup >/dev/null 2>&1"
def_option(:services_setup_command) { "/usr/local/ey_resin/ruby/bin/ey-services-setup #{app}" }

def_boolean_option :verbose, false
def_boolean_option :ignore_database_adapter_warning, false
Expand Down Expand Up @@ -255,6 +257,12 @@ def disable_maintenance_page?
enable_maintenance_page?
end

def configured_services
services = YAML.load_file(paths.shared_services_yml.to_s)
services.respond_to?(:keys) && !services.empty? ? services.keys : nil
rescue
nil
end
end
end
end
40 changes: 14 additions & 26 deletions lib/engineyard-serverside/deploy.rb
Expand Up @@ -31,7 +31,6 @@ def cached_deploy
create_revision_file
run_with_callbacks(:bundle)
setup_services
check_for_ey_config
symlink_configs
setup_sqlite3_if_necessary
run_with_callbacks(:compile_assets) # defined in RailsAssetSupport
Expand Down Expand Up @@ -72,19 +71,11 @@ def short_log_message(revision)
strategy.short_log_message(revision)
end

def parse_configured_services
result = YAML.load_file "#{paths.shared_config}/ey_services_config_deploy.yml"
return {} unless result.is_a?(Hash)
result
rescue
{}
end

def check_for_ey_config
if gemfile? && lockfile
configured_services = parse_configured_services
if !configured_services.empty? && !lockfile.has_ey_config?
shell.warning "Gemfile.lock does not contain ey_config. Add it to get EY::Config access to: #{configured_services.keys.join(', ')}."
configured_services = config.configured_services
if configured_services && !lockfile.has_ey_config?
shell.warning "Gemfile.lock does not contain ey_config. Add gem 'ey_config' to get access through EY::Config."
end
end
end
Expand Down Expand Up @@ -282,36 +273,33 @@ def create_revision_file
run create_revision_file_command
end

def services_command_check
"which /usr/local/ey_resin/ruby/bin/ey-services-setup >/dev/null 2>&1"
end

def services_setup_command
"/usr/local/ey_resin/ruby/bin/ey-services-setup #{config.app}"
end

def setup_services
shell.status "Setting up external services."
previously_configured_services = parse_configured_services
previously_configured_services = config.configured_services

begin
sudo(services_command_check)
rescue StandardError => e
sudo(config.services_check_command)
rescue EY::Serverside::RemoteFailure
shell.info "Could not setup services. Upgrade your environment to get services configuration."
return
end

begin
sudo(services_setup_command)
rescue StandardError => e
unless previously_configured_services.empty?
sudo(config.services_setup_command)
rescue EY::Serverside::RemoteFailure => e
if previously_configured_services
shell.warning <<-WARNING
External services configuration not updated. Using previous version.
Deploy again if your services configuration appears incomplete or out of date.
#{e}
WARNING
end
end

if services = config.configured_services
shell.status "Services configured: #{services.join(', ')}"
check_for_ey_config
end
end

def setup_sqlite3_if_necessary
Expand Down
1 change: 1 addition & 0 deletions lib/engineyard-serverside/paths.rb
Expand Up @@ -70,6 +70,7 @@ def path(root, *parts)
def_path :enabled_maintenance_page, [:shared_system, 'maintenance.html']
def_path :shared_assets, [:shared, 'assets']
def_path :bundled_gems, [:shared, 'bundled_gems']
def_path :shared_services_yml, [:shared_config, 'ey_services_config_deploy.yml']
def_path :ruby_version, [:bundled_gems, 'RUBY_VERSION']
def_path :system_version, [:bundled_gems, 'SYSTEM_VERSION']
def_path :latest_revision, [:latest_release, 'REVISION']
Expand Down
2 changes: 1 addition & 1 deletion lib/engineyard-serverside/shell.rb
Expand Up @@ -50,7 +50,7 @@ def info(msg) logger.info msg end
def debug(msg) logger.debug msg end
def unknown(msg) logger.unknown msg end

def exception(msg) logger.unknown "!> ERROR: #{msg}" end
def exception(msg) error msg end
# a debug outputter that displays a command being run
# Formatis like this:
# $ cmd blah do \
Expand Down
2 changes: 1 addition & 1 deletion spec/bundler_deploy_spec.rb
Expand Up @@ -85,7 +85,7 @@
before(:all) do
begin
deploy_test_application('bundle_fails', :verbose => false)
rescue SystemExit
rescue EY::Serverside::RemoteFailure
end
end

Expand Down
18 changes: 10 additions & 8 deletions spec/custom_deploy_spec.rb
Expand Up @@ -18,6 +18,12 @@ def initialize(*a)
@call_order = []
end

def run(*)
end

def sudo(*)
end

def push_code() @call_order << 'push_code' end
def copy_repository_cache() @call_order << 'copy_repository_cache' end
def create_revision_file() @call_order << 'create_revision_file' end
Expand All @@ -39,7 +45,7 @@ def gc_repository_cache() @call_order << 'gc_repository_cache' end
'framework_env' => 'staging',
})

td = TestDeploy.new(test_servers, config, test_shell)
td = TestDeploy.realnew(test_servers, config, test_shell)
td.deploy

############################# IMPORTANT ####################################
Expand Down Expand Up @@ -70,14 +76,10 @@ def gc_repository_cache() @call_order << 'gc_repository_cache' end
end

describe "task overrides" do
class TestQuietDeploy < EY::Serverside::Deploy
def puts(*_) 'quiet' end
end

before(:each) do
@tempdir = `mktemp -d -t custom_deploy_spec.XXXXX`.strip
@config = EY::Serverside::Deploy::Configuration.new('app' => 'app_name', 'repository_cache' => @tempdir)
@deploy = TestQuietDeploy.new(test_servers, @config, test_shell)
@deploy = FullTestDeploy.realnew(test_servers, @config, test_shell)
end

def write_eydeploy(relative_path, contents = "def got_new_methods() 'from the file on disk' end")
Expand Down Expand Up @@ -105,11 +107,11 @@ def write_eydeploy(relative_path, contents = "def got_new_methods() 'from the fi
it "lets you super up from any defined methods" do
write_eydeploy 'eydeploy.rb', "def value() super << ' + derived' end"

class TestDeploySuper < TestQuietDeploy
class TestDeploySuper < FullTestDeploy
def value() 'base' end
end

deploy = TestDeploySuper.new(test_servers, @config, test_shell)
deploy = TestDeploySuper.realnew(test_servers, @config, test_shell)
deploy.require_custom_tasks
deploy.value.should == "base + derived"
end
Expand Down
2 changes: 1 addition & 1 deletion spec/deploy_hook_spec.rb
Expand Up @@ -24,7 +24,7 @@
before(:all) do
begin
deploy_test_application('hook_fails', :verbose => false)
rescue SystemExit
rescue EY::Serverside::RemoteFailure
end
end

Expand Down
6 changes: 3 additions & 3 deletions spec/restart_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'

class TestRestartDeploy < EY::Serverside::Deploy
class TestRestartDeploy < FullTestDeploy
attr_reader :call_order
def initialize(*a)
super
Expand All @@ -21,7 +21,7 @@ def conditionally_enable_maintenance_page() @call_order << 'conditionally_enabl

it "puts up the maintenance page if necessary, restarts, and takes down the maintenance page" do
config = EY::Serverside::Deploy::Configuration.new('deploy_to' => deploy_dir, 'app' => 'app_name')
deployer = TestRestartWithMaintenancePage.new(test_servers, config, test_shell)
deployer = TestRestartWithMaintenancePage.realnew(test_servers, config, test_shell)
deployer.restart_with_maintenance_page
deployer.call_order.should == %w(
require_custom_tasks
Expand All @@ -36,7 +36,7 @@ def conditionally_enable_maintenance_page() @call_order << 'conditionally_enabl

it "requires a maintenance page" do
config = EY::Serverside::Deploy::Configuration.new('deploy_to' => deploy_dir, 'app' => 'app_name', 'stack' => 'glassfish')
deployer = TestRestartDeploy.new(test_servers, config, test_shell)
deployer = TestRestartDeploy.realnew(test_servers, config, test_shell)
deployer.restart_with_maintenance_page
deployer.call_order.should include('enable_maintenance_page')
end
Expand Down

0 comments on commit 331012b

Please sign in to comment.