taste_tester 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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