engineyard-serverside 1.5.29.pre.timestamps2 → 1.5.30

Sign up to get free protection for your applications and to get access to all the features.
data/spec/spec_helper.rb CHANGED
@@ -17,9 +17,27 @@ module EY
17
17
  @node = nil
18
18
  end
19
19
 
20
- class Shell
20
+ module LoggedOutput
21
+ def self.enable_actual_info!
22
+ @use_actual_info = true
23
+ end
24
+
25
+ def self.disable_actual_info!
26
+ @use_actual_info = false
27
+ end
28
+
29
+ def self.use_actual_info?
30
+ @use_actual_info
31
+ end
32
+
33
+ alias old_info info
34
+ def info(*args)
35
+ if EY::Serverside::LoggedOutput.use_actual_info?
36
+ old_info(*args)
37
+ end
38
+ end
39
+
21
40
  def logged_system(cmd)
22
- running(cmd)
23
41
  output = `#{cmd} 2>&1`
24
42
  successful = ($? == 0)
25
43
  if ENV['VERBOSE']
@@ -46,7 +64,8 @@ FileUtils.rm_rf GITREPO_DIR if File.exists? GITREPO_DIR
46
64
  Kernel.system "tar xzf #{GITREPO_DIR}.tar.gz -C #{FIXTURES_DIR}"
47
65
 
48
66
  Spec::Runner.configure do |config|
49
- $NPM_INSTALLED = system('which npm 2>&1')
67
+ `which npm 2>&1`
68
+ $NPM_INSTALLED = ($? == 0)
50
69
  unless $NPM_INSTALLED
51
70
  $stderr.puts "npm not found; skipping Node.js specs."
52
71
  end
@@ -57,37 +76,10 @@ Spec::Runner.configure do |config|
57
76
  EY::Serverside.dna_json = {}.to_json
58
77
  end
59
78
 
60
- def stdout
61
- @stdout ||= StringIO.new
62
- end
63
-
64
- def stderr
65
- @stderr ||= StringIO.new
66
- end
67
-
68
- def read_stdout
69
- stdout.rewind
70
- stdout.read
71
- end
72
-
73
- def read_stderr
74
- stderr.rewind
75
- stderr.read
76
- end
77
-
78
- def read_output
79
- read_stdout + "\n" + read_stderr
80
- end
81
-
82
- def test_shell
83
- log_path = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}.log")
84
- EY::Serverside::Shell.new(:verbose => true, :log_path => log_path, :stdout => stdout, :stderr => stderr)
85
- end
86
-
87
79
  def deploy_test_application(assets_enabled = true, &block)
88
80
  $DISABLE_GEMFILE = false
89
81
  $DISABLE_LOCKFILE = false
90
- @deploy_dir = Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}")
82
+ @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
91
83
 
92
84
  # set up EY::Serverside::Server like we're on a solo
93
85
  EY::Serverside::Server.reset
@@ -96,7 +88,7 @@ Spec::Runner.configure do |config|
96
88
  # run a deploy
97
89
  @config = EY::Serverside::Deploy::Configuration.new({
98
90
  "strategy" => "IntegrationSpec",
99
- "deploy_to" => @deploy_dir.to_s,
91
+ "deploy_to" => @deploy_dir,
100
92
  "group" => `id -gn`.strip,
101
93
  "stack" => 'nginx_passenger',
102
94
  "migrate" => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating",
@@ -105,16 +97,16 @@ Spec::Runner.configure do |config|
105
97
  })
106
98
 
107
99
  # pretend there is a shared bundled_gems directory
108
- @deploy_dir.join('shared', 'bundled_gems').mkpath
100
+ FileUtils.mkdir_p(File.join(@deploy_dir, 'shared', 'bundled_gems'))
109
101
  %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
110
- @deploy_dir.join('shared', 'bundled_gems', name).open("w") { |f| f.write("old\n") }
102
+ File.open(File.join(@deploy_dir, 'shared', 'bundled_gems', name), "w") { |f| f.write("old\n") }
111
103
  end
112
104
 
113
105
  # Set up the application directory to have the requested asset options.
114
106
  prepare_rails31_app(assets_enabled)
115
107
 
116
108
  @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
117
- @deployer = FullTestDeploy.new(@config, test_shell)
109
+ @deployer = FullTestDeploy.new(@config)
118
110
  @deployer.deploy(&block)
