taste_tester 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,7 +22,7 @@ module TasteTester
22
22
  include TasteTester::Logging
23
23
  include BetweenMeals::Util
24
24
 
25
- attr_reader :output
25
+ attr_reader :output, :status
26
26
 
27
27
  def initialize
28
28
  print_noop_warning
@@ -48,7 +48,7 @@ module TasteTester
48
48
  alias << add
49
49
 
50
50
  def run
51
- run!
51
+ @status, @output = run!
52
52
  end
53
53
 
54
54
  def run!
@@ -56,6 +56,10 @@ module TasteTester
56
56
  [0, "# TasteTester by #{@user}"]
57
57
  end
58
58
 
59
+ def error!
60
+ # never fails, but interface requires a definition
61
+ end
62
+
59
63
  private
60
64
 
61
65
  def cmd
@@ -30,13 +30,14 @@ module TasteTester
30
30
  include TasteTester::Logging
31
31
  extend ::BetweenMeals::Util
32
32
 
33
- attr_accessor :user, :host
33
+ attr_accessor :user, :host, :bundle_dir
34
34
 
35
35
  def initialize
36
36
  @state = TasteTester::State.new
37
37
  @ref_file = TasteTester::Config.ref_file
38
38
  ref_dir = File.dirname(File.expand_path(@ref_file))
39
- @log_file = "#{ref_dir}/chef-zero.log"
39
+ @log_file = File.join(ref_dir, 'chef-zero.log')
40
+ @fsroot = File.join(ref_dir, 'root')
40
41
  @zero_path = TasteTester::Config.chef_zero_path
41
42
  unless File.directory?(ref_dir)
42
43
  begin
@@ -46,6 +47,10 @@ module TasteTester
46
47
  logger.warn(e)
47
48
  end
48
49
  end
50
+ if TasteTester::Config.bundle
51
+ @bundle_dir = File.join(@fsroot, 'organizations/chef/file_store')
52
+ FileUtils.mkpath(@bundle_dir)
53
+ end
49
54
 
50
55
  @user = ENV['USER']
51
56
 
@@ -53,7 +58,8 @@ module TasteTester
53
58
  # determines if we listen only on localhost or not
54
59
  @need_restart = @state.ssl != TasteTester::Config.use_ssl ||
55
60
  @state.logging != TasteTester::Config.chef_zero_logging ||
56
- @state.ssh != TasteTester::Config.use_ssh_tunnels
61
+ @state.ssh != TasteTester::Config.use_ssh_tunnels ||
62
+ @state.bundle != TasteTester::Config.bundle
57
63
 
58
64
  # If we are using SSH tunneling listen on localhost, otherwise listen
59
65
  # on all addresses - both v4 and v6. Note that on localhost, ::1 is
@@ -121,10 +127,20 @@ module TasteTester
121
127
  @state.ref = ref
122
128
  end
123
129
 
130
+ def last_upload_time
131
+ @state.last_upload_time
132
+ end
133
+
134
+ def last_upload_time=(time)
135
+ @state.last_upload_time = time
136
+ end
137
+
124
138
  def self.running?
125
139
  if TasteTester::State.port
126
- return port_open?(TasteTester::State.port)
140
+ return chef_zero_running?(TasteTester::State.port,
141
+ TasteTester::Config.use_ssl)
127
142
  end
143
+
128
144
  false
129
145
  end
130
146
 
@@ -152,18 +168,20 @@ module TasteTester
152
168
  :ssl => TasteTester::Config.use_ssl,
153
169
  :ssh => TasteTester::Config.use_ssh_tunnels,
154
170
  :logging => TasteTester::Config.chef_zero_logging,
171
+ :bundle => TasteTester::Config.bundle,
155
172
  })
156
173
  logger.info("Starting chef-zero of port #{@state.port}")
157
174
  if windows?
158
175
  extend ::TasteTester::Windows
159
176
  start_win_chef_zero_server
160
177
  else
