roku_builder 3.3.3 → 3.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1158 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile.lock +19 -14
  6. data/README.md +5 -0
  7. data/bin/roku +32 -37
  8. data/config.json.example +2 -2
  9. data/lib/roku_builder/config_manager.rb +83 -118
  10. data/lib/roku_builder/config_parser.rb +192 -0
  11. data/lib/roku_builder/config_validator.rb +125 -0
  12. data/lib/roku_builder/controller.rb +97 -484
  13. data/lib/roku_builder/controller_commands.rb +112 -0
  14. data/lib/roku_builder/error_handler.rb +116 -0
  15. data/lib/roku_builder/inspector.rb +5 -18
  16. data/lib/roku_builder/keyer.rb +3 -11
  17. data/lib/roku_builder/linker.rb +3 -15
  18. data/lib/roku_builder/loader.rb +52 -89
  19. data/lib/roku_builder/manifest_manager.rb +2 -3
  20. data/lib/roku_builder/monitor.rb +15 -12
  21. data/lib/roku_builder/navigator.rb +2 -10
  22. data/lib/roku_builder/packager.rb +1 -7
  23. data/lib/roku_builder/tester.rb +1 -0
  24. data/lib/roku_builder/util.rb +39 -0
  25. data/lib/roku_builder/version.rb +1 -1
  26. data/lib/roku_builder.rb +96 -1
  27. data/roku_builder.gemspec +5 -4
  28. data/tests/roku_builder/config_manager_test.rb +80 -241
  29. data/tests/roku_builder/{controller_config_test.rb → config_parser_test.rb} +5 -5
  30. data/tests/roku_builder/config_validator_test.rb +158 -0
  31. data/tests/roku_builder/controller_commands_test.rb +304 -0
  32. data/tests/roku_builder/controller_test.rb +61 -620
  33. data/tests/roku_builder/error_handler_test.rb +76 -0
  34. data/tests/roku_builder/inspector_test.rb +3 -0
  35. data/tests/roku_builder/keyer_test.rb +3 -2
  36. data/tests/roku_builder/linker_test.rb +2 -1
  37. data/tests/roku_builder/loader_test.rb +2 -0
  38. data/tests/roku_builder/manifest_manager_test.rb +3 -6
  39. data/tests/roku_builder/monitor_test.rb +5 -13
  40. data/tests/roku_builder/navigator_test.rb +2 -0
  41. data/tests/roku_builder/test_helper.rb +38 -0
  42. metadata +34 -11
@@ -0,0 +1,76 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class RokuBuilder::ErrorHandler
4
+ class << self
5
+ def abort
6
+ #do nothing
7
+ end
8
+ end
9
+ end
10
+
11
+ class ErrorHandlerTest < Minitest::Test
12
+ def test_handle_error_codes
13
+ error_groups = {
14
+ fatal: {
15
+ options_code: [
16
+ RokuBuilder::EXTRA_COMMANDS,
17
+ RokuBuilder::NO_COMMANDS,
18
+ RokuBuilder::EXTRA_SOURCES,
19
+ RokuBuilder::NO_SOURCE,
20
+ RokuBuilder::BAD_CURRENT,
21
+ RokuBuilder::BAD_DEEPLINK,
22
+ RokuBuilder::BAD_IN_FILE
23
+ ],
24
+ configure_code:[
25
+ RokuBuilder::CONFIG_OVERWRITE,
26
+ ],
27
+ device_code: [
28
+ RokuBuilder::BAD_DEVICE,
29
+ RokuBuilder::NO_DEVICES,
30
+ ],
31
+ load_code: [
32
+ RokuBuilder::MISSING_CONFIG,
33
+ RokuBuilder::INVALID_CONFIG,
34
+ RokuBuilder::MISSING_MANIFEST,
35
+ RokuBuilder::UNKNOWN_DEVICE,
36
+ RokuBuilder::UNKNOWN_PROJECT,
37
+ RokuBuilder::UNKNOWN_STAGE,
38
+ ],
39
+ command_code: [
40
+ RokuBuilder::FAILED_SIDELOAD,
41
+ RokuBuilder::FAILED_SIGNING,
42
+ RokuBuilder::FAILED_DEEPLINKING,
43
+ RokuBuilder::FAILED_NAVIGATING,
44
+ RokuBuilder::FAILED_SCREENCAPTURE
45
+ ]
46
+ },
47
+ info: {
48
+ device_code: [
49
+ RokuBuilder::CHANGED_DEVICE
50
+ ],
51
+ configure_code:[
52
+ RokuBuilder::SUCCESS
53
+ ]
54
+ },
55
+ warn: {
56
+ load_code: [
57
+ RokuBuilder::DEPRICATED_CONFIG
58
+ ]
59
+ }
60
+ }
61
+ error_groups.each_pair do |type,errors|
62
+ errors.each_pair do |key,value|
63
+ value.each do |code|
64
+ logger = Minitest::Mock.new
65
+ options = {logger: logger}
66
+ options[:options] = {} if key == :load_code
67
+ options[key] = code
68
+ logger.expect(type, nil) {|string| string.class == String}
69
+ method = "handle_#{key}s"
70
+ RokuBuilder::ErrorHandler.send(method.to_sym, **options)
71
+ logger.verify
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -55,6 +55,7 @@ class InspectorTest < Minitest::Test
55
55
  assert_equal payload[:password], arg2[:passwd]