119
111
  end
120
112
 
@@ -17,6 +17,7 @@ describe "Deploying an application with sqlite3 as the only DB adapter in the Ge
17
17
  @framework_env = deployer.framework_env
18
18
  end
19
19
  end
20
+
20
21
 
21
22
  it 'should symlink database.sqlite3.yml' do
22
23
  File.exist?(File.join(@release_path, 'config', 'database.yml')).should be_true
@@ -1,13 +1,25 @@
1
1
  class FullTestDeploy < EY::Serverside::Deploy
2
- attr_reader :commands
2
+ attr_reader :infos, :debugs, :commands
3
3
 
4
4
  def initialize(*)
5
5
  super
6
+ @infos = []
7
+ @debugs = []
6
8
  @commands = []
7
9
  @gemfile_contents = nil
8
10
  @lockfile_contents = nil
9
11
  end
10
12
 
13
+ # stfu
14
+ def info(msg)
15
+ @infos << msg
16
+ end
17
+
18
+ # no really, stfu
19
+ def debug(msg)
20
+ @debugs << msg
21
+ end
22
+
11
23
  # passwordless sudo is neither guaranteed nor desired
12
24
  def sudo(cmd)
13
25
  run(cmd)
metadata CHANGED
@@ -1,16 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-serverside
3
3
  version: !ruby/object:Gem::Version
4
- hash: 8141375
5
- prerelease: 7
4
+ hash: 63
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 5
9
- - 29
10
- - pre
11
- - timestamps
12
- - 2
13
- version: 1.5.29.pre.timestamps2
9
+ - 30
10
+ version: 1.5.30
14
11
  platform: ruby
15
12
  authors:
16
13
  - EY Cloud Team
@@ -18,12 +15,10 @@ autorequire:
18
15
  bindir: bin
19
16
  cert_chain: []
20
17
 
21
- date: 2012-02-05 00:00:00 Z
18
+ date: 2012-02-29 00:00:00 Z
22
19
  dependencies:
23
20
  - !ruby/object:Gem::Dependency
24
- name: rspec
25
- prerelease: false
26
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
27
22
  none: false
28
23
  requirements:
29
24
  - - "="
@@ -34,12 +29,12 @@ dependencies:
34
29
  - 3
35
30
  - 2
36
31
  version: 1.3.2
32
+ prerelease: false
33
+ requirement: *id001
37
34
  type: :development
38
- version_requirements: *id001
35
+ name: rspec
39
36
  - !ruby/object:Gem::Dependency
40
- name: rake
41
- prerelease: false
42
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
43
38
  none: false
44
39
  requirements:
45
40
  - - ">="
@@ -51,12 +46,12 @@ dependencies:
51
46
  - 2
52
47
  - 2
53
48
  version: 0.9.2.2
49
+ prerelease: false
50
+ requirement: *id002
54
51
  type: :development
55
- version_requirements: *id002
52
+ name: rake
56
53
  - !ruby/object:Gem::Dependency
57
- name: rdoc
58
- prerelease: false
59
- requirement: &id003 !ruby/object:Gem::Requirement
54
+ version_requirements: &id003 !ruby/object:Gem::Requirement
60
55
  none: false
61
56
  requirements:
62
57
  - - ">="
@@ -65,12 +60,12 @@ dependencies:
65
60
  segments:
66
61
  - 0
67
62
  version: "0"
63
+ prerelease: false
64
+ requirement: *id003
68
65
  type: :development
69
- version_requirements: *id003
66
+ name: rdoc
70
67
  - !ruby/object:Gem::Dependency
71
- name: timecop
72
- prerelease: false
73
- requirement: &id004 !ruby/object:Gem::Requirement
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
74
69
  none: false
75
70
  requirements:
76
71
  - - ">="
@@ -79,8 +74,10 @@ dependencies:
79
74
  segments:
80
75
  - 0
81
76
  version: "0"
77
+ prerelease: false
78
+ requirement: *id004
82
79
  type: :development
83
- version_requirements: *id004
80
+ name: timecop
84
81
  description:
85
82
  email: cloud@engineyard.com
86
83
  executables:
@@ -101,9 +98,9 @@ files:
101
98
  - lib/engineyard-serverside/futures/celluloid.rb
