roku_builder 3.3.2 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fb0f1a154541f38d45f4cec4a78800d5442c4de
4
- data.tar.gz: 04f1448deacf24c15223993745750f9298b6107a
3
+ metadata.gz: 57d35cf7d34cc1a61441de8f49007204e480238b
4
+ data.tar.gz: 25124d6fee986c47d3a58cdf0b23c023482c99cb
5
5
  SHA512:
6
- metadata.gz: 40eb84586c9745d4faac4eae184c02be437966d65f71e194d0befb18c78e98e4f73a3fce23ab755ea5721242c928dec6462dea5969c75bd890da8933be0f054d
7
- data.tar.gz: 0370b82f8bf8d258f2c9ab04b88b4624e73129dd01db3e38cc97a1c15e123a7b2064a9e4820d63b3662fb8f2ca6bf24c1b6d2eb13745829cf7add45acec3ae77
6
+ metadata.gz: 4efb6c2af95286dbadf4ef3f769752908516bdc200785194dc59f35739a2f4bd6b5b70d6f50915ae343dc5ab971711c43ef344a1e910d529129f697ae7c4abda
7
+ data.tar.gz: 0a431ada9ec91e6bedcf12ceb14ccca7eb70bd841614741b5ce46e41bcc158b881ed3b221f502eebe841687bf71da6673d38cce507b8928f1750083cc5b93fa8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roku_builder (3.3.1)
4
+ roku_builder (3.3.3)
5
5
  faraday (~> 0.9)
6
6
  faraday-digestauth (~> 0.2)