56
56
  assert payload[:archive] === arg2[:archive]
57
57
  end
58
+ faraday.expect(:headers, {})
58
59
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
59
60
  faraday.expect(:request, nil, [:multipart])
60
61
  faraday.expect(:request, nil, [:url_encoded])
@@ -131,6 +132,7 @@ class InspectorTest < Minitest::Test
131
132
  assert_equal payload[:password], arg2[:passwd]
132
133
  assert payload[:archive] === arg2[:archive]
133
134
  end
135
+ faraday.expect(:headers, {})
134
136
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
135
137
  faraday.expect(:request, nil, [:multipart])
136
138
  faraday.expect(:request, nil, [:url_encoded])
@@ -190,6 +192,7 @@ class InspectorTest < Minitest::Test
190
192
  assert_equal payload[:password], arg2[:passwd]
191
193
  assert payload[:archive] === arg2[:archive]
192
194
  end
195
+ faraday.expect(:headers, {})
193
196
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
194
197
  faraday.expect(:request, nil, [:multipart])
195
198
  faraday.expect(:request, nil, [:url_encoded])
@@ -22,7 +22,6 @@ class KeyerTest < Minitest::Test
22
22
  response.expect(:body, body)
23
23
 
24
24
 
25
- package_info = {}
26
25
  dev_id = nil
27
26
  keyer = RokuBuilder::Keyer.new(**device_config)
28
27
  Faraday.stub(:new, connection, faraday) do
@@ -55,7 +54,6 @@ class KeyerTest < Minitest::Test
55
54
  response.expect(:body, body)
56
55
 
57
56
 
58
- package_info = {}
59
57
  dev_id = nil
60
58
  keyer = RokuBuilder::Keyer.new(**device_config)
61
59
  Faraday.stub(:new, connection, faraday) do
@@ -95,11 +93,14 @@ class KeyerTest < Minitest::Test
95
93
  assert_equal payload[:password], arg2[:passwd]
96
94
  assert payload[:archive] === arg2[:archive]
97
95
  end
96
+ faraday.expect(:headers, {})
98
97
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
99
98
  faraday.expect(:request, nil, [:multipart])
100
99
  faraday.expect(:request, nil, [:url_encoded])
101
100
  faraday.expect(:adapter, nil, [Faraday.default_adapter])
102
101
 
102
+ # This test fails with SEED=21894 due to the random number generator
103
+ # spitting out the same number twice
103
104
  dev_id = Proc.new { Random.rand(100) }
104
105
  keyer = RokuBuilder::Keyer.new(**device_config)
105
106
  key_changed = nil
@@ -12,10 +12,11 @@ class LinkerTest < Minitest::Test
12
12
  password: "password",
13
13
  logger: Logger.new("/dev/null")
14
14
  }
15
- path = "/launch/dev?a=A&b=B:C&d=a%5Cb"
15
+ path = "/launch/dev?a=A&b=B%3AC&d=a%5Cb"
16
16
  options = 'a:A, b:B:C, d:a\b'
17
17
 
18
18
  connection.expect(:post, response, [path])