102
99
  - lib/engineyard-serverside/futures/dataflow.rb
103
100
  - lib/engineyard-serverside/lockfile_parser.rb
101
+ - lib/engineyard-serverside/logged_output.rb
104
102
  - lib/engineyard-serverside/rails_asset_support.rb
105
103
  - lib/engineyard-serverside/server.rb
106
- - lib/engineyard-serverside/shell.rb
107
104
  - lib/engineyard-serverside/strategies/git.rb
108
105
  - lib/engineyard-serverside/task.rb
109
106
  - lib/engineyard-serverside/version.rb
@@ -350,12 +347,12 @@ files:
350
347
  - spec/fixtures/valid_hook.rb
351
348
  - spec/git_strategy_spec.rb
352
349
  - spec/lockfile_parser_spec.rb
350
+ - spec/logged_output_spec.rb
353
351
  - spec/nodejs_deploy_spec.rb
354
352
  - spec/rails31_deploy_spec.rb
355
353
  - spec/restart_spec.rb
356
354
  - spec/server_spec.rb
357
355
  - spec/services_deploy_spec.rb
358
- - spec/shell_spec.rb
359
356
  - spec/spec_helper.rb
360
357
  - spec/sqlite3_deploy_spec.rb
361
358
  - spec/support/integration.rb
@@ -422,12 +419,12 @@ test_files:
422
419
  - spec/fixtures/valid_hook.rb
423
420
  - spec/git_strategy_spec.rb
424
421
  - spec/lockfile_parser_spec.rb
422
+ - spec/logged_output_spec.rb
425
423
  - spec/nodejs_deploy_spec.rb
426
424
  - spec/rails31_deploy_spec.rb
427
425
  - spec/restart_spec.rb
428
426
  - spec/server_spec.rb
429
427
  - spec/services_deploy_spec.rb
430
- - spec/shell_spec.rb
431
428
  - spec/spec_helper.rb
432
429
  - spec/sqlite3_deploy_spec.rb
433
430
  - spec/support/integration.rb