161
- cmd = "#{chef_zero_path} --host #{@addr} --port #{@state.port} -d"
178
+ cmd = +"#{chef_zero_path} --host #{@addr} --port #{@state.port} -d"
162
179
  if TasteTester::Config.chef_zero_logging
163
180
  cmd << " --log-file #{@log_file}" +
164
181
  ' --log-level debug'
165
182
  end
166
183
  cmd << ' --ssl' if TasteTester::Config.use_ssl
184
+ cmd << " --file-store #{@fsroot}" if TasteTester::Config.bundle
167
185
  Mixlib::ShellOut.new(cmd).run_command.error!
168
186
  end
169
187
  end
@@ -22,11 +22,10 @@ module TasteTester
22
22
  include TasteTester::Logging
23
23
  include BetweenMeals::Util
24
24
 
25
- attr_reader :output
25
+ attr_reader :output, :status
26
26
 
27
- def initialize(host, timeout = 5, tunnel = false)
27
+ def initialize(host, tunnel = false)
28
28
  @host = host
29
- @timeout = timeout
30
29
  @tunnel = tunnel
31
30
  @cmds = []
32
31
  end
@@ -44,18 +43,20 @@ module TasteTester
44
43
  def run!
45
44
  @status, @output = exec!(cmd, logger)
46
45
  rescue StandardError => e
47
- # rubocop:disable LineLength
48
- error = <<-MSG
46
+ logger.error(e.message)
47
+ error!
48
+ end
49
+
50
+ def error!
51
+ error = <<-ERRORMESSAGE
49
52
  SSH returned error while connecting to #{TasteTester::Config.user}@#{@host}
50
53
  The host might be broken or your SSH access is not working properly
51
54
  Try doing
52
55
  #{TasteTester::Config.ssh_command} -v #{TasteTester::Config.user}@#{@host}
53
56
  and come back once that works
54
- MSG
55
- # rubocop:enable LineLength
57
+ ERRORMESSAGE
56
58
  error.lines.each { |x| logger.error x.strip }
57
- logger.error(e.message)
58
- raise TasteTester::Exceptions::SshError
59
+ fail TasteTester::Exceptions::SshError
59
60
  end
60
61
 
61
62
  private
@@ -66,7 +67,8 @@ MSG
66
67
  end
67
68
  cmds = @cmds.join(' && ')
68
69
  cmd = "#{TasteTester::Config.ssh_command} " +
69
- "-T -o BatchMode=yes -o ConnectTimeout=#{@timeout} " +
70
+ '-T -o BatchMode=yes ' +
71
+ "-o ConnectTimeout=#{TasteTester::Config.ssh_connect_timeout} " +
70
72
  "#{TasteTester::Config.user}@#{@host} "
71
73
  if TasteTester::Config.user != 'root'
72
74
  cc = Base64.encode64(cmds).delete("\n")
@@ -17,6 +17,7 @@
17
17
  require 'fileutils'
18
18
  require 'socket'
19
19
  require 'timeout'
20
+ require 'chef/mash'
20
21
 
21
22
  require 'between_meals/util'
22
23
  require 'taste_tester/config'
@@ -29,9 +30,7 @@ module TasteTester
29
30
  include ::BetweenMeals::Util
30
31
 
31
32
  def initialize
32
- ref_dir = File.dirname(
33
- File.expand_path(TasteTester::Config.ref_file),
34
- )
33
+ ref_dir = File.dirname(File.expand_path(TasteTester::Config.ref_file))
35
34
  unless File.directory?(ref_dir)
36
35
  begin
37
36
  FileUtils.mkpath(ref_dir)
@@ -83,6 +82,22 @@ module TasteTester
83
82
  write(:ref, ref)
84
83
  end
85
84
 
85
+ def last_upload_time
86
+ TasteTester::State.read(:last_upload_time)
87
+ end
88
+
89
+ def last_upload_time=(time)
90
+ write(:last_upload_time, time)
91
+ end
92
+
93
+ def bundle
94
+ TasteTester::State.read(:bundle)
95
+ end
96
+
97
+ def bundle=(bundle)
98
+ write(:bundle, bundle)
99
+ end
100
+
86
101
  def update(vals)