19
+ faraday.expect(:headers, {})
19
20
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
20
21
  faraday.expect(:request, nil, [:multipart])
21
22
  faraday.expect(:request, nil, [:url_encoded])
@@ -25,6 +25,7 @@ class LoaderTest < Minitest::Test
25
25
  }
26
26
  path = "/plugin_install"
27
27
 
28
+ faraday.expect(:headers, {})
28
29
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
29
30
  faraday.expect(:request, nil, [:multipart])
30
31
  faraday.expect(:request, nil, [:url_encoded])
@@ -83,6 +84,7 @@ class LoaderTest < Minitest::Test
83
84
  }
84
85
  path = "/plugin_install"
85
86
 
87
+ faraday.expect(:headers, {})
86
88
  faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
87
89
  faraday.expect(:request, nil, [:multipart])
88
90
  faraday.expect(:request, nil, [:url_encoded])
@@ -2,35 +2,32 @@ require_relative "test_helper.rb"
2
2
 
3
3
  class ManifestManagerTest < Minitest::Test
4
4
  def test_manifest_manager_update
5
- logger = Logger.new('/dev/null')
6
5
  root_dir = File.join(File.dirname(__FILE__), "test_files", "manifest_manager_test")
7
6
  FileUtils.cp(File.join(root_dir, "manifest_template"), File.join(root_dir, "manifest"))
8
7
  build_version = nil
9
8
  Time.stub(:now, Time.new(2001, 02, 01)) do
10
- build_version = RokuBuilder::ManifestManager.update_build(root_dir: root_dir, logger: logger)
9
+ build_version = RokuBuilder::ManifestManager.update_build(root_dir: root_dir)
11
10
  end
12
11
  assert_equal "020101.2", build_version
13
12
  FileUtils.rm(File.join(root_dir, "manifest"))
14
13
  end
15
14
 
16
15
  def test_manifest_manager_update_missing_build_number
17
- logger = Logger.new('/dev/null')
18
16
  root_dir = File.join(File.dirname(__FILE__), "test_files", "manifest_manager_test")
19
17
  FileUtils.cp(File.join(root_dir, "manifest_template_2"), File.join(root_dir, "manifest"))
20
18
  build_version = nil
21
19
  Time.stub(:now, Time.new(2001, 02, 01)) do
22
- build_version = RokuBuilder::ManifestManager.update_build(root_dir: root_dir, logger: logger)
20
+ build_version = RokuBuilder::ManifestManager.update_build(root_dir: root_dir)
23
21
  end
24
22
  assert_equal "020101.1", build_version
25
23
  FileUtils.rm(File.join(root_dir, "manifest"))
26
24
  end
27
25
 
28
26
  def test_manifest_manager_build_version
29
- logger = Logger.new('/dev/null')
30
27
  root_dir = File.join(File.dirname(__FILE__), "test_files", "manifest_manager_test")
31
28
  FileUtils.cp(File.join(root_dir, "manifest_template"), File.join(root_dir, "manifest"))
32
29
  build_version = nil
33
- build_version = RokuBuilder::ManifestManager.build_version(root_dir: root_dir, logger: logger)
30
+ build_version = RokuBuilder::ManifestManager.build_version(root_dir: root_dir)
34
31
  assert_equal "010101.1", build_version
35
32
  FileUtils.rm(File.join(root_dir, "manifest"))
36
33
  end
@@ -9,15 +9,11 @@ class MonitorTest < Minitest::Test
9
9
  password: "password",
10
10
  logger: Logger.new("/dev/null")
11
11
  }
12
- monitor_config = {
13
- 'Host' => device_config[:ip],
14
- 'Post' => 8085
15
- }
16
12
  monitor = RokuBuilder::Monitor.new(**device_config)
17
13
 
18
14
  connection.expect(:waitfor, nil) do |config|
19
- assert_equal /./, config['Match']
20
- assert_equal false, config['Timeout']
15
+ assert_equal(/./, config['Match'])
16
+ assert_equal(false, config['Timeout'])
21
17
  end
22
18
 
23
19
  def monitor.gets
@@ -40,20 +36,16 @@ class MonitorTest < Minitest::Test
40
36
  password: "password",
41
37
  logger: Logger.new("/dev/null")
42
38
  }