@@ -1,151 +0,0 @@
1
- require 'logger'
2
- require 'open4'
3
-
4
- module EY
5
- module Serverside
6
- # FileIO
7
-
8
- class Shell
9
- # Compatibility with old LoggedOutput where the module was included into the class.
10
- module Helpers
11
- def verbose?
12
- shell.verbose?
13
- end
14
-
15
- def warning(*a)
16
- shell.warning(*a)
17
- end
18
-
19
- def info(*a)
20
- shell.info(*a)
21
- end
22
-
23
- def debug(*a)
24
- shell.debug(*a)
25
- end
26
-
27
- def logged_system(*a)
28
- shell.logged_system(*a)
29
- end
30
- end
31
-
32
- class Formatter
33
-
34
- def initialize(stdout, stderr, start_time, verbose)
35
- @stdout, @stderr = stdout, stderr
36
- @start = start_time.to_i
37
- @verbose = verbose
38
- end
39
-
40
- def call(severity, time, _, message)
41
- if %w[WARN ERROR FATAL].include?(severity)
42
- msg = prepend("#{timestamp(time)}!> ", "#{severity_name(severity)}#{message}")
43
- else
44
- msg = prepend(timestamp(time), message)
45
- end
46
-
47
- put_to_io(severity, msg)
48
- msg
49
- end
50
-
51
- def prepend(pre, str)
52
- str.gsub(/^/, pre).sub(/\n?\z/m,"\n")
53
- end
54
-
55
- def put_to_io(severity, msg)
56
- if severity == "DEBUG" && !@verbose
57
- # quiet
58
- elsif severity == "INFO"
59
- @stdout << msg
60
- @stdout.flush
61
- else
62
- @stderr << msg
63
- @stderr.flush
64
- end
65
- end
66
-
67
- def timestamp(datetime)
68
- diff = datetime.to_i - @start
69
- diff = 0 if diff < 0
70
- "+%2dm %02ds\t" % diff.divmod(60)
71
- end
72
-
73
- def severity_name(severity)
74
- if %w[INFO DEBUG ANY].include?(severity)
75
- ""
76
- elsif severity =='WARN'
77
- "WARNING: "
78
- else
79
- "#{severity}: "
80
- end
81
- end
82
- end
83
-
84
- class YieldIO
85
- def initialize(&block)
86
- @block = block
87
- end
88
-
89
- def <<(str)
90
- @block.call str
91
- end
92
- end
93
-
94
- attr_reader :logger
95
-
96
- def initialize(options)
97
- @start_time = options[:start_time]
98
- @verbose = options[:verbose]
99
-
100
- @log_pathname = Pathname.new(options[:log_path])
101
- @log_pathname.unlink if @log_pathname.exist? # start fresh
102
-
103
- @stdout = options[:stdout] || $stdout
104
- @stderr = options[:stderr] || $stderr
105
-
106
- @logger = Logger.new(@log_pathname.to_s)
107
- @logger.level = Logger::DEBUG # Always log to the file at debug, formatter hides debug for non-verbose
108
- @logger.formatter = Formatter.new(@stdout, @stderr, start_time, @verbose)
109
- end
110
-
111
- def start_time
112
- @start_time ||= Time.now
113
- end
114
-
115
- # a nice info outputter that prepends spermy operators for some reason.
116
- def status(msg)
117
- info msg.gsub(/^/, '~> ')
118
- end
119
-
120
- # a debug outputter that displays a command being run
121
- def running(cmd)
122
- debug ":: running #{cmd}"
123
- end
124
-
125
- def fatal(msg) logger.fatal msg end
126
- def error(msg) logger.error msg end
127
- def warning(msg) logger.warn msg end
128
- def info(msg) logger.info msg end
129
- def debug(msg) logger.debug msg end
130
-
131
- def logged_system(cmd)
132
- running(cmd)
133
- # :quiet means don't raise an error on nonzero exit status
134
- status = Open4.spawn cmd, 0 => '', 1 => out, 2 => err, :quiet => true
135
- status.exitstatus == 0
136
- end
137
-
138
- # Return an IO that outputs to stdout or not according to the verbosity settings
139
- # debug is hidden in non-verbose mode
140
- def out
141
- YieldIO.new { |msg| logger.debug(msg) }
142
- end
143
-
144
- # Return an IO that outputs to stderr
145
- # unknown always shows, but without a severity title
146
- def err
147
- YieldIO.new { |msg| logger.unknown(msg) }
148
- end
149
- end
150
- end
151
- end
data/spec/shell_spec.rb DELETED
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
- require 'tempfile'
3
- require 'timecop'
4
-
5
- describe EY::Serverside::Shell do
6
- it "has a timestamp before each line" do
7
- time1 = Time.local(2008, 9, 1, 12, 0, 0)
8
- time2 = Time.local(2008, 9, 1, 12, 3, 5)
9
- time3 = Time.local(2008, 9, 1, 12, 10, 25)
10
-
11
- @output = StringIO.new
12
- @shell = EY::Serverside::Shell.new(:verbose => true, :stdout => @output, :stderr => @output, :log_path => Pathname.new(Dir.tmpdir).join("engineyard-serverside-#{Time.now.to_i}-${$$}.log"), :start_time => time1)
13
-
14
- Timecop.freeze(time1) do
15
- @shell.debug('test1')
16
- @shell.warning('test2')
17
- end
18
- Timecop.freeze(time2) do
19
- @shell.info('test3')
20
- @shell.debug("test11\ntest12\ntest13")
21
- @shell.warning("test21\ntest22\ntest23")
22
- end
23
- Timecop.freeze(time3) do
24
- @shell.info("test31\ntest32\ntest33")
25
- end
26
-
27
- timestamp_1 = "+ 0m 00s "
28
- timestamp_2 = "+ 3m 05s "
29
- timestamp_3 = "+10m 25s "
30
- @output.rewind
31
- @output.read.should == <<-OUTPUT
32
- #{timestamp_1}test1
33
- #{timestamp_1}!> WARNING: test2
34
- #{timestamp_2}test3
35
- #{timestamp_2}test11
36
- #{timestamp_2}test12
37
- #{timestamp_2}test13
38
- #{timestamp_2}!> WARNING: test21
39
- #{timestamp_2}!> test22
40
- #{timestamp_2}!> test23
41
- #{timestamp_3}test31
42
- #{timestamp_3}test32
43
- #{timestamp_3}test33
44
- OUTPUT
45
- end
46
- end