roku_builder 3.13.0 → 4.0.0

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.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG +12 -0
  4. data/Gemfile.lock +22 -7
  5. data/Guardfile +3 -3
  6. data/README.md +22 -398
  7. data/bin/roku +1 -194
  8. data/config.json.example +1 -1
  9. data/intergration/roku_builder/test_core.rb +52 -0
  10. data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
  11. data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
  12. data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
  13. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  14. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  15. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
  16. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
  17. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
  18. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  19. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  20. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  21. data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
  22. data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
  23. data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
  24. data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
  25. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  26. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  27. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
  28. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
  29. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
  30. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  31. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  32. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  33. data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
  34. data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
  35. data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
  36. data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
  37. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  38. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  39. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
  40. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
  41. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
  42. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  43. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  44. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  45. data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
  46. data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
  47. data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
  48. data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
  49. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  50. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  51. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
  52. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
  53. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
  54. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  55. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  56. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  57. data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
  58. data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
  59. data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
  60. data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
  61. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  62. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  63. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
  64. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
  65. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
  66. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  67. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  68. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  69. data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
  70. data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
  71. data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
  72. data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
  73. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  74. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  75. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
  76. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
  77. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
  78. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  79. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  80. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  81. data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
  82. data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
  83. data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
  84. data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
  85. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  86. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  87. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
  88. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
  89. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
  90. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  91. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  92. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  93. data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
  94. data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
  95. data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
  96. data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
  97. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  98. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  99. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
  100. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
  101. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
  102. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  103. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  104. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  105. data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
  106. data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
  107. data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
  108. data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
  109. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  110. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  111. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
  112. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
  113. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
  114. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  115. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  116. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  117. data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
  118. data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
  119. data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
  120. data/intergration/roku_builder/test_helper.rb +138 -0
  121. data/intergration/roku_builder/test_inspector.rb +35 -0
  122. data/intergration/roku_builder/test_linker.rb +32 -0
  123. data/intergration/roku_builder/test_loader.rb +38 -0
  124. data/intergration/roku_builder/test_monitor.rb +21 -0
  125. data/intergration/roku_builder/test_navigator.rb +34 -0
  126. data/intergration/roku_builder/test_packager.rb +41 -0
  127. data/intergration/roku_builder/test_profiler.rb +48 -0
  128. data/intergration/roku_builder/test_scripter.rb +38 -0
  129. data/intergration/roku_builder/test_tester.rb +21 -0
  130. data/lib/roku_builder.rb +143 -154
  131. data/lib/roku_builder/config.rb +17 -40
  132. data/lib/roku_builder/config_parser.rb +49 -200
  133. data/lib/roku_builder/config_validator.rb +1 -1
  134. data/lib/roku_builder/errors.rb +12 -0
  135. data/lib/roku_builder/git.rb +28 -0
  136. data/lib/roku_builder/hash.rb +8 -0
  137. data/lib/roku_builder/manifest.rb +121 -0
  138. data/lib/roku_builder/options.rb +68 -29
  139. data/lib/roku_builder/plugin.rb +30 -0
  140. data/lib/roku_builder/plugins/core.rb +117 -0
  141. data/lib/roku_builder/plugins/inspector.rb +104 -0
  142. data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
  143. data/lib/roku_builder/plugins/loader.rb +152 -0
  144. data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
  145. data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
  146. data/lib/roku_builder/plugins/packager.rb +194 -0
  147. data/lib/roku_builder/plugins/profiler.rb +135 -0
  148. data/lib/roku_builder/plugins/scripter.rb +53 -0
  149. data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
  150. data/lib/roku_builder/stager.rb +48 -12
  151. data/lib/roku_builder/string.rb +20 -0
  152. data/lib/roku_builder/util.rb +10 -34
  153. data/lib/roku_builder/version.rb +1 -1
  154. data/rakefile +5 -1
  155. data/roku_builder.gemspec +2 -0
  156. data/test/roku_builder/plugins/test_core.rb +112 -0
  157. data/test/roku_builder/plugins/test_inspector.rb +165 -0
  158. data/test/roku_builder/plugins/test_linker.rb +123 -0
  159. data/test/roku_builder/plugins/test_loader.rb +115 -0
  160. data/test/roku_builder/plugins/test_monitor.rb +141 -0
  161. data/test/roku_builder/plugins/test_navigator.rb +274 -0
  162. data/test/roku_builder/plugins/test_packager.rb +202 -0
  163. data/test/roku_builder/plugins/test_profiler.rb +127 -0
  164. data/test/roku_builder/plugins/test_scripter.rb +110 -0
  165. data/test/roku_builder/plugins/test_tester.rb +109 -0
  166. data/test/roku_builder/test_config.rb +51 -35
  167. data/test/roku_builder/test_config_parser.rb +76 -154
  168. data/test/roku_builder/test_config_validator.rb +18 -1
  169. data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
  170. data/test/roku_builder/test_files/config_test/config.json +3 -0
  171. data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
  172. data/test/roku_builder/test_files/core_test/manifest_template +7 -0
  173. data/test/roku_builder/test_files/core_test/test.pkg +0 -0
  174. data/test/roku_builder/test_files/inspector_test/manifest +6 -0
  175. data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
  176. data/test/roku_builder/test_files/linker_test/manifest +6 -0
  177. data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
  178. data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
  179. data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
  180. data/test/roku_builder/test_files/loader_test/test.zip +0 -0
  181. data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
  182. data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
  183. data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
  184. data/test/roku_builder/test_files/packager_test/manifest +6 -0
  185. data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
  186. data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
  187. data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
  188. data/test/roku_builder/test_files/scripter_test/manifest +6 -0
  189. data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
  190. data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
  191. data/test/roku_builder/test_files/tester_test/manifest +6 -0
  192. data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
  193. data/test/roku_builder/test_helper.rb +44 -11
  194. data/test/roku_builder/test_logger.rb +1 -0
  195. data/test/roku_builder/test_manifest.rb +99 -0
  196. data/test/roku_builder/test_options.rb +106 -77
  197. data/test/roku_builder/test_options_plugins.rb +111 -0
  198. data/test/roku_builder/test_plugin.rb +48 -0
  199. data/test/roku_builder/test_roku_builder.rb +239 -0
  200. data/test/roku_builder/test_stager.rb +49 -101
  201. data/test/roku_builder/test_util.rb +19 -4
  202. metadata +241 -47
  203. data/lib/roku_builder/controller.rb +0 -98
  204. data/lib/roku_builder/controller_commands.rb +0 -224
  205. data/lib/roku_builder/error_handler.rb +0 -142
  206. data/lib/roku_builder/inspector.rb +0 -82
  207. data/lib/roku_builder/keyer.rb +0 -106
  208. data/lib/roku_builder/loader.rb +0 -131
  209. data/lib/roku_builder/manifest_manager.rb +0 -126
  210. data/lib/roku_builder/packager.rb +0 -43
  211. data/lib/roku_builder/profiler.rb +0 -96
  212. data/lib/roku_builder/scripter.rb +0 -39
  213. data/test/roku_builder/test_controller.rb +0 -70
  214. data/test/roku_builder/test_controller_commands.rb +0 -465
  215. data/test/roku_builder/test_error_handler.rb +0 -90
  216. data/test/roku_builder/test_inspector.rb +0 -298
  217. data/test/roku_builder/test_keyer.rb +0 -176
  218. data/test/roku_builder/test_linker.rb +0 -110
  219. data/test/roku_builder/test_loader.rb +0 -337
  220. data/test/roku_builder/test_manifest_manager.rb +0 -103
  221. data/test/roku_builder/test_monitor.rb +0 -137
  222. data/test/roku_builder/test_navigator.rb +0 -280
  223. data/test/roku_builder/test_packager.rb +0 -127
  224. data/test/roku_builder/test_profiler.rb +0 -35
  225. data/test/roku_builder/test_scripter.rb +0 -102
  226. data/test/roku_builder/test_tester.rb +0 -130