43
- monitor_config = {
44
- 'Host' => device_config[:ip],
45
- 'Post' => 8085
46
- }
47
39
  monitor = RokuBuilder::Monitor.new(**device_config)
48
40
 
49
41
  connection.expect(:waitfor, nil) do |config|
50
- assert_equal /./, config['Match']
51
- assert_equal false, config['Timeout']
42
+ assert_equal(/./, config['Match'])
43
+ assert_equal(false, config['Timeout'])
52
44
  end
53
45
  connection.expect(:puts, nil, ["text"])
54
46
 
55
47
  def monitor.gets
56
- @count = 0 unless @count
48
+ @count ||= 0
57
49
  sleep(0.1)
58
50
  case @count
59
51
  when 0
@@ -54,6 +54,8 @@ class NavigatorTest < Minitest::Test
54
54
  response.expect(:success?, true)
55
55
  end
56
56
  end
57
+ faraday.expect(:headers, {})
58
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
57
59
  faraday.expect(:request, nil, [:multipart])
58
60
  faraday.expect(:request, nil, [:url_encoded])
59
61
  faraday.expect(:adapter, nil, [Faraday.default_adapter])
@@ -1,6 +1,44 @@
1
1
  require "simplecov"
2
+ require "coveralls"
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter::new([
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ])
2
8
  SimpleCov.start
3
9
 
4
10
  require "byebug"
5
11
  require "roku_builder"
6
12
  require "minitest/autorun"
13
+
14
+
15
+ def good_config
16
+ {
17
+ devices: {
18
+ default: :roku,
19
+ roku: {
20
+ ip: "192.168.0.100",
21
+ user: "user",
22
+ password: "password"
23
+ }
24
+ },
25
+ projects: {
26
+ default: :project1,
27
+ project1: {
28
+ directory: "/dev/null",
29
+ folders: ["resources","source"],
30
+ files: ["manifest"],
31
+ app_name: "<app name>",
32
+ stages:{
33
+ production: {
34
+ branch: "production",
35
+ key: {
36
+ keyed_pkg: "/dev/null",
37
+ password: "<password for pkg>"
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.3
4
+ version: 3.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - greeneca
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-14 00:00:00.000000000 Z
11
+ date: 2016-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '1.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.1'
26
+ version: '1.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.9
61
+ version: '1.3'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.2.9
68
+ version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: net-ping
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '11.1'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '11.1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: byebug
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '3.5'
117
+ version: '8.2'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '3.5'
124
+ version: '8.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: minitest
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0.11'
181
+ - !ruby/object:Gem::Dependency
182
+ name: coveralls
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.8'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.8'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: yard
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -215,6 +229,8 @@ extensions: []
215
229
  extra_rdoc_files: []
216
230
  files:
217
231
  - ".gitignore"
232
+ - ".rubocop.yml"
233
+ - ".travis.yml"
218
234
  - Gemfile
219
235
  - Gemfile.lock
220
236
  - Guardfile
@@ -224,7 +240,11 @@ files:
224
240
  - config.json.example
225
241
  - lib/roku_builder.rb
226
242
  - lib/roku_builder/config_manager.rb
243
+ - lib/roku_builder/config_parser.rb
244
+ - lib/roku_builder/config_validator.rb
227
245
  - lib/roku_builder/controller.rb
246
+ - lib/roku_builder/controller_commands.rb
247
+ - lib/roku_builder/error_handler.rb
228
248
  - lib/roku_builder/inspector.rb
229
249
  - lib/roku_builder/keyer.rb
230
250
  - lib/roku_builder/linker.rb
@@ -239,8 +259,11 @@ files:
239
259
  - rakefile
240
260
  - roku_builder.gemspec
241
261
  - tests/roku_builder/config_manager_test.rb
242
- - tests/roku_builder/controller_config_test.rb
262
+ - tests/roku_builder/config_parser_test.rb
263
+ - tests/roku_builder/config_validator_test.rb
264
+ - tests/roku_builder/controller_commands_test.rb
243
265
  - tests/roku_builder/controller_test.rb
266
+ - tests/roku_builder/error_handler_test.rb
244
267
  - tests/roku_builder/inspector_test.rb
245
268
  - tests/roku_builder/keyer_test.rb
246
269
  - tests/roku_builder/linker_test.rb