7
7
  git (~> 1.2.9)
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # RokuBuilder
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/roku_builder.svg)](https://badge.fury.io/rb/roku_builder)
4
+
3
5
  A tool to help with Roku Development. Assists with the following roku
4
6
  development tasks:
5
7
 
@@ -267,8 +269,8 @@ directory:
267
269
 
268
270
  ## Improvements
269
271
 
272
+ * Account for missing folders or files
270
273
  * Increase testing
271
- * More Unit Tests
272
274
  * Intergration Tests
273
275
  * Move RokuBuilder::Controller to RokuBuilder?
274
276
  * Allow start and end delimiter for tests to be configured
data/bin/roku CHANGED
@@ -130,6 +130,10 @@ OptionParser.new do |opts|
130
130
  options[:out] = o
131
131
  end
132
132
 
133
+ opts.on("-I", "--in PATH", "Input file for sideloading") do |i|
134
+ options[:in] = i
135
+ end
136
+
133
137
  opts.on("-V", "--verbose", "Print Info message") do |v|
134
138
  options[:verbose] = v
135
139
  end
@@ -28,6 +28,9 @@ module RokuBuilder
28
28
  # No deeplink options supplied for deeplink
29
29
  BAD_DEEPLINK = 6
30
30
 
31
+ # Incorrect use of the in option
32
+ BAD_IN_FILE = 7
33
+
31
34
 
32
35
 
33
36
  ### Device Codes ###
@@ -36,7 +39,7 @@ module RokuBuilder
36
39
  CHANGED_DEVICE = -1
37
40
 
38
41
  # Device is online
39
- GOOD_DEVCICE = 0
42
+ GOOD_DEVICE = 0
40
43
 
41
44
  # User defined device was not online
42
45
  BAD_DEVICE = 1
@@ -108,11 +111,11 @@ module RokuBuilder
108
111
 
109
112
  options_code = self.validate_options(options: options, logger: logger)
110
113
 
111
- self.handle_error_codes(options_code: options_code, logger: logger)
114
+ self.handle_error_codes(options: options, options_code: options_code, logger: logger)
112
115
 
113
116
  handle_code = self.handle_options(options: options, logger: logger)
114
117
 
115
- self.handle_error_codes(handle_code: handle_code, logger: logger)
118
+ self.handle_error_codes(options: options, handle_code: handle_code, logger: logger)
116
119
  end
117
120
 
118
121
  protected
@@ -133,6 +136,9 @@ module RokuBuilder
133
136
  if sources.include?(:current)
134
137
  return BAD_CURRENT unless options[:build] or options[:sideload]
135
138
  end
139
+ if options[:in]
140
+ return BAD_IN_FILE unless options[:sideload]
141
+ end
136
142
  if options[:deeplink]
137
143
  return BAD_DEEPLINK if !options[:deeplink_options] or options[:deeplink_options].chomp == ""
138
144
  end
@@ -152,7 +158,7 @@ module RokuBuilder
152
158
 
153
159
  # Check devices
154
160
  device_code, configs = self.check_devices(options: options, config: config, configs: configs, logger: logger)
155
- self.handle_error_codes(device_code: device_code, logger: logger)
161
+ self.handle_error_codes(options: options, device_code: device_code, logger: logger)
156
162
 
157
163
  command = (self.commands & options.keys).first
158
164
  case command
@@ -193,7 +199,7 @@ module RokuBuilder
193
199
  when :build
194
200
  ### Build ###
195
201
  loader = Loader.new(**configs[:device_config])
196
- build_version = ManifestManager.build_version(**configs[:manifest_config], logger: logger)
202
+ build_version = ManifestManager.build_version(**configs[:manifest_config])
197
203
  options[:build_version] = build_version
198
204
  configs = self.update_configs(configs: configs, options: options)
199
205
  outfile = loader.build(**configs[:build_config])
@@ -245,7 +251,7 @@ module RokuBuilder
245
251
  def self.check_devices(options:, config:, configs:, logger:)
246
252
  ping = Net::Ping::External.new
247
253
  host = configs[:device_config][:ip]
248
- return [GOOD_DEVCICE, configs] if ping.ping? host, 1, 0.2, 1
254
+ return [GOOD_DEVICE, configs] if ping.ping? host, 1, 0.2, 1
249
255
  return [BAD_DEVICE, nil] if options[:device_given]
250
256
  config[:devices].each_pair {|key, value|
251
257
  unless key == :default
@@ -284,7 +290,7 @@ module RokuBuilder
284
290
  # @param options_code [Integer] the error code returned by validate_options
285
291
  # @param handle_code [Integer] the error code returned by handle_options
286
292
  # @param logger [Logger] system logger
287
- def self.handle_error_codes(options_code: nil, device_code: nil, handle_code: nil, logger:)
293
+ def self.handle_error_codes(options:, options_code: nil, device_code: nil, handle_code: nil, logger:)
288
294
  if options_code
289
295
  case options_code
290
296
  when EXTRA_COMMANDS
@@ -305,6 +311,9 @@ module RokuBuilder
305
311
  when BAD_DEEPLINK
306
312
  logger.fatal "Must supply deeplinking options when deeplinking"
307
313
  abort
314
+ when BAD_IN_FILE
315
+ logger.fatal "Can only supply in file for building"
316
+ abort
308
317
  end
309
318
  elsif device_code
310
319
  case device_code
@@ -497,7 +506,7 @@ module RokuBuilder
497
506
  password: configs[:key][:password],
498
507
  app_name_version: "#{project_config[:app_name]} - #{stage}"
499
508
  }
500
- if options[:outfile]
509
+ if options[:out_file]
501
510
  configs[:package_config][:out_file] = File.join(options[:out_folder], options[:out_file])
502
511
  end
503
512
  # Create Inspector Config
@@ -516,7 +525,8 @@ module RokuBuilder
516
525
  }
517
526
  # Create Manifest Config
518
527
  configs[:manifest_config] = {
519
- root_dir: project_config[:directory]
528
+ root_dir: project_config[:directory],
529
+ logger: logger
520
530
  }
521
531
  # Create Deeplink Config
522
532
  configs[:deeplink_config] ={
@@ -35,7 +35,7 @@ module RokuBuilder
35
35
  if app_name
36
36
  app_name = app_name[1]
37
37
  dev_id = /Dev ID:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
38
- creation_date = /Creation Date:\s*<\/td>\s*<td>\s*<font[^>]*>\s*<script[^>]*>\s*var d = new Date\(([^\)]*)\)[^<]*<\/script><\/font>\s*<\/td>/.match(response.body.gsub("\n", ''))[1]
38
+ creation_date = /new Date\(([^)]*)\)/.match(response.body.gsub("\n", ''))[1]
39
39
  dev_zip = /dev.zip:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
40
40
  else
41
41
  app_name = /App Name:[^<]*<div[^>]*>([^<]*)<\/div>/.match(response.body)[1]
@@ -10,8 +10,9 @@ module RokuBuilder
10
10
  # @param fetch [Boolean] Flag to fetch all remotes before sideloading. Default: false
11
11
  # @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