@@ -0,0 +1,202 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "../test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class PackagerTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ RokuBuilder.setup_plugins
10
+ register_plugins(Packager)
11
+ @requests = []
12
+ end
13
+ def teardown
14
+ @requests.each {|req| remove_request_stub(req)}
15
+ end
16
+ def test_packager_parse_options_long
17
+ parser = OptionParser.new
18
+ options = {}
19
+ Packager.parse_options(parser: parser, options: options)
20
+ argv = ["roku", "--package", "--key", "--genkey", "--inspect-package"]
21
+ parser.parse! argv
22
+ assert options[:package]
23
+ assert options[:key]
24
+ assert options[:genkey]
25
+ assert options[:inspect_package]
26
+ end
27
+ def test_scripter_parse_options_short
28
+ parser = OptionParser.new
29
+ options = {}
30
+ Packager.parse_options(parser: parser, options: options)
31
+ argv = ["roku", "-p", "-k", "-i"]
32
+ parser.parse! argv
33
+ assert options[:package]
34
+ assert options[:key]
35
+ assert options[:inspect_package]
36
+ end
37
+ def test_packager_current
38
+ config, options = [nil, nil]
39
+ Pathname.stub(:pwd, test_files_path(PackagerTest)) do
40
+ config, options = build_config_options_objects(PackagerTest, {package: true, current: true}, false)
41
+ end
42
+ packager = Packager.new(config: config)
43
+ assert_raises InvalidOptions do
44
+ packager.package(options: options)
45
+ end
46
+ end
47
+ def test_packager_in
48
+ config, options = build_config_options_objects(PackagerTest, {package: true, in: "/tmp/test.pkg"}, false)
49
+ packager = Packager.new(config: config)
50
+ assert_raises InvalidOptions do
51
+ packager.package(options: options)
52
+ end
53
+ end
54
+ def test_packager_ref
55
+ config, options = build_config_options_objects(PackagerTest, {package: true, ref: "test_ref"}, false)
56
+ packager = Packager.new(config: config)
57
+ assert_raises InvalidOptions do
58
+ packager.package(options: options)
59
+ end
60
+ end
61
+ def test_packager_package_failed
62
+ config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production"}, false)
63
+ @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/Home").
64
+ to_return(status: 200, body: "", headers: {}))
65
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_install").
66
+ to_return(status: 200, body: "", headers: {}))
67
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_package").
68
+ to_return(status: 200, body: "Failed: Error.", headers: {}))
69
+ packager = Packager.new(config: config)
70
+ assert_raises ExecutionError do
71
+ packager.package(options: options)
72
+ end
73
+ end
74
+
75
+ def test_packager_package
76
+ loader = Minitest::Mock.new
77
+ inspector = Minitest::Mock.new
78
+ io = Minitest::Mock.new
79
+ config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production", inspect_package: true}, false)
80
+
81
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
82
+ to_return(status: 200, body: "", headers: {}).times(2))
83
+ body = "<a href=\"pkgs\">pkg_url</a>"
84
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_package").
85
+ to_return(status: 200, body: body, headers: {}).times(2))
86
+ body = "package_body"
87
+ @requests.push(stub_request(:get, "http://192.168.0.100/pkgs/pkg_url").
88
+ to_return(status: 200, body: body, headers: {}))
89
+
90
+ loader.expect(:sideload, nil, [Hash])
91
+ io.expect(:write, nil, ["package_body"])
92
+ inspector.expect(:inspect, nil, [Hash])
93
+
94
+ packager = Packager.new(config: config)
95
+ dev_id = Proc.new {"#{Random.rand(999999999999)}"}
96
+ Loader.stub(:new, loader) do
97
+ Time.stub(:now, Time.at(0)) do
98
+ File.stub(:open, nil, io) do
99
+ Inspector.stub(:new, inspector) do
100
+ packager.stub(:dev_id, dev_id) do
101
+ packager.package(options: options)
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ io.verify
108
+ loader.verify
109
+ inspector.verify
110
+ end
111
+ def test_packager_dev_id
112
+ body = "v class=\"roku-font-5\"><label>Your Dev ID: &nbsp;</label> dev_id<hr></div>"
113
+ @requests.push(stub_request(:get, "http://192.168.0.100/plugin_package").
114
+ to_return(status: 200, body: body, headers: {}))
115
+
116
+ config = build_config_options_objects(PackagerTest, {key: true, stage: "production"}, false)[0]
117
+ packager = Packager.new(config: config)
118
+ dev_id = packager.dev_id
119
+
120
+ assert_equal "dev_id", dev_id
121
+ end
122
+ def test_packager_dev_id_old_interface
123
+ body = "<p> Your Dev ID: <font face=\"Courier\">dev_id</font> </p>"
124
+ @requests.push(stub_request(:get, "http://192.168.0.100/plugin_package").
125
+ to_return(status: 200, body: body, headers: {}))
126
+
127
+ config = build_config_options_objects(PackagerTest, {key: true, stage: "production"}, false)[0]
128
+ packager = Packager.new(config: config)
129
+ dev_id = packager.dev_id
130
+
131
+ assert_equal "dev_id", dev_id
132
+ end
133
+
134
+ def test_packager_key_changed
135
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
136
+ to_return(status: 200, body: "", headers: {}))
137
+ logger = Minitest::Mock.new
138
+ logger.expect(:debug, nil) {|s| s =~ /\d* -> \d*/}
139
+ dev_id = Proc.new {"#{Random.rand(999999999999)}"}
140
+ config, options = build_config_options_objects(PackagerTest, {key: true, stage: "production"}, false)
141
+ packager = Packager.new(config: config)
142
+ Logger.class_variable_set(:@@instance, logger)
143
+ packager.stub(:dev_id, dev_id) do
144
+ packager.key(options: options)
145
+ end
146
+ end
147
+
148
+ def test_packager_key_same
149
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
150
+ to_return(status: 200, body: "", headers: {}))
151
+ logger = Minitest::Mock.new
152
+ logger.expect(:info, nil) {|s| s =~ /did not change/}
153
+ logger.expect(:debug, nil) {|s| s =~ /\d* -> \d*/}
154
+ dev_id = Proc.new {"#{Random.rand(999999999999)}"}
155
+ config, options = build_config_options_objects(PackagerTest, {key: true, stage: "production"}, false)
156
+ packager = Packager.new(config: config)
157
+ Logger.class_variable_set(:@@instance, logger)
158
+ packager.stub(:dev_id, dev_id) do
159
+ packager.key(options: options)
160
+ end
161
+ end
162
+
163
+ def test_packager_generate_new_key
164
+ connection = Minitest::Mock.new()
165
+ connection.expect(:puts, nil, ["genkey"])
166
+ connection.expect(:waitfor, nil) do |config, &blk|
167
+ assert_equal(/./, config['Match'])
168
+ assert_equal(false, config['Timeout'])
169
+ txt = "Password: password\nDevID: devid\n"
170
+ blk.call(txt)
171
+ true
172
+ end
173
+ connection.expect(:close, nil, [])
174
+
175
+ config = build_config_options_objects(PackagerTest, {genkey: true}, false)[0]
176
+ packager = Packager.new(config: config)
177
+ Net::Telnet.stub(:new, connection) do
178
+ packager.send(:generate_new_key)
179
+ end
180
+ end
181
+
182
+ def test_packager_genkey
183
+ loader = Minitest::Mock.new
184
+ loader.expect(:sideload, nil, [Hash])
185
+
186
+ body = "<a href=\"pkgs\">pkg_url</a>"
187
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_package").
188
+ to_return(status: 200, body: body, headers: {}))
189
+ @requests.push(stub_request(:get, "http://192.168.0.100/pkgs/pkg_url").
190
+ to_return(status: 200, body: "", headers: {}))
191
+ config, options = build_config_options_objects(PackagerTest, {genkey: true}, false)
192
+ packager = Packager.new(config: config)
193
+ Loader.stub(:new, loader) do
194
+ packager.stub(:generate_new_key, ["password", "dev_id"]) do
195
+ packager.genkey(options: options)
196
+ end
197
+ end
198
+
199
+ loader.verify
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,127 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "../test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class ProfilerTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ RokuBuilder.setup_plugins
10
+ unless RokuBuilder.plugins.include?(Profiler)
11
+ RokuBuilder.register_plugin(Profiler)
12
+ end
13
+ end
14
+ def test_profiler_parse_options_long
15
+ parser = OptionParser.new
16
+ options = {}
17
+ Profiler.parse_options(parser: parser, options: options)
18
+ argv = ["roku", "--profile", "command"]
19
+ parser.parse! argv
20
+ assert_equal "command", options[:profile]
21
+ end
22
+ def test_profiler_stats
23
+ Logger.set_testing
24
+ options = {profile: "stats"}
25
+ config, options = build_config_options_objects(ProfilerTest, options, false)
26
+ waitfor = Proc.new do |telnet_config, &blk|
27
+ assert_equal(/.+/, telnet_config["Match"])
28
+ assert_equal(5, telnet_config["Timeout"])
29
+ txt = "<All_Nodes><NodeA /><NodeB /><NodeC><NodeD /></NodeC></All_Nodes>\n"
30
+ blk.call(txt)
31
+ true
32
+ end
33
+ connection = Minitest::Mock.new
34
+ profiler = Profiler.new(config: config)
35
+
36
+ connection.expect(:puts, nil, ["sgnodes all\n"])
37
+ connection.expect(:waitfor, nil, &waitfor)
38
+
39
+ Net::Telnet.stub(:new, connection) do
40
+ profiler.stub(:printf, nil) do
41
+ profiler.profile(options: options)
42
+ end
43
+ end
44
+
45
+ connection.verify
46
+ end
47
+ def test_profiler_all
48
+ Logger.set_testing
49
+ options = {profile: "all"}
50
+ config, options = build_config_options_objects(ProfilerTest, options, false)
51
+ waitfor = Proc.new do |telnet_config, &blk|
52
+ assert_equal(/.+/, telnet_config["Match"])
53
+ assert_equal(5, telnet_config["Timeout"])
54
+ txt = "<All_Nodes><NodeA /><NodeB /><NodeC><NodeD /></NodeC></All_Nodes>\n"
55
+ blk.call(txt)
56
+ true
57
+ end
58
+ connection = Minitest::Mock.new
59
+ profiler = Profiler.new(config: config)
60
+
61
+ connection.expect(:puts, nil, ["sgnodes all\n"])
62
+ connection.expect(:waitfor, nil, &waitfor)
63
+
64
+ Net::Telnet.stub(:new, connection) do
65
+ profiler.stub(:print, nil) do
66
+ profiler.profile(options: options)
67
+ end
68
+ end
69
+
70
+ connection.verify
71
+ end
72
+ def test_profiler_images
73
+ Logger.set_testing
74
+ options = {profile: "images"}
75
+ config, options = build_config_options_objects(ProfilerTest, options, false)
76
+ waitfor = Proc.new do |telnet_config, &blk|
77
+ assert_equal(/.+/, telnet_config["Match"])
78
+ assert_equal(5, telnet_config["Timeout"])
79
+ txt = " RoGraphics instance\nAvailable memory\n"
80
+ blk.call(txt)
81
+ true
82
+ end
83
+ connection = Minitest::Mock.new
84
+ profiler = Profiler.new(config: config)
85
+
86
+ connection.expect(:puts, nil, ["r2d2_bitmaps\n"])
87
+ connection.expect(:waitfor, nil, &waitfor)
88
+
89
+ Net::Telnet.stub(:new, connection) do
90
+ profiler.stub(:print, nil) do
91
+ profiler.profile(options: options)
92
+ end
93
+ end
94
+
95
+ connection.verify
96
+ end
97
+ def test_profiler_textures
98
+ Logger.set_testing
99
+ options = {profile: "textures"}
100
+ config, options = build_config_options_objects(ProfilerTest, options, false)
101
+ waitfor = Proc.new do |telnet_config, &blk|
102
+ assert_equal(/.+/, telnet_config["Match"])
103
+ assert_equal(5, telnet_config["Timeout"])
104
+ txt = "*******\ntexture\n"
105
+ blk.call(txt)
106
+ true
107
+ end
108
+ timeout = Proc.new do |telnet_config, &blk|
109
+ raise ::Net::ReadTimeout
110
+ end
111
+ connection = Minitest::Mock.new
112
+ profiler = Profiler.new(config: config)
113
+
114
+ connection.expect(:puts, nil, ["loaded_textures\n"])
115
+ connection.expect(:waitfor, nil, &waitfor)
116
+ connection.expect(:waitfor, nil, &timeout)
117
+
118
+ Net::Telnet.stub(:new, connection) do
119
+ profiler.stub(:print, nil) do
120
+ profiler.profile(options: options)
121
+ end
122
+ end
123
+
124
+ connection.verify
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,110 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "../test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class ScripterTest < Minitest::Test
7
+ def setup
8
+ options = {print: "field", working: true}
9
+ RokuBuilder.setup_plugins
10
+ unless RokuBuilder.plugins.include?(Scripter)
11
+ RokuBuilder.register_plugin(Scripter)
12
+ end
13
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
14
+ end
15
+ def test_scripter_parse_options_long
16
+ parser = OptionParser.new
17
+ options = {}
18
+ Scripter.parse_options(parser: parser, options: options)
19
+ argv = ["roku", "--print", "print"]
20
+ parser.parse! argv
21
+ assert_equal :print, options[:print]
22
+ end
23
+ def test_scripter_print_bad_attr
24
+ scripter = Scripter.new(config: @config)
25
+ assert_raises ExecutionError do
26
+ scripter.print(options: @options)
27
+ end
28
+ end
29
+
30
+ def test_scripter_print_config_root_dir
31
+ options = {print: :root_dir, working: true}
32
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
33
+ call_count = 0
34
+ fake_print = lambda { |message, path|
35
+ assert_equal "%s", message
36
+ assert_equal @config.parsed[:root_dir], path
37
+ call_count+=1
38
+ }
39
+ scripter = Scripter.new(config: @config)
40
+ scripter.stub(:printf, fake_print) do
41
+ scripter.print(options: @options)
42
+ end
43
+ assert_equal 1, call_count
44
+ end
45
+ def test_scripter_print_config_app_name
46
+ options = {print: :app_name, working: true}
47
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
48
+ call_count = 0
49
+ fake_print = lambda { |message, value|
50
+ assert_equal "%s", message
51
+ assert_equal "<app name>", value
52
+ call_count+=1
53
+ }
54
+ scripter = Scripter.new(config: @config)
55
+ scripter.stub(:printf, fake_print) do
56
+ scripter.print(options: @options)
57
+ end
58
+ assert_equal 1, call_count
59
+ end
60
+
61
+ def test_scripter_print_manifest_title
62
+ options = {print: :title, working: true}
63
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
64
+ call_count = 0
65
+ fake_print = lambda { |message, title|
66
+ assert_equal "%s", message
67
+ assert_equal "Test", title
68
+ call_count+=1
69
+ }
70
+ scripter = Scripter.new(config: @config)
71
+ scripter.stub(:printf, fake_print) do
72
+ scripter.print(options: @options)
73
+ end
74
+ assert_equal 1, call_count
75
+ end
76
+
77
+ def test_scripter_print_manifest_build_version
78
+ options = {print: :build_version, working: true}
79
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
80
+ call_count = 0
81
+ fake_print = lambda { |message, build|
82
+ assert_equal "%s", message
83
+ assert_equal "010101.1", build
84
+ call_count+=1
85
+ }
86
+ scripter = Scripter.new(config: @config)
87
+ scripter.stub(:printf, fake_print) do
88
+ scripter.print(options: @options)
89
+ end
90
+ assert_equal 1, call_count
91
+ end
92
+
93
+ def test_scripter_print_manifest_app_version
94
+ options = {print: :app_version, working: true}
95
+ @config, @options = build_config_options_objects(ScripterTest, options, false)
96
+ call_count = 0
97
+ fake_print = lambda { |message, major, minor|
98
+ assert_equal "%s.%s", message
99
+ assert_equal "1", major
100
+ assert_equal "0", minor
101
+ call_count+=1
102
+ }
103
+ scripter = Scripter.new(config: @config)
104
+ scripter.stub(:printf, fake_print) do
105
+ scripter.print(options: @options)
106
+ end
107
+ assert_equal 1, call_count
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,109 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+ require_relative "../test_helper.rb"
3
+
4
+ module RokuBuilder
5
+ class TesterTest < Minitest::Test
6
+ def setup
7
+ Logger.set_testing
8
+ RokuBuilder.setup_plugins
9
+ register_plugins(Tester)
10
+ @connection = Minitest::Mock.new
11
+ @requests = []
12
+
13
+ @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/Home").
14
+ to_return(status: 200, body: "", headers: {}))
15
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_install").
16
+ to_return(status: 200, body: "Install Success", headers: {}))
17
+ @requests.push(stub_request(:post, "http://192.168.0.100:8060/launch/dev?RunTests=true").
18
+ to_return(status: 200, body: "", headers: {}))
19
+ end
20
+ def teardown
21
+ @connection.verify
22
+ @requests.each {|req| remove_request_stub(req)}
23
+ end
24
+ def test_scripter_parse_options_long
25
+ parser = OptionParser.new
26
+ options = {}
27
+ Tester.parse_options(parser: parser, options: options)
28
+ argv = ["roku", "--test"]
29
+ parser.parse! argv
30
+ assert options[:test]
31
+ end
32
+ def test_tester_runtests
33
+ config, options = build_config_options_objects(TesterTest, {test: true, working: true}, false)
34
+ tester = Tester.new(config: config)
35
+
36
+ @connection.expect(:waitfor, nil, [/\*+\s*End testing\s*\*+/])
37
+ @connection.expect(:puts, nil, ["cont\n"])
38
+
39
+ Net::Telnet.stub(:new, @connection) do
40
+ tester.test(options: options)
41
+ end
42
+ end
43
+
44
+ def test_tester_runtests_and_handle
45
+ config, options = build_config_options_objects(TesterTest, {test: true, working: true}, false)
46
+ tester = Tester.new(config: config)
47
+
48
+ waitfor = Proc.new do |end_reg, &blk|
49
+ assert_equal(/\*+\s*End testing\s*\*+/, end_reg)
50
+ txt = "Fake Text"
51
+ blk.call(txt) == false
52
+ end
53
+
54
+ @connection.expect(:waitfor, nil, &waitfor)
55
+ @connection.expect(:puts, nil, ["cont\n"])
56
+
57
+ Net::Telnet.stub(:new, @connection) do
58
+ tester.stub(:handle_text, false) do
59
+ tester.test(options: options)
60
+ end
61
+ end
62
+ end
63
+
64
+ def test_tester_handle_text_no_text
65
+ config = build_config_options_objects(TesterTest, {test: true, working: true}, false)[0]
66
+ tester = Tester.new(config: config)
67
+
68
+ text = "this\nis\na\ntest\nparagraph"
69
+ tester.send(:handle_text, {txt: text})
70
+
71
+ refute tester.instance_variable_get(:@in_tests)
72
+ end
73
+
74
+ def test_tester_handle_text_all_text
75
+ config = build_config_options_objects(TesterTest, {test: true, working: true}, false)[0]
76
+ tester = Tester.new(config: config)
77
+ tester.instance_variable_set(:@in_tests, true)
78
+
79
+ text = ["this","is","a","test","paragraph"]
80
+
81
+ tester.send(:handle_text, {txt: text.join("\n")})
82
+ assert_equal text, tester.instance_variable_get(:@logs)
83
+ assert tester.instance_variable_get(:@in_tests)
84
+ end
85
+
86
+ def test_tester_handle_text_partial_text
87
+ config = build_config_options_objects(TesterTest, {test: true, working: true}, false)[0]
88
+ tester = Tester.new(config: config)
89
+
90
+ text = ["this","*Start testing*","is","a","test","*End testing*","paragraph"]
91
+ verify_text = ["***************","***************","*Start testing*","is","a","test","*End testing*","*************","*************"]
92
+
93
+ tester.send(:handle_text, {txt: text.join("\n")})
94
+ refute tester.instance_variable_get(:@in_tests)
95
+ assert_equal verify_text, tester.instance_variable_get(:@logs)
96
+ end
97
+
98
+ def test_tester_handle_text_used_connection
99
+ config = build_config_options_objects(TesterTest, {test: true, working: true}, false)[0]
100
+ tester = Tester.new(config: config)
101
+
102
+ text = ["connection already in use"]
103
+
104
+ assert_raises IOError do
105
+ tester.send(:handle_text, {txt: text.join("\n")})
106
+ end
107
+ end
108
+ end
109
+ end