diff --git a/.gitignore b/.gitignore index ce2a0648..221be5b1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ spec-*/fixtures/gitrepo /coverage *~ *.swp -/spec diff --git a/Rakefile b/Rakefile index c5aef94f..50776c3e 100644 --- a/Rakefile +++ b/Rakefile @@ -19,16 +19,6 @@ RSpec::Core::RakeTask.new(:php) do |spec| t.pattern = 'spec/**/*php*_spec.rb' end -RSpec::Core::RakeTask.new(:inside) do |t| - t.rspec_opts = %w[--color] - t.pattern = 'spec-inside/**/*_spec.rb' -end - -RSpec::Core::RakeTask.new(:outside) do |t| - t.rspec_opts = %w[--color] - t.pattern = 'spec-outside/**/*_spec.rb' -end - desc "Run specs and generate coverage data" task :coverage => [:coverage_env, :spec] @@ -36,10 +26,7 @@ task :coverage_env do ENV['COVERAGE'] = '1' end -task :inside_spec => [:inside, :spec] -task :outside_spec => [:outside, :spec2] - -task :test => [:cucumber, :inside, :outside] +task :test => [:cucumber, :spec] task :default => [:test] $LOAD_PATH.unshift File.expand_path("../lib", __FILE__) diff --git a/spec-inside/engineyard-serverside/callbacks/collection/combined_spec.rb b/spec/engineyard-serverside/callbacks/collection/combined_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection/combined_spec.rb rename to spec/engineyard-serverside/callbacks/collection/combined_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb b/spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb rename to spec/engineyard-serverside/callbacks/collection/deploy_hooks_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb b/spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb rename to spec/engineyard-serverside/callbacks/collection/service_hooks/collection_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb b/spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb rename to spec/engineyard-serverside/callbacks/collection/service_hooks/combined_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/collection/service_hooks_spec.rb b/spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection/service_hooks_spec.rb rename to spec/engineyard-serverside/callbacks/collection/service_hooks_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/collection_spec.rb b/spec/engineyard-serverside/callbacks/collection_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/collection_spec.rb rename to spec/engineyard-serverside/callbacks/collection_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/distributor/remote_spec.rb b/spec/engineyard-serverside/callbacks/distributor/remote_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/distributor/remote_spec.rb rename to spec/engineyard-serverside/callbacks/distributor/remote_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb b/spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb rename to spec/engineyard-serverside/callbacks/distributor/viability_filter_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/distributor_spec.rb b/spec/engineyard-serverside/callbacks/distributor_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/distributor_spec.rb rename to spec/engineyard-serverside/callbacks/distributor_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/executor/executable_spec.rb b/spec/engineyard-serverside/callbacks/executor/executable_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/executor/executable_spec.rb rename to spec/engineyard-serverside/callbacks/executor/executable_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/executor/ruby/context_spec.rb b/spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/executor/ruby/context_spec.rb rename to spec/engineyard-serverside/callbacks/executor/ruby/context_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb b/spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb rename to spec/engineyard-serverside/callbacks/executor/ruby/executor_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/executor/ruby_spec.rb b/spec/engineyard-serverside/callbacks/executor/ruby_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/executor/ruby_spec.rb rename to spec/engineyard-serverside/callbacks/executor/ruby_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks/executor_spec.rb b/spec/engineyard-serverside/callbacks/executor_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks/executor_spec.rb rename to spec/engineyard-serverside/callbacks/executor_spec.rb diff --git a/spec-inside/engineyard-serverside/callbacks_spec.rb b/spec/engineyard-serverside/callbacks_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/callbacks_spec.rb rename to spec/engineyard-serverside/callbacks_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/base_spec.rb b/spec/engineyard-serverside/cli/workflows/base_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/base_spec.rb rename to spec/engineyard-serverside/cli/workflows/base_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb b/spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb rename to spec/engineyard-serverside/cli/workflows/calling_deploy_hooks_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/deploying_applications_spec.rb b/spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/deploying_applications_spec.rb rename to spec/engineyard-serverside/cli/workflows/deploying_applications_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb b/spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb rename to spec/engineyard-serverside/cli/workflows/disabling_maintenance_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb b/spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb rename to spec/engineyard-serverside/cli/workflows/enabling_maintenance_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/helpers_spec.rb b/spec/engineyard-serverside/cli/workflows/helpers_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/helpers_spec.rb rename to spec/engineyard-serverside/cli/workflows/helpers_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb b/spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb rename to spec/engineyard-serverside/cli/workflows/rolling_back_applications_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb b/spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb rename to spec/engineyard-serverside/cli/workflows/showing_maintenance_status_spec.rb diff --git a/spec-inside/engineyard-serverside/cli/workflows_spec.rb b/spec/engineyard-serverside/cli/workflows_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/cli/workflows_spec.rb rename to spec/engineyard-serverside/cli/workflows_spec.rb diff --git a/spec/engineyard-serverside/dependency_manager/base_spec.rb b/spec/engineyard-serverside/dependency_manager/base_spec.rb new file mode 100644 index 00000000..7df1ee26 --- /dev/null +++ b/spec/engineyard-serverside/dependency_manager/base_spec.rb @@ -0,0 +1,139 @@ +require 'spec_helper' + +require 'engineyard-serverside/dependency_manager/base' + +module EY + module Serverside + class DependencyManager + + describe Base do + let(:servers) {Object.new} + let(:config) {Object.new} + let(:shell) {Object.new} + let(:runner) {Object.new} + + let(:manager) {described_class.new(servers, config, shell, runner)} + + describe '.detect' do + let(:manager) {Object.new} + let(:detected) {false} + let(:result) {described_class.detect(servers, config, shell, runner)} + + before(:each) do + allow(described_class).to receive(:new).and_return(manager) + allow(manager).to receive(:detected?).and_return(detected) + end + + context 'when the manager can detect its dependency signature' do + let(:detected) {true} + + it 'is a new instance of the class' do + expect(result).to eql(manager) + end + end + + context 'when the manager cannot detect its dependency signature' do + let(:detected) {false} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + end + + describe '#detected?' do + let(:result) {manager.detected?} + + it 'is false' do + expect(result).to eql(false) + end + end + + describe '#check' do + let(:result) {manager.check} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + describe '#install' do + let(:result) {manager.install} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + describe '#uses_sqlite3?' do + let(:result) {manager.uses_sqlite3?} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + describe '#rails_version' do + let(:result) {manager.rails_version} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + describe '#show_ey_config_instructions' do + let(:result) {manager.show_ey_config_instructions} + + it 'is nil' do + expect(result).to eql(nil) + end + end + + describe '#paths' do + let(:paths) {Object.new} + let(:result) {manager.instance_eval {paths}} + + before(:each) do + allow(config).to receive(:paths).and_return(paths) + end + + it 'is the config paths' do + expect(result).to eql(paths) + end + end + + describe '#on_roles' do + let(:result) {manager.instance_eval {on_roles}} + + it 'is an array' do + expect(result).to be_a(Array) + end + + it 'applies to app masters' do + expect(result).to include(:app_master) + end + + it 'applies to app instances' do + expect(result).to include(:app) + end + + it 'applies to solo instances' do + expect(result).to include(:solo) + end + + it 'applies to util instances' do + expect(result).to include(:util) + end + + it 'does not apply to database instances' do + expect(result).not_to include(:db_master) + expect(result).not_to include(:db_slave) + end + end + + end + + end + end +end diff --git a/spec-inside/engineyard-serverside/propagator_spec.rb b/spec/engineyard-serverside/propagator_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/propagator_spec.rb rename to spec/engineyard-serverside/propagator_spec.rb diff --git a/spec-inside/engineyard-serverside/server_spec.rb b/spec/engineyard-serverside/server_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/server_spec.rb rename to spec/engineyard-serverside/server_spec.rb diff --git a/spec-inside/engineyard-serverside/shell/helpers_spec.rb b/spec/engineyard-serverside/shell/helpers_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/shell/helpers_spec.rb rename to spec/engineyard-serverside/shell/helpers_spec.rb diff --git a/spec-inside/engineyard-serverside/shell/yieldio_spec.rb b/spec/engineyard-serverside/shell/yieldio_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/shell/yieldio_spec.rb rename to spec/engineyard-serverside/shell/yieldio_spec.rb diff --git a/spec/engineyard-serverside/shell_spec.rb b/spec/engineyard-serverside/shell_spec.rb new file mode 100644 index 00000000..ec1046ae --- /dev/null +++ b/spec/engineyard-serverside/shell_spec.rb @@ -0,0 +1,292 @@ +require 'spec_helper' +require 'timecop' + +require 'engineyard-serverside/shell' + +module EY + module Serverside + + describe Shell do + let(:logger) {Object.new} + let(:start_time) {nil} + let(:verbose) {nil} + let(:stdout) {nil} + let(:stderr) {nil} + let(:log_path) {'fake.log'} + let(:options) { + { + :start_time => start_time, + :verbose => verbose, + :stdout => stdout, + :stderr => stderr, + :log_path => log_path + } + } + + let(:now_is_the_time) {Time.local(2020, 02, 14, 13, 0, 0)} + let(:log_pathname) {Object.new} + let(:logger) {Object.new} + let(:formatter) {Object.new} + + let(:shell) {described_class.new(options)} + + before(:each) do + # STub out the logfile to keep from leaving file system artifacts + allow(Pathname).to receive(:new).with(log_path).and_return(log_pathname) + allow(log_pathname).to receive(:exist?).and_return(false) + allow(log_pathname).to receive(:unlink) + allow(log_pathname).to receive(:to_s).and_return(log_path) + + # Stub out the actual logger for the same reason + allow(Logger).to receive(:new).and_return(logger) + allow(logger).to receive(:formatter=) + allow(logger).to receive(:level=) + + # Let's go ahead and make sure we can predict the time, too. + Timecop.freeze(now_is_the_time) + end + + after(:each) do + Timecop.return + end + + describe '.new' do + let(:result) {shell} + + it 'sets the log level to DEBUG' do + expect(logger).to receive(:level=).with(Logger::DEBUG) + + result + end + + context 'when a start time is provided' do + let(:start_time) {now_is_the_time + 3600} + + it 'formats log messages based on that start time' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, start_time, verbose). + and_call_original + + result + end + end + + context 'when no start time is provided' do + it 'formats log messages based on the current time' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, verbose). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when verbosity is requested' do + let(:verbose) {true} + + it 'formats log messages verbosely' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, true). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when verobisty is disabled' do + let(:verbose) {false} + + it 'does not use verbose formatting for logs' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, false). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when no verbosity preference is provided' do + it 'does not use verbose formatting for logs' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, nil). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when the provided log path exists' do + before(:each) do + allow(log_pathname).to receive(:exist?).and_return(true) + end + + it 'unlinks the log file' do + expect(log_pathname).to receive(:unlink) + + result + end + end + + context 'when the provided log path does not exist' do + it 'does not unlink the log file' do + expect(log_pathname).not_to receive(:unlink) + + result + end + end + + context 'when stdout is provided' do + let(:stdout) {Object.new} + + it 'passes the provided stdout to the formatter' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with(stdout, $stderr, now_is_the_time, verbose). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when stdout is not provided' do + it 'passes the real stdout to the formatter' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, verbose). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when stderr is provided' do + let(:stderr) {Object.new} + + it 'passes the provided stderr to the formatter' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, stderr, now_is_the_time, verbose). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + + context 'when stderr is not provided' do + it 'passes the real stderr to the formatter' do + expect(EY::Serverside::Shell::Formatter). + to receive(:new). + with($stdout, $stderr, now_is_the_time, verbose). + and_return(formatter) + + expect(logger).to receive(:formatter=).with(formatter) + + result + end + end + end + + describe '#logger' do + let(:result) {shell.logger} + + it 'is the logger created during initilization' do + expect(result).to eql(logger) + end + end + + describe '#start_time' do + let(:result) {shell.start_time} + + context 'when a start time was provided during initialization' do + let(:start_time) {now_is_the_time + 7200} + + it 'is the initilized start time' do + expect(result).to eql(start_time) + end + end + + context 'when no start time was provided during initialization' do + it 'is the current time as of initialization' do + expect(result).to eql(now_is_the_time) + end + end + end + + describe '#verbose?' do + let(:result) {shell.verbose?} + + context 'when verbosity was enabled during initialization' do + let(:verbose) {true} + + it 'is true' do + expect(result).to be_truthy + end + end + + context 'when verbosity was disabled during initialization' do + let(:verbose) {false} + + it 'is false' do + expect(result).to be_falsey + end + end + + context 'when verbosity was not provided at initialization' do + it 'is false' do + expect(result).to be_falsey + end + end + + + end + + describe '#status' + + describe '#substatus' + + describe '#fatal' + + describe '#error' + + describe '#warning' + + describe '#warn' + + describe '#notice' + + describe '#info' + + describe '#debug' + + describe '#unknown' + + describe '#command_show' + + describe '#comand_out' + + describe '#command_err' + + describe '#logged_system' + end + + end +end diff --git a/spec-inside/engineyard-serverside/slug/distributor_spec.rb b/spec/engineyard-serverside/slug/distributor_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/distributor_spec.rb rename to spec/engineyard-serverside/slug/distributor_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/enabler_spec.rb b/spec/engineyard-serverside/slug/enabler_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/enabler_spec.rb rename to spec/engineyard-serverside/slug/enabler_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/failure_handler_spec.rb b/spec/engineyard-serverside/slug/failure_handler_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/failure_handler_spec.rb rename to spec/engineyard-serverside/slug/failure_handler_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/finalizer_spec.rb b/spec/engineyard-serverside/slug/finalizer_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/finalizer_spec.rb rename to spec/engineyard-serverside/slug/finalizer_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/generator_spec.rb b/spec/engineyard-serverside/slug/generator_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/generator_spec.rb rename to spec/engineyard-serverside/slug/generator_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/migrator_spec.rb b/spec/engineyard-serverside/slug/migrator_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/migrator_spec.rb rename to spec/engineyard-serverside/slug/migrator_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/restarter_spec.rb b/spec/engineyard-serverside/slug/restarter_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/restarter_spec.rb rename to spec/engineyard-serverside/slug/restarter_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/source/updater_spec.rb b/spec/engineyard-serverside/slug/source/updater_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/source/updater_spec.rb rename to spec/engineyard-serverside/slug/source/updater_spec.rb diff --git a/spec-inside/engineyard-serverside/slug/source_spec.rb b/spec/engineyard-serverside/slug/source_spec.rb similarity index 100% rename from spec-inside/engineyard-serverside/slug/source_spec.rb rename to spec/engineyard-serverside/slug/source_spec.rb diff --git a/spec-inside/railway_spec.rb b/spec/railway_spec.rb similarity index 100% rename from spec-inside/railway_spec.rb rename to spec/railway_spec.rb diff --git a/spec-inside/result/failure_spec.rb b/spec/result/failure_spec.rb similarity index 100% rename from spec-inside/result/failure_spec.rb rename to spec/result/failure_spec.rb diff --git a/spec-inside/result/success_spec.rb b/spec/result/success_spec.rb similarity index 100% rename from spec-inside/result/success_spec.rb rename to spec/result/success_spec.rb diff --git a/spec-inside/result_spec.rb b/spec/result_spec.rb similarity index 100% rename from spec-inside/result_spec.rb rename to spec/result_spec.rb diff --git a/spec-inside/spec_helper.rb b/spec/spec_helper.rb similarity index 100% rename from spec-inside/spec_helper.rb rename to spec/spec_helper.rb