87
102
  merge(vals)
88
103
  end
@@ -120,6 +135,10 @@ module TasteTester
120
135
  end
121
136
 
122
137
  def merge(vals)
138
+ # we generally use symbols for the keys, but to/from JSON will
139
+ # give us strings, and thus duplicate keys, which is bad. So
140
+ # use a Mash
141
+ state = Mash.new
123
142
  begin
124
143
  state = JSON.parse(File.read(TasteTester::Config.ref_file))
125
144
  rescue StandardError
@@ -22,10 +22,9 @@ module TasteTester
22
22
 
23
23
  attr_reader :port
24
24
 
25
- def initialize(host, server, timeout = 5)
25
+ def initialize(host, server)
26
26
  @host = host
27
27
  @server = server
28
- @timeout = timeout
29
28
  if TasteTester::Config.testing_until
30
29
  @delta_secs = TasteTester::Config.testing_until.strftime('%s').to_i -
31
30
  Time.now.strftime('%s').to_i
@@ -38,8 +37,8 @@ module TasteTester
38
37
  @port = TasteTester::Config.tunnel_port
39
38
  logger.info("Setting up tunnel on port #{@port}")
40
39
  @status, @output = exec!(cmd, logger)
41
- rescue StandardError
42
- logger.error 'Failed bringing up ssh tunnel'
40
+ rescue StandardError => e
41
+ logger.error "Failed bringing up ssh tunnel: #{e}"
43
42
  exit(1)
44
43
  end
45
44
 
@@ -58,7 +57,8 @@ module TasteTester
58
57
  # in a way that port was still open, but subsequent requests were hanging.
59
58
  # This is reproducible and should be looked into.
60
59
  cmd = "#{TasteTester::Config.ssh_command} " +
61
- "-T -o BatchMode=yes -o ConnectTimeout=#{@timeout} " +
60
+ "-o ConnectTimeout=#{TasteTester::Config.ssh_connect_timeout} " +
61
+ '-T -o BatchMode=yes ' +
62
62
  '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' +
63
63
  "-o ServerAliveInterval=10 -o ServerAliveCountMax=#{@max_ping} " +
64
64
  "-f -R #{@port}:localhost:#{@server.port} "
@@ -40,6 +40,7 @@ module TasteTester
40
40
  cmd << " --log-file #{@log_file} --log-level debug"
41
41
  end
42
42
  cmd << ' --ssl' if TasteTester::Config.use_ssl
43
+ cmd << " --file-store #{@fsroot}" if TasteTester::Config.bundle
43
44
 
44
45
  # Mixlib::Shellout will always wait for a process to finish before
45
46
  # returning, so we use `spawn` instead.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taste_tester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Dibowitz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-18 00:00:00.000000000 Z
12
+ date: 2019-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: between_meals
@@ -26,21 +26,21 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: 0.0.6
28
28
  - !ruby/object:Gem::Dependency
29
- name: mixlib-config
29
+ name: json
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: 2.0.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: 2.0.0
42
42
  - !ruby/object:Gem::Dependency
43
- name: colorize
43
+ name: mixlib-config
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
@@ -54,13 +54,13 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: rubocop
57
+ name: colorize
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
- type: :development
63
+ type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
@@ -95,6 +95,34 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: minitar
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: 0.6.1
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 0.6.1
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '='
117
+ - !ruby/object:Gem::Version
118
+ version: 0.49.1
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.49.1
98
126
  description: Utility for testing Chef changes using chef-zero
99
127
  email:
100
128
  executables:
@@ -142,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
170
  version: '0'
143
171
  requirements: []
144
172
  rubyforge_project:
145
- rubygems_version: 2.6.11
173
+ rubygems_version: 2.7.6.2
146
174
  signing_key:
147
175
  specification_version: 4
148
176
  summary: Taste Tester