12
12
  # @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
13
+ # @param infile [String]
13
14
  # @return [String] Build version on success, nil otherwise
14
- def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil)
15
+ def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil, infile: nil)
15
16
  @root_dir = root_dir
16
17
  result = nil
17
18
  stash = nil
@@ -35,14 +35,7 @@ module RokuBuilder
35
35
  all_text = ""
36
36
  while true
37
37
  connection.waitfor(waitfor_config) do |txt|
38
- all_text += txt
39
- while line = all_text.slice!(/^.*\n/) do
40
- puts line
41
- end
42
- if all_text == "BrightScript Debugger> "
43
- print all_text
44
- all_text = ""
45
- end
38
+ all_text = manage_text(all_text: all_text, txt: txt)
46
39
  end
47
40
  end
48
41
  }
@@ -58,5 +51,23 @@ module RokuBuilder
58
51
  end
59
52
  end
60
53
  end
54
+
55
+ private
56
+
57
+ # Handel text from telnet
58
+ # @param all_text [String] remaining partial line text
59
+ # @param txt [String] current string from telnet
60
+ # @return [String] remaining partial line text
61
+ def manage_text(all_text:, txt:)
62
+ all_text += txt
63
+ while line = all_text.slice!(/^.*\n/) do
64
+ puts line
65
+ end
66
+ if all_text == "BrightScript Debugger> "
67
+ print all_text
68
+ all_text = ""
69
+ end
70
+ all_text
71
+ end
61
72
  end
62
73
  end
@@ -5,6 +5,11 @@ module RokuBuilder
5
5
  # with other testing libraries
6
6
  class Tester < Util
7
7
 
8
+ def init()
9
+ @end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
10
+ @start_reg = /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
11
+ end
12
+
8
13
  # Run tests and report results
9
14
  # @param sideload_config [Hash] The config for sideloading the app
10
15
  def run_tests(sideload_config:)
@@ -18,15 +23,25 @@ module RokuBuilder
18
23
  loader.sideload(**sideload_config)
19
24
 
20
25
  in_tests = false
21
- end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
22
- connection.waitfor(end_reg) do |txt|
23
- txt.split("\n").each do |line|
24
- in_tests = false if line =~ end_reg
25
- @logger.unknown line if in_tests
26
- in_tests = true if line =~ /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
27
- end
26
+ connection.waitfor(@end_reg) do |txt|
27
+ in_tests = handle_text(txt: txt, in_tests: in_tests)
28
28
  end
29
29
  connection.puts("cont\n")
30
30
  end
31
+
32
+ private
33
+
34
+ # Handel testing text
35
+ # @param txt [String] current text from telnet
36
+ # @param in_tests [Boolean] currently parsing test text
37
+ # @return [Boolean] currently parsing test text
38
+ def handle_text(txt:, in_tests:)
39
+ txt.split("\n").each do |line|
40
+ in_tests = false if line =~ @end_reg
41
+ @logger.unknown line if in_tests
42
+ in_tests = true if line =~ @start_reg
43
+ end
44
+ in_tests
45
+ end
31
46
  end
32
47
  end
@@ -1,4 +1,4 @@
1
1
  module RokuBuilder
2
2
  # Version of the RokuBuilder Gem
3
- VERSION = "3.3.2"
3
+ VERSION = "3.3.3"
4
4
  end
data/roku_builder.gemspec CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.required_ruby_version = "~> 2.2"
22
+
21
23
  spec.add_dependency "rubyzip", "~> 1.1"
22
24
  spec.add_dependency "faraday", "~> 0.9"
23
25
  spec.add_dependency "faraday-digestauth", "~> 0.2"
@@ -16,6 +16,19 @@ class ConfigManagerTest < Minitest::Test
16
16
  assert_equal :project1, config[:projects][:default], :project1
17
17
  end
18
18
 
19
+ def test_config_manager_read_invalid_config
20
+ logger = Logger.new("/dev/null")
21
+ config_path = "config/file/path"
22
+ io = Minitest::Mock.new
23
+ io.expect(:read, good_config.to_json+"}}}}}")
24
+ config = nil
25
+ File.stub(:open, io) do
26
+ config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
27
+ end
28
+ io.verify
29
+ assert_nil config
30
+ end
31
+
19
32
  def test_config_manager_validate_devices
20
33
  logger = Logger.new("/dev/null")
21
34
  config = good_config
@@ -0,0 +1,19 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class ControllerConfigTest < Minitest::Test
4
+ def test_manifest_config
5
+ logger = Logger.new("/dev/null")
6
+ options = {
7
+ config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
8
+ stage: 'production',
9
+ update_manifest: false,
10
+ fetch: false,
11
+ }
12
+ code, config, configs = RokuBuilder::Controller.load_config(options: options, logger: logger)
13
+
14
+ assert_equal "/dev/null", configs[:manifest_config][:root_dir]
15
+ assert_equal logger, configs[:manifest_config][:logger]
16
+
17
+
18
+ end
19
+ end
@@ -1,5 +1,13 @@
1
1
  require_relative "test_helper.rb"
2
2
 
3
+ class RokuBuilder::Controller
4
+ class << self
5
+ def abort
6
+ #do nothing
7
+ end
8
+ end
9
+ end
10
+
3
11
  class ControllerTest < Minitest::Test
4
12
  def test_controller_validate_options
5
13
  logger = Logger.new("/dev/null")
@@ -7,38 +15,50 @@ class ControllerTest < Minitest::Test
7
15
  sideload: true,
8
16
  package: true
9
17
  }
10
- assert_equal 1, RokuBuilder::Controller.validate_options(options: options, logger: logger)
18
+ assert_equal RokuBuilder::Controller::EXTRA_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
11
19
  options = {}
12
- assert_equal 2, RokuBuilder::Controller.validate_options(options: options, logger: logger)
20
+ assert_equal RokuBuilder::Controller::NO_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
13
21
  options = {
14
22
  sideload: true,
15
23
  working: true,
16
24
  current: true
17
25
  }
18
- assert_equal 3, RokuBuilder::Controller.validate_options(options: options, logger: logger)
26
+ assert_equal RokuBuilder::Controller::EXTRA_SOURCES, RokuBuilder::Controller.validate_options(options: options, logger: logger)
19
27
  options = {
20
28
  sideload: true,
21
29
  working: true
22
30
  }
23
- assert_equal 0, RokuBuilder::Controller.validate_options(options: options, logger: logger)
31
+ assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
24
32
  options = {
25
33
  package: true
26
34
  }
27
- assert_equal 4, RokuBuilder::Controller.validate_options(options: options, logger: logger)
35
+ assert_equal RokuBuilder::Controller::NO_SOURCE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
28
36
  options = {
29
37
  package: true,
30
38
  current: true
31
39
  }
32
- assert_equal 5, RokuBuilder::Controller.validate_options(options: options, logger: logger)
40
+ assert_equal RokuBuilder::Controller::BAD_CURRENT, RokuBuilder::Controller.validate_options(options: options, logger: logger)
33
41
  options = {
34
42
  deeplink: true
35
43
  }
36
- assert_equal 6, RokuBuilder::Controller.validate_options(options: options, logger: logger)
44
+ assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
37
45
  options = {
38
46
  deeplink: true,
39
47
  deeplink_options: ""
40
48
  }
41
- assert_equal 6, RokuBuilder::Controller.validate_options(options: options, logger: logger)
49
+ assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
50
+ options = {
51
+ sideload: true,
52
+ in: "",
53
+ current: true
54
+ }
55
+ assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
56
+ options = {
57
+ package: true,
58
+ in: "",
59
+ set_stage: true
60
+ }
61
+ assert_equal RokuBuilder::Controller::BAD_IN_FILE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
42
62
  end
43
63
  def test_controller_configure
44
64
  logger = Logger.new("/dev/null")
@@ -66,6 +86,16 @@ class ControllerTest < Minitest::Test
66
86
  assert File.exists?(target_config)
67
87
  config = RokuBuilder::ConfigManager.get_config(config: target_config, logger: logger)
68
88
  assert_equal "111.222.333.444", config[:devices][:roku][:ip]
89
+
90
+ options = {
91
+ configure: true,
92
+ config: target_config
93
+ }
94
+
95
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
96
+
97
+ assert_equal RokuBuilder::Controller::CONFIG_OVERWRITE, code
98
+
69
99
  File.delete(target_config) if File.exists?(target_config)
70
100
  end
71
101
 
@@ -169,8 +199,99 @@ class ControllerTest < Minitest::Test
169
199
  target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
170
200
  File.delete(target_config) if File.exists?(target_config)
171
201
  FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
202
+ keyer = Minitest::Mock.new
172
203
  loader = Minitest::Mock.new
173
- #TODO
204
+ packager = Minitest::Mock.new
205
+ inspector = Minitest::Mock.new
206
+
207
+ options = {package: true, inspect: true, stage: 'production', out_folder: "/tmp", config: target_config}
208
+ configs = {
209
+ device_config: {},
210
+ sideload_config: {},
211
+ key: {},
212
+ package_config: {
213
+ app_name_version: "app - production - build_version",
214
+ out_file: "/tmp/app_production_build_version.pkg"
215
+ },
216
+ project_config: {app_name: "app"},
217
+ inspect_config: {}
218
+ }
219
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
220
+
221
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
222
+ keyer.expect(:rekey, true, [configs[:key]])
223
+ packager.expect(:package, true, [configs[:package_config]])
224
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
225
+
226
+ code = nil
227
+ RokuBuilder::Keyer.stub(:new, keyer) do
228
+ RokuBuilder::Loader.stub(:new, loader) do
229
+ RokuBuilder::Packager.stub(:new, packager) do
230
+ RokuBuilder::Inspector.stub(:new, inspector) do
231
+ RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
232
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
233
+ end
234
+ end
235
+ end
236
+ end
237
+ end
238
+ assert_equal RokuBuilder::Controller::SUCCESS, code
239
+
240
+ keyer.verify
241
+ loader.verify
242
+ packager.verify
243
+ inspector.verify
244
+ File.delete(target_config) if File.exists?(target_config)
245
+ end
246
+
247
+ def test_controller_package_outfile
248
+ logger = Logger.new("/dev/null")
249
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
250
+ File.delete(target_config) if File.exists?(target_config)
251
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
252
+ keyer = Minitest::Mock.new
253
+ loader = Minitest::Mock.new
254
+ packager = Minitest::Mock.new
255
+ inspector = Minitest::Mock.new
256
+
257
+ options = {package: true, inspect: true, stage: 'production', out: "/tmp/out.pkg", config: target_config}
258
+ configs = {
259
+ device_config: {},
260
+ sideload_config: {},
261
+ key: {},
262
+ package_config: {
263
+ app_name_version: "app - production - build_version",
264
+ out_file: "/tmp/out.pkg"
265
+ },
266
+ project_config: {app_name: "app"},
267
+ inspect_config: {}
268
+ }
269
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
270
+
271
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
272
+ keyer.expect(:rekey, true, [configs[:key]])
273
+ packager.expect(:package, true, [configs[:package_config]])
274
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
275
+
276
+ code = nil
277
+ RokuBuilder::Keyer.stub(:new, keyer) do
278
+ RokuBuilder::Loader.stub(:new, loader) do
279
+ RokuBuilder::Packager.stub(:new, packager) do
280
+ RokuBuilder::Inspector.stub(:new, inspector) do
281
+ RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
282
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
288
+ assert_equal RokuBuilder::Controller::SUCCESS, code
289
+
290
+ keyer.verify
291
+ loader.verify
292
+ packager.verify
293
+ inspector.verify
294
+ File.delete(target_config) if File.exists?(target_config)
174
295
  end
175
296
 
176
297
  def test_controller_build
@@ -199,6 +320,8 @@ class ControllerTest < Minitest::Test
199
320
  end
200
321
  end
201
322
  assert_equal RokuBuilder::Controller::SUCCESS, code
323
+ loader.verify
324
+ File.delete(target_config) if File.exists?(target_config)
202
325
  end
203
326
  def test_controller_update
204
327
  logger = Logger.new("/dev/null")
@@ -223,6 +346,7 @@ class ControllerTest < Minitest::Test
223
346
  end
224
347
  mock.verify
225
348
  assert_equal RokuBuilder::Controller::SUCCESS, code
349
+ File.delete(target_config) if File.exists?(target_config)
226
350
  end
227
351
 
228
352
  def test_controller_deeplink
@@ -245,6 +369,361 @@ class ControllerTest < Minitest::Test
245
369
  end
246
370
  mock.verify
247
371
  assert_equal RokuBuilder::Controller::SUCCESS, code
372
+ File.delete(target_config) if File.exists?(target_config)
373
+ end
374
+ def test_controller_delete
375
+ logger = Logger.new("/dev/null")
376
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
377
+ File.delete(target_config) if File.exists?(target_config)
378
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
379
+ loader = Minitest::Mock.new
380
+
381
+ options = {delete: true, stage: 'production', config: target_config}
382
+ loader.expect(:unload, nil)
383
+ code = nil
384
+ RokuBuilder::Loader.stub(:new, loader) do
385
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
386
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
387
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
388
+ end
389
+ end
390
+ end
391
+ assert_equal RokuBuilder::Controller::SUCCESS, code
392
+ loader.verify
393
+ File.delete(target_config) if File.exists?(target_config)
394
+ end
395
+ def test_controller_monitor
396
+ logger = Logger.new("/dev/null")
397
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
398
+ File.delete(target_config) if File.exists?(target_config)
399
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
400
+ monitor = Minitest::Mock.new
401
+
402
+ options = {monitor: "main", stage: 'production', config: target_config}
403
+ monitor.expect(:monitor, nil, [{}])
404
+ code = nil
405
+ RokuBuilder::Monitor.stub(:new, monitor) do
406
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
407
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, monitor_config: {}}]) do
408
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
409
+ end
410
+ end
411
+ end
412
+ assert_equal RokuBuilder::Controller::SUCCESS, code
413
+ monitor.verify
414
+ File.delete(target_config) if File.exists?(target_config)
415
+ end
416
+ def test_controller_navigate
417
+ logger = Logger.new("/dev/null")
418
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
419
+ File.delete(target_config) if File.exists?(target_config)
420
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
421
+ navigator = Minitest::Mock.new
422
+
423
+ options = {navigate: "up", stage: 'production', config: target_config}
424
+ navigator.expect(:nav, true, [{}])
425
+ code = nil
426
+ RokuBuilder::Navigator.stub(:new, navigator) do
427
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
428
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
429
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
430
+ end
431
+ end
432
+ end
433
+ assert_equal RokuBuilder::Controller::SUCCESS, code
434
+ navigator.verify
435
+ File.delete(target_config) if File.exists?(target_config)
436
+ end
437
+ def test_controller_navigate_fail
438
+ logger = Logger.new("/dev/null")
439
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
440
+ File.delete(target_config) if File.exists?(target_config)
441
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
442
+ navigator = Minitest::Mock.new
443
+
444
+ options = {navigate: "up", stage: 'production', config: target_config}
445
+ navigator.expect(:nav, nil, [{}])
446
+ code = nil
447
+ RokuBuilder::Navigator.stub(:new, navigator) do
448
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
449
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
450
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
451
+ end
452
+ end
453
+ end
454
+ assert_equal RokuBuilder::Controller::FAILED_NAVIGATING, code
455
+ navigator.verify
456
+ File.delete(target_config) if File.exists?(target_config)
457
+ end
458
+ def test_controller_screen
459
+ logger = Logger.new("/dev/null")
460
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
461
+ File.delete(target_config) if File.exists?(target_config)
462
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
463
+ navigator = Minitest::Mock.new
464
+
465
+ options = {screen: "secret", stage: 'production', config: target_config}
466
+ navigator.expect(:screen, true, [{}])
467
+ code = nil
468
+ RokuBuilder::Navigator.stub(:new, navigator) do
469
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
470
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screen_config: {}}]) do
471
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
472
+ end
473
+ end
474
+ end
475
+ assert_equal RokuBuilder::Controller::SUCCESS, code
476
+ navigator.verify
477
+ File.delete(target_config) if File.exists?(target_config)
478
+ end
479
+ def test_controller_screens
480
+ logger = Logger.new("/dev/null")
481
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
482
+ File.delete(target_config) if File.exists?(target_config)
483
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
484
+ navigator = Minitest::Mock.new
485
+
486
+ options = {screens: true, stage: 'production', config: target_config}
487
+ navigator.expect(:screens, true)
488
+ code = nil
489
+ RokuBuilder::Navigator.stub(:new, navigator) do
490
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
491
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
492
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
493
+ end
494
+ end
495
+ end
496
+ assert_equal RokuBuilder::Controller::SUCCESS, code
497
+ navigator.verify
498
+ File.delete(target_config) if File.exists?(target_config)
499
+ end
500
+ def test_controller_text
501
+ logger = Logger.new("/dev/null")
502
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
503
+ File.delete(target_config) if File.exists?(target_config)
504
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
505
+ navigator = Minitest::Mock.new
506
+
507
+ options = {text: "text string", stage: 'production', config: target_config}
508
+ navigator.expect(:type, true, [{}])
509
+ code = nil
510
+ RokuBuilder::Navigator.stub(:new, navigator) do
511
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
512
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, text_config: {}}]) do
513
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
514
+ end
515
+ end
516
+ end
517
+ assert_equal RokuBuilder::Controller::SUCCESS, code
518
+ navigator.verify
519
+ File.delete(target_config) if File.exists?(target_config)
520
+ end
521
+ def test_controller_test
522
+ logger = Logger.new("/dev/null")
523
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
524
+ File.delete(target_config) if File.exists?(target_config)
525
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
526
+ tester = Minitest::Mock.new
527
+
528
+ options = {test: true, stage: 'production', config: target_config}
529
+ tester.expect(:run_tests, true, [{}])
530
+ code = nil
531
+ RokuBuilder::Tester.stub(:new, tester) do
532
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
533
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, test_config: {}}]) do
534
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
535
+ end
536
+ end
537
+ end
538
+ assert_equal RokuBuilder::Controller::SUCCESS, code
539
+ tester.verify
540
+ File.delete(target_config) if File.exists?(target_config)
541
+ end
542
+ def test_controller_screencapture
543
+ logger = Logger.new("/dev/null")
544
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
545
+ File.delete(target_config) if File.exists?(target_config)
546
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
547
+ inspector = Minitest::Mock.new
548
+
549
+ options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: target_config}
550
+ inspector.expect(:screencapture, true, [{}])
551
+ code = nil
552
+ RokuBuilder::Inspector.stub(:new, inspector) do
553
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
554
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
555
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
556
+ end
557
+ end
558
+ end
559
+ assert_equal RokuBuilder::Controller::SUCCESS, code
560
+ inspector.verify
561
+ File.delete(target_config) if File.exists?(target_config)
562
+ end
563
+ def test_controller_screencapture_fail
564
+ logger = Logger.new("/dev/null")
565
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
566
+ File.delete(target_config) if File.exists?(target_config)
567
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
568
+ inspector = Minitest::Mock.new
569
+
570
+ options = {screencapture: true, stage: 'production', out: "/tmp", config: target_config}
571
+ inspector.expect(:screencapture, false, [{}])
572
+ code = nil
573
+ RokuBuilder::Inspector.stub(:new, inspector) do
574
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
575
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
576
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
577
+ end
578
+ end
579
+ end
580
+ assert_equal RokuBuilder::Controller::FAILED_SCREENCAPTURE, code
581
+ inspector.verify
582
+ File.delete(target_config) if File.exists?(target_config)
583
+ end
584
+
585
+ def test_controller_handel_error_codes
586
+ errors = {
587
+ fatal: {
588
+ options_code: [
589
+ RokuBuilder::Controller::EXTRA_COMMANDS,
590
+ RokuBuilder::Controller::NO_COMMANDS,
591
+ RokuBuilder::Controller::EXTRA_SOURCES,
592
+ RokuBuilder::Controller::NO_SOURCE,
593
+ RokuBuilder::Controller::BAD_CURRENT,
594
+ RokuBuilder::Controller::BAD_DEEPLINK,
595
+ RokuBuilder::Controller::BAD_IN_FILE
596
+ ],
597
+ device_code: [
598
+ RokuBuilder::Controller::BAD_DEVICE,
599
+ RokuBuilder::Controller::NO_DEVICES,
600
+ ],
601
+ handle_code: [
602
+ RokuBuilder::Controller::CONFIG_OVERWRITE,
603
+ RokuBuilder::Controller::MISSING_CONFIG,
604
+ RokuBuilder::Controller::INVALID_CONFIG,
605
+ RokuBuilder::Controller::MISSING_MANIFEST,
606
+ RokuBuilder::Controller::UNKNOWN_DEVICE,
607
+ RokuBuilder::Controller::UNKNOWN_PROJECT,
608
+ RokuBuilder::Controller::UNKNOWN_STAGE,
609
+ RokuBuilder::Controller::FAILED_SIDELOAD,
610
+ RokuBuilder::Controller::FAILED_SIGNING,
611
+ RokuBuilder::Controller::FAILED_DEEPLINKING,
612
+ RokuBuilder::Controller::FAILED_NAVIGATING,
613
+ RokuBuilder::Controller::FAILED_SCREENCAPTURE
614
+ ]
615
+ },
616
+ info: {
617
+ device_code: [
618
+ RokuBuilder::Controller::CHANGED_DEVICE
619
+ ]
620
+ },
621
+ warn: {
622
+ handle_code: [
623
+ RokuBuilder::Controller::DEPRICATED_CONFIG
624
+ ]
625
+ }
626
+ }
627
+
628
+ errors.each_pair do |type,errors|
629
+ errors.each_pair do |key,value|
630
+ value.each do |code|
631
+ logger = Minitest::Mock.new
632
+ options = {options: {}, logger: logger}
633
+ options[key] = code
634
+ logger.expect(type, nil) {|string| string.class == String}
635
+ RokuBuilder::Controller.handle_error_codes(**options)
636
+ logger.verify
637
+ end
638
+ end
639
+ end
640
+ end
641
+
642
+ def test_controller_check_devices
643
+ logger = Logger.new("/dev/null")
644
+ ping = Minitest::Mock.new
645
+ options = {device_given: false}
646
+ config = {}
647
+ config[:devices] = {
648
+ a: {ip: "2.2.2.2"},
649
+ b: {ip: "3.3.3.3"}
650
+ }
651
+ configs = {
652
+ device_config: {ip: "1.1.1.1"}
653
+ }
654
+
655
+ Net::Ping::External.stub(:new, ping) do
656
+
657
+ ping.expect(:ping?, true, [configs[:device_config][:ip], 1, 0.2, 1])
658
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
659
+ assert_equal RokuBuilder::Controller::GOOD_DEVICE, code
660
+
661
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
662
+ ping.expect(:ping?, false, [config[:devices][:a][:ip], 1, 0.2, 1])
663
+ ping.expect(:ping?, false, [config[:devices][:b][:ip], 1, 0.2, 1])
664
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
665
+ assert_equal RokuBuilder::Controller::NO_DEVICES, code
666
+
667
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
668
+ ping.expect(:ping?, true, [config[:devices][:a][:ip], 1, 0.2, 1])
669
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
670
+ assert_equal RokuBuilder::Controller::CHANGED_DEVICE, code
671
+ assert_equal config[:devices][:a][:ip], ret[:device_config][:ip]
672
+
673
+ options[:device_given] = true
674
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
675
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
676
+ assert_equal RokuBuilder::Controller::BAD_DEVICE, code
677
+ end
678
+ end
679
+
680
+ def test_controller_run_debug
681
+ logger = Minitest::Mock.new
682
+ options = {debug: true}
683
+
684
+ logger.expect(:formater=, nil) do |proc_object|
685
+ proc_object.class == PROC and proc_object.arity == 4
686
+ end
687
+ logger.expect(:level=, nil, [Logger::DEBUG])
688
+ RokuBuilder::Controller.stub(:validate_options, nil) do
689
+ RokuBuilder::Controller.stub(:handle_options, nil) do
690
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
691
+ RokuBuilder::Controller.run(options: options)
692
+ end
693
+ end
694
+ end
695
+ end
696
+ def test_controller_run_info
697
+ logger = Minitest::Mock.new
698
+ options = {verbose: true}
699
+
700
+ logger.expect(:formater=, nil) do |proc_object|
701
+ proc_object.class == PROC and proc_object.arity == 4
702
+ end
703
+ logger.expect(:level=, nil, [Logger::INFO])
704
+ RokuBuilder::Controller.stub(:validate_options, nil) do
705
+ RokuBuilder::Controller.stub(:handle_options, nil) do
706
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
707
+ RokuBuilder::Controller.run(options: options)
708
+ end
709
+ end
710
+ end
711
+ end
712
+ def test_controller_run_warn
713
+ logger = Minitest::Mock.new
714
+ options = {}
715
+
716
+ logger.expect(:formater=, nil) do |proc_object|
717
+ proc_object.class == PROC and proc_object.arity == 4
718
+ end
719
+ logger.expect(:level=, nil, [Logger::WARN])
720
+ RokuBuilder::Controller.stub(:validate_options, nil) do
721
+ RokuBuilder::Controller.stub(:handle_options, nil) do
722
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
723
+ RokuBuilder::Controller.run(options: options)
724
+ end
725
+ end
726
+ end
248
727
  end
249
728
  end
250
729