appswarm 0.0.1

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 (305) hide show
  1. data/.autotest +124 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +304 -0
  4. data/README.txt +373 -0
  5. data/Rakefile +153 -0
  6. data/TODO +7 -0
  7. data/apps/README.txt +17 -0
  8. data/apps/admin/admin.rb +79 -0
  9. data/apps/admin/controllers/admin.rb +81 -0
  10. data/apps/admin/controllers/settings.rb +63 -0
  11. data/apps/admin/controllers/users.rb +3 -0
  12. data/apps/admin/features/access.feature +21 -0
  13. data/apps/admin/features/mountLocal.feature +12 -0
  14. data/apps/admin/features/settings.feature +68 -0
  15. data/apps/admin/features/startApps.feature +27 -0
  16. data/apps/admin/layouts/main.rhtml +10 -0
  17. data/apps/admin/lib/settings.rb +52 -0
  18. data/apps/admin/static/admin.css +23 -0
  19. data/apps/admin/views/_log.rhtml +21 -0
  20. data/apps/admin/views/index.rhtml +43 -0
  21. data/apps/admin/views/info.rhtml +7 -0
  22. data/apps/admin/views/settings.rhtml +9 -0
  23. data/apps/admin/views/settings/_http_app.rhtml +15 -0
  24. data/apps/admin/views/settings/_web_server.rhtml +32 -0
  25. data/apps/admin/views/settings/index.rhtml +3 -0
  26. data/apps/admin/views/users/index.rhtml +6 -0
  27. data/apps/application_provider/application_provider.rb +11 -0
  28. data/apps/blog/blog.rb +27 -0
  29. data/apps/blog/controllers/blog.rb +29 -0
  30. data/apps/blog/views/index.rhtml +27 -0
  31. data/apps/browser_starter/browser_starter.rb +32 -0
  32. data/apps/crypto/crypto.rb +47 -0
  33. data/apps/crypto/crypto_rsa.rb +102 -0
  34. data/apps/crypto/spec/crypto_spec.rb +10 -0
  35. data/apps/directory_service/directory_service.rb +107 -0
  36. data/apps/directory_service/net_application.rb +92 -0
  37. data/apps/directory_service/spec/directory_service_spec.rb +36 -0
  38. data/apps/directory_service/spec/net_application_spec.rb +3 -0
  39. data/apps/global_application_interface/global_application.rb +52 -0
  40. data/apps/global_application_interface/global_application_interface.rb +84 -0
  41. data/apps/global_application_interface/spec/app_api_spec.rb +5 -0
  42. data/apps/global_tuple_space/global_tuple_space.rb +27 -0
  43. data/apps/global_web_proxy/features/session_handling.feature +7 -0
  44. data/apps/global_web_proxy/global_web_proxy.rb +221 -0
  45. data/apps/global_web_proxy/proxy/HTTPProxyServer-Dateien/rdoc-style.css +208 -0
  46. data/apps/global_web_proxy/proxy/HTTPProxyServer.html +566 -0
  47. data/apps/global_web_proxy/proxy/dnstest.rb +30 -0
  48. data/apps/global_web_proxy/proxy/proxy.rb +86 -0
  49. data/apps/global_web_proxy/proxy/wiki.html +267 -0
  50. data/apps/global_web_proxy/proxy/wiki.rb +115 -0
  51. data/apps/global_web_proxy/spec/res1 +112 -0
  52. data/apps/global_web_proxy/spec/res2 +125 -0
  53. data/apps/global_web_proxy/spec/web_proxy_spec.rb +88 -0
  54. data/apps/global_web_server/global_web_server.rb +120 -0
  55. data/apps/global_web_server/global_web_servlet.rb +6 -0
  56. data/apps/hello_world/controllers/hello_world.rb +11 -0
  57. data/apps/hello_world/features/show_on_local_web_server.feature +44 -0
  58. data/apps/hello_world/features/starting_apps.feature +6 -0
  59. data/apps/hello_world/features/through_global.feature +12 -0
  60. data/apps/hello_world/hello_world.rb +3 -0
  61. data/apps/hello_world/views/get.rhtml +10 -0
  62. data/apps/hello_world/views/index.rhtml +9 -0
  63. data/apps/hello_world/views/post.rhtml +10 -0
  64. data/apps/home/controllers/home.rb +11 -0
  65. data/apps/home/home.rb +12 -0
  66. data/apps/home/layouts/main.rhtml +16 -0
  67. data/apps/home/static/Zeichnung.svg +240 -0
  68. data/apps/home/static/home.css +134 -0
  69. data/apps/home/static/menu.css +99 -0
  70. data/apps/home/views/_appInfo.rhtml +22 -0
  71. data/apps/home/views/_dummy_fill.rhtml +3 -0
  72. data/apps/home/views/_info.rhtml +6 -0
  73. data/apps/home/views/_menu.rhtml +17 -0
  74. data/apps/home/views/index.rhtml +4 -0
  75. data/apps/home/views/overview.rhtml +2 -0
  76. data/apps/local_chunk_store/chunk_store.rb +15 -0
  77. data/apps/local_chunk_store/local_chunk_store.rb +123 -0
  78. data/apps/local_chunk_store/spec/local_chunk_store_spec.rb +30 -0
  79. data/apps/local_file_store/app_configuration.rb +78 -0
  80. data/apps/local_file_store/app_file_store.rb +32 -0
  81. data/apps/local_file_store/cached_file_store.rb +94 -0
  82. data/apps/local_file_store/features/testbed_handling_of_directories.feature +20 -0
  83. data/apps/local_file_store/local_file_store.rb +47 -0
  84. data/apps/local_file_store/spec/app_configuration_spec.rb +30 -0
  85. data/apps/local_file_store/spec/local_file_store_spec.rb +54 -0
  86. data/apps/local_object_storage/lib/cell.rb +29 -0
  87. data/apps/local_object_storage/lib/cellmgr.rb +57 -0
  88. data/apps/local_object_storage/lib/index.rb +43 -0
  89. data/apps/local_object_storage/lib/marshal.rb +96 -0
  90. data/apps/local_object_storage/lib/pagefile.rb +6 -0
  91. data/apps/local_object_storage/lib/persistent_object.rb +126 -0
  92. data/apps/local_object_storage/local_object_storage.rb +148 -0
  93. data/apps/local_object_storage/spec/local_object_storage_spec.rb +123 -0
  94. data/apps/local_secure_file_store/local_secure_file_store.rb +64 -0
  95. data/apps/local_secure_file_store/spec/local_secure_file_store_spec.rb +23 -0
  96. data/apps/local_tuple_space/local_tuple_space.rb +92 -0
  97. data/apps/local_tuple_space/spec/tuple_space_spec.rb +25 -0
  98. data/apps/local_web_server/features/parsing_args.feature +18 -0
  99. data/apps/local_web_server/local_web_server.rb +166 -0
  100. data/apps/logger/logger.rb +27 -0
  101. data/apps/master/master.rb +46 -0
  102. data/apps/master/spec/master_spec.rb +31 -0
  103. data/apps/my_spec_spec.rb +15 -0
  104. data/apps/name_service/name_service.rb +75 -0
  105. data/apps/name_service/spec/name_service_spec.rb +51 -0
  106. data/apps/network_discovery/network_discovery.rb +45 -0
  107. data/apps/network_discovery_localstore/network_discovery_localstore.rb +20 -0
  108. data/apps/network_discovery_udp/network_discovery_udp.rb +51 -0
  109. data/apps/network_lookup/network_lookup.rb +61 -0
  110. data/apps/network_node/abstract_node.rb +104 -0
  111. data/apps/network_node/drb_node.rb +90 -0
  112. data/apps/network_node/network_app.rb +9 -0
  113. data/apps/network_node/network_node.rb +471 -0
  114. data/apps/network_node/remote_service.rb +45 -0
  115. data/apps/network_node/secure_node.rb +125 -0
  116. data/apps/network_node/spec/drb_spec.rb +41 -0
  117. data/apps/network_node/spec/network_node_spec_not.rb +264 -0
  118. data/apps/new_network_node/new_network_node.rb +427 -0
  119. data/apps/new_network_node/spec/new_network_node_spec.rb +186 -0
  120. data/apps/node_broadcast/node_broadcast.rb +167 -0
  121. data/apps/node_broadcast/spec/node_broadcast_spec.rb +59 -0
  122. data/apps/permaspace/permaspace.rb +47 -0
  123. data/apps/plaindb/lib/btree.rb +38 -0
  124. data/apps/plaindb/plaindb.rb +199 -0
  125. data/apps/plaindb/spec/table_write_spec.rb +36 -0
  126. data/apps/routed_network/routed_network.rb +23 -0
  127. data/apps/routed_network/spec/routed_network_spec.rb +17 -0
  128. data/apps/session_manager/session_manager.rb +18 -0
  129. data/apps/spec_output.html +222 -0
  130. data/apps/todo/controllers/todo.rb +87 -0
  131. data/apps/todo/model/comment.rb +10 -0
  132. data/apps/todo/model/project.rb +20 -0
  133. data/apps/todo/model/todo.rb +16 -0
  134. data/apps/todo/model/user.rb +5 -0
  135. data/apps/todo/todo.rb +21 -0
  136. data/apps/todo/views/_commentList.rhtml +7 -0
  137. data/apps/todo/views/_createProject.rhtml +5 -0
  138. data/apps/todo/views/_partList.rhtml +12 -0
  139. data/apps/todo/views/_projectList.rhtml +16 -0
  140. data/apps/todo/views/edit.rhtml +11 -0
  141. data/apps/todo/views/editPart.rhtml +10 -0
  142. data/apps/todo/views/index.rhtml +2 -0
  143. data/apps/todo/views/question.rhtml +4 -0
  144. data/apps/transparent_network/transparent_network.rb +7 -0
  145. data/apps/udp_network/big_transfer.rb +97 -0
  146. data/apps/udp_network/features/information.feature +7 -0
  147. data/apps/udp_network/message_queue.rb +84 -0
  148. data/apps/udp_network/network_interface_api.rb +39 -0
  149. data/apps/udp_network/qos_queue.rb +186 -0
  150. data/apps/udp_network/simple_api.rb +180 -0
  151. data/apps/udp_network/spec/big_transfer_spec.rb +0 -0
  152. data/apps/udp_network/spec/qos_queue_spec.rb +99 -0
  153. data/apps/udp_network/spec/simple_api_spec.rb +35 -0
  154. data/apps/udp_network/spec/udp_network_spec.rb +115 -0
  155. data/apps/udp_network/spec/udp_transceiver_spec.rb +90 -0
  156. data/apps/udp_network/udp_network.rb +196 -0
  157. data/apps/udp_network/udp_transceiver.rb +329 -0
  158. data/apps/wiki/controllers/wiki.rb +56 -0
  159. data/apps/wiki/features/editing.feature +21 -0
  160. data/apps/wiki/layouts/main.rhtml +18 -0
  161. data/apps/wiki/lib/media_wiki_html.rb +35 -0
  162. data/apps/wiki/lib/wikicreole.rb +2147 -0
  163. data/apps/wiki/lib/wikicreole.tt +135 -0
  164. data/apps/wiki/lib/wikitest.rb +158 -0
  165. data/apps/wiki/lib/wikitest.tt +17 -0
  166. data/apps/wiki/model/menu.rb +15 -0
  167. data/apps/wiki/model/page.rb +31 -0
  168. data/apps/wiki/spec/wiki_creole_spec.rb +20 -0
  169. data/apps/wiki/spec/wiki_spec.rb +19 -0
  170. data/apps/wiki/static/Zeichnung.svg +240 -0
  171. data/apps/wiki/static/home.css +134 -0
  172. data/apps/wiki/static/mainMenu.css +32 -0
  173. data/apps/wiki/static/menu.css +99 -0
  174. data/apps/wiki/views/_mainMenu.rhtml +3 -0
  175. data/apps/wiki/views/_menu.rhtml +13 -0
  176. data/apps/wiki/views/edit.rhtml +13 -0
  177. data/apps/wiki/views/index.rhtml +2 -0
  178. data/apps/wiki/views/save.rhtml +1 -0
  179. data/apps/wiki/wiki.rb +17 -0
  180. data/bin/appswarm +47 -0
  181. data/cucumber.yml +2 -0
  182. data/data/PermaspaceApp/AFS_WikiApp_wiki_config +6 -0
  183. data/data/draft.txt +63 -0
  184. data/docs/appswarm_motivation.graffle +0 -0
  185. data/docs/appswarm_pics.graffle/QuickLook/Preview.pdf +0 -0
  186. data/docs/appswarm_pics.graffle/QuickLook/Thumbnail.tiff +0 -0
  187. data/docs/appswarm_pics.graffle/data.plist +63494 -0
  188. data/docs/appswarm_pics.graffle/image1.tiff +0 -0
  189. data/docs/appswarm_pics.graffle/image2.tif +0 -0
  190. data/docs/appswarm_pics.graffle/image3.tif +0 -0
  191. data/docs/appswarm_pics.graffle/image4.tif +0 -0
  192. data/docs/appswarm_pics.graffle/image5.tiff +0 -0
  193. data/docs/routing.graffle +0 -0
  194. data/features/step_definitions/appstart_steps.rb +28 -0
  195. data/features/step_definitions/cluster_steps.rb +18 -0
  196. data/features/step_definitions/testbed_steps.rb +64 -0
  197. data/features/step_definitions/webapp_steps.rb +257 -0
  198. data/features/support/env.rb +7 -0
  199. data/lib/appswarm.rb +127 -0
  200. data/lib/appswarm/README.txt +67 -0
  201. data/lib/appswarm/app_config.rb +19 -0
  202. data/lib/appswarm/application.rb +267 -0
  203. data/lib/appswarm/breaking_mutex.rb +41 -0
  204. data/lib/appswarm/cluster_funcs.rb +157 -0
  205. data/lib/appswarm/cross_spectool.rb +153 -0
  206. data/lib/appswarm/crypt.rb +10 -0
  207. data/lib/appswarm/crypt/crypto.rb +90 -0
  208. data/lib/appswarm/crypt/rsa_key +15 -0
  209. data/lib/appswarm/crypt/rsa_key.pub +5 -0
  210. data/lib/appswarm/crypt/test.rb +27 -0
  211. data/lib/appswarm/dir_tool.rb +41 -0
  212. data/lib/appswarm/event_api.rb +7 -0
  213. data/lib/appswarm/features_helper.rb +44 -0
  214. data/lib/appswarm/global_service.rb +38 -0
  215. data/lib/appswarm/http.rb +1 -0
  216. data/lib/appswarm/http/http_app.rb +257 -0
  217. data/lib/appswarm/http/http_controller.rb +267 -0
  218. data/lib/appswarm/http/http_provider.rb +80 -0
  219. data/lib/appswarm/http/static/favicon.ico +0 -0
  220. data/lib/appswarm/http/static/javascript/._prototype.js +0 -0
  221. data/lib/appswarm/http/static/javascript/prototype.js +2515 -0
  222. data/lib/appswarm/http/webrick_logger.rb +12 -0
  223. data/lib/appswarm/net_service.rb +69 -0
  224. data/lib/appswarm/package.rb +88 -0
  225. data/lib/appswarm/parallel_each.rb +46 -0
  226. data/lib/appswarm/protocols/protocol_dice.rb +25 -0
  227. data/lib/appswarm/proxy_testing.rb +48 -0
  228. data/lib/appswarm/public_api.rb +35 -0
  229. data/lib/appswarm/routing/matrix_math.rb +57 -0
  230. data/lib/appswarm/routing/pca.rb +211 -0
  231. data/lib/appswarm/routing/routetest.rb +85 -0
  232. data/lib/appswarm/routing/routing.rb +326 -0
  233. data/lib/appswarm/routing/spec/nods_spec.rb +23 -0
  234. data/lib/appswarm/routing/spec/pca_spec.rb +27 -0
  235. data/lib/appswarm/routing/spec/routing_spec.rb +91 -0
  236. data/lib/appswarm/secure_con.rb +437 -0
  237. data/lib/appswarm/secure_connection.rb +79 -0
  238. data/lib/appswarm/secure_marshal.rb +137 -0
  239. data/lib/appswarm/service.rb +76 -0
  240. data/lib/appswarm/simple_marshal.rb +96 -0
  241. data/lib/appswarm/simple_marshal_parser.rb +1243 -0
  242. data/lib/appswarm/simple_marshal_parser.tt +158 -0
  243. data/lib/appswarm/spec/application_spec.rb +50 -0
  244. data/lib/appswarm/spec/cluster_spec.rb +2 -0
  245. data/lib/appswarm/spec/hexdist_spec.rb +13 -0
  246. data/lib/appswarm/spec/http_controller_spec.rb +18 -0
  247. data/lib/appswarm/spec/main_spec.rb +6 -0
  248. data/lib/appswarm/spec/parallel_each_spec.rb +30 -0
  249. data/lib/appswarm/spec/secure_connection_spec.rb +108 -0
  250. data/lib/appswarm/spec/secure_marshal_spec.rb +93 -0
  251. data/lib/appswarm/spec/simple_marshal_spec.rb +87 -0
  252. data/lib/appswarm/spec/tools_spec.rb +13 -0
  253. data/lib/appswarm/spec/whiteboard_spec.rb +20 -0
  254. data/lib/appswarm/spec_helper.rb +18 -0
  255. data/lib/appswarm/test_bed.rb +207 -0
  256. data/lib/appswarm/tools.rb +284 -0
  257. data/lib/appswarm/tools/http_tunnel_client.rb +139 -0
  258. data/lib/appswarm/tools/http_tunnel_common.rb +8 -0
  259. data/lib/appswarm/tools/http_tunnel_server.rb +78 -0
  260. data/lib/appswarm/tools/parser/example_data.simple +102 -0
  261. data/lib/appswarm/tools/parser/match_test.rb +14 -0
  262. data/lib/appswarm/tools/parser/parser_lib.rb +165 -0
  263. data/lib/appswarm/tools/parser/parser_test.rb +104 -0
  264. data/lib/appswarm/tools/parser/spec/parser_spec.rb +44 -0
  265. data/lib/appswarm/tools/pipes.rb +95 -0
  266. data/lib/appswarm/tools/spec/tracing_spec.rb +16 -0
  267. data/lib/appswarm/tools/spec/waiting_queue_spec.rb +15 -0
  268. data/lib/appswarm/tools/thread_tool.rb +61 -0
  269. data/lib/appswarm/tools/tracing.rb +84 -0
  270. data/lib/appswarm/tools/treetop_test.rb +20 -0
  271. data/lib/appswarm/tools/treetop_test_grammar.rb +114 -0
  272. data/lib/appswarm/tools/treetop_test_grammar.tt +7 -0
  273. data/lib/appswarm/tools/waiting_prio_queue.rb +47 -0
  274. data/lib/appswarm/tools/waiting_queue.rb +34 -0
  275. data/lib/appswarm/whiteboard.rb +73 -0
  276. data/nettest.rb +50 -0
  277. data/packages/README.txt +1 -0
  278. data/packages/msandbox/data/packages/store/my.txt +1 -0
  279. data/packages/msandbox/interfaces.rb +172 -0
  280. data/packages/msandbox/old/defa.rb +3 -0
  281. data/packages/msandbox/old/test.rb +14 -0
  282. data/packages/msandbox/old/test2.rb +56 -0
  283. data/packages/msandbox/package.rb +67 -0
  284. data/packages/msandbox/packages/store/config.yml +1 -0
  285. data/packages/msandbox/packages/store/main.rb +27 -0
  286. data/packages/msandbox/packages/store/myinclude.rb +7 -0
  287. data/packages/msandbox/packages/store_test/config.yml +1 -0
  288. data/packages/msandbox/packages/store_test/main.rb +9 -0
  289. data/packages/msandbox/server.rb +146 -0
  290. data/packages/msandbox/test.rb +13 -0
  291. data/packages/msandbox/test2.rb +29 -0
  292. data/templates/web/appswarm/controllers/appswarm.rb +41 -0
  293. data/templates/web/appswarm/layouts/main.rhtml +20 -0
  294. data/templates/web/appswarm/models/asmenu.rb +14 -0
  295. data/templates/web/appswarm/models/asuser.rb +30 -0
  296. data/templates/web/appswarm/static/custom.css +15 -0
  297. data/templates/web/appswarm/static/home.css +134 -0
  298. data/templates/web/appswarm/static/mainMenu.css +32 -0
  299. data/templates/web/appswarm/static/menu.css +99 -0
  300. data/templates/web/appswarm/views/_mainMenu.rhtml +5 -0
  301. data/templates/web/appswarm/views/_menu.rhtml +13 -0
  302. data/templates/web/appswarm/views/_userInfo.rhtml +7 -0
  303. data/templates/web/appswarm/views/login.rhtml +9 -0
  304. data/tools/checkPort.rb +11 -0
  305. metadata +379 -0
@@ -0,0 +1,68 @@
1
+ Feature: Settings of applications
2
+ @settings2
3
+
4
+ Scenario: Creating and Removing http-app-instances
5
+ Given a testbed with a "LocalWebServer" application
6
+ And a "Admin" application in it
7
+ And a "HelloWorld" application in it
8
+ When I visit "/admin" on the "LocalWebServer"
9
+ And I click on "Settings HelloWorldApp"
10
+ Then the resulting html page contains a field "NewInstanceName"
11
+ When I enter "MyInstance" into "NewInstanceName"
12
+ And click on "CreateInstance"
13
+ Then the resulting html page contains "NewInstanceName"
14
+ And the "HelloWorld" application has a "MyInstance" instance
15
+ And the resulting html page contains "MyInstance"
16
+ When I click on "Delete" within the "MyInstance" form
17
+ Then the "HelloWorld" application has no "MyInstance" instance
18
+ And the resulting html page doesn't contain "MyInstance"
19
+ And the resulting html page contains "NewInstanceName"
20
+
21
+ @settings
22
+
23
+ Scenario: Publishing your http-app instance on a LocalWebServer
24
+ Given a testbed with a "LocalWebServer" application
25
+ And a "Admin" application in it
26
+ And a "HelloWorld" application in it
27
+ When I visit "/admin" on the "LocalWebServer"
28
+ And I click on "Settings HelloWorldApp"
29
+ Then the resulting html page contains a field "NewInstanceName"
30
+ When I enter "MyInstance" into "NewInstanceName"
31
+ And click on "Create Instance"
32
+ Then the resulting html page contains "NewInstanceName"
33
+ And the "HelloWorld" application has a "MyInstance" instance
34
+ When I visit "/admin" on the "LocalWebServer"
35
+ And I click on "Settings LocalWebServerApp"
36
+ Then the resulting html page contains "Settings"
37
+ When I enter "/hello" into "mountPath"
38
+ Then the resulting html page contains "HelloWorld"
39
+ When I select "HelloWorld" from "httpApp"
40
+ And I select "MyInstance" from "httpAppInstance"
41
+ When I click on "Add mount"
42
+ Then the resulting html page contains "/hello"
43
+ And the resulting html page contains "MyInstance"
44
+ When I visit "/hello" on the "LocalWebServer"
45
+ Then the resulting html page contains "Hello World"
46
+ And the resulting html page contains "MyInstance"
47
+ When I visit "/admin" on the "LocalWebServer"
48
+ And I click on "Settings LocalWebServerApp"
49
+ And I click on "Delete" within the "/hello" form
50
+ Then the resulting html page doesn't contain /MyInstance.* instance/
51
+ When I visit "/hello" on the "LocalWebServer"
52
+ Then it is given nothing
53
+
54
+
55
+ @settings_restart
56
+ Scenario: Restarting testbed leaves settings untouched
57
+ Given a testbed with a "LocalWebServer" application
58
+ And a "Admin" application in it
59
+ And a "HelloWorld" application in it
60
+ And I create a "test" instance on the "HelloWorld" http-application
61
+ Then the "HelloWorld" application has a "test" instance
62
+ When the "test" instance of "HelloWorld" is offered on path "/hello" on the "LocalWebServer" application
63
+ And it is restarted
64
+ Then the "HelloWorld" application has a "test" instance
65
+ And the "LocalWebServer" has "3" mounts
66
+ When I visit "/hello" on the "LocalWebServer"
67
+ Then the resulting html page contains "test"
68
+ # thus the instance is still there and mounted
@@ -0,0 +1,27 @@
1
+ Feature: Starting applications on startup
2
+ Appswarm should start all applications defined within BASIC_APPS at startup.
3
+ Apart from this it should start applications that were used in the last session.
4
+
5
+ @startup
6
+ Scenario: Startup from scratch
7
+ Given a testbed
8
+ When the cluster is running
9
+ Then one "Admin" application should be running
10
+ And one "LocalFileStore" application should be running
11
+ And one "LocalWebServer" application should be running
12
+ And one "Permaspace" application should be running
13
+ And one "Home" application should be running
14
+ And one "SessionManager" application should be running
15
+
16
+ Scenario: Starting an application, stopping the cluster and restoring the application
17
+ Given a testbed with a "Admin" application
18
+ And a "Wiki" application in it
19
+ When it is restarted
20
+ Then one "Admin" application should be running
21
+ And one "LocalFileStore" application should be running
22
+ And one "LocalWebServer" application should be running
23
+ And one "Permaspace" application should be running
24
+ And one "Home" application should be running
25
+ And one "Wiki" application should be running
26
+ And one "SessionManager" application should be running
27
+
@@ -0,0 +1,10 @@
1
+ <html>
2
+ <head>
3
+ <%=css("admin")%>
4
+ <%=javascript("prototype.js")%>
5
+ </head>
6
+ <body>
7
+ <h1>AppSwarm administration</h1>
8
+ <%=content%>
9
+ </body>
10
+ </html>
@@ -0,0 +1,52 @@
1
+ class AdminAppSettings
2
+ def self.data(mapping)
3
+ pp mapping
4
+ end
5
+
6
+ attr_reader :data
7
+
8
+ def initialize(app)
9
+ @app=app
10
+ @data={}
11
+ end
12
+
13
+ def []=(name,value)
14
+ @data[name]=value
15
+ end
16
+
17
+ def buildForm
18
+ @data.map{|setting|
19
+
20
+ }
21
+ end
22
+
23
+ end
24
+
25
+ class SomeSettings
26
+ def initialize(app)
27
+ @app=app
28
+ end
29
+ def valuesFor(input)
30
+ end
31
+
32
+ end
33
+
34
+ class StringSetting
35
+ def htmlField(name)
36
+ "<input type='input' name='#{name}'>#{value}</input>"
37
+ end
38
+ end
39
+
40
+ class HTTPInstanceSetting
41
+ def htmlField(name)
42
+
43
+ end
44
+
45
+ def possibleHttpApps
46
+ @app.cluster.getApps(HTTPApp).map{|app|app.getAppName}
47
+ end
48
+
49
+ def possibleInstances(httpApp)
50
+ @app.cluster.getAppByName(httpApp).instances
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ table.log
2
+ {
3
+ font-size:8pt;
4
+ font-family: monospace;
5
+ border: 1px solid black;
6
+ }
7
+ table.log tr.odd
8
+ {
9
+ background-color:#AAAAFF;
10
+ }
11
+ table.log tr.even
12
+ {
13
+ background-color:#CCCCFF;
14
+ }
15
+ table.log td
16
+ {
17
+ vertical-align:top;
18
+
19
+ }
20
+ table.log td.what
21
+ {
22
+ width:40em;
23
+ }
@@ -0,0 +1,21 @@
1
+ <div id='log'
2
+ <table class='log'>
3
+ <script language='javascript'>
4
+ function mreload()
5
+ {
6
+ x=new Ajax.Updater('log', '/admin/_log', { method: 'get' });
7
+ setTimeout('mreload();',2000);
8
+ }
9
+ setTimeout('mreload();',2000);
10
+ </script>
11
+ <%
12
+ loglist.each{|entry| %>
13
+ <tr class='<%=count(:tr,2)==0?"odd":"even"%>'>
14
+ <td><%=entry.time.to_s.to_h%></td>
15
+ <td><%=entry.klass.to_s.to_h%></td>
16
+ <td><%=entry.appname.to_s.to_h%></td>
17
+ <td class='what'><%=entry.what.to_h%></td>
18
+ </tr>
19
+ <% } %>
20
+ </table>
21
+ </div>
@@ -0,0 +1,43 @@
1
+ <table>
2
+ <% i=0 %>
3
+ <% apps.each{|a| %>
4
+ <tr>
5
+ <td>
6
+ <%=i+=1%>
7
+ </td>
8
+ <td>
9
+ <a href='/admin/info/<%=a.getAppName%>'><%=a.getAppName%></a>
10
+ </td>
11
+ <td>
12
+ <%=a.class.to_s.to_h %>
13
+ </td>
14
+ <td>
15
+ <a href='/admin/stop/<%=a.object_id%>'>Stop</a>
16
+ </td>
17
+ <td>
18
+ <a href='/admin/settings/index/<%=a.object_id%>'>Settings <%=a.class.to_s.to_h%></a>
19
+ </td>
20
+ <td><%=a.getAppId%></td>
21
+ <% if a.is_a?(HTTPApp) %>
22
+ <td>
23
+ <a href='<%=a.url%>'>Link</a>
24
+ </td>
25
+ <% end %>
26
+ </tr>
27
+ <% } %>
28
+ </table>
29
+ <hr>
30
+ Application-Types
31
+ <table>
32
+ <% appTypes.each{|apptype| %>
33
+ <tr>
34
+ <td><%=apptype%> </td>
35
+ <td ><a href="/admin/start/<%=apptype %>">Start <%=apptype%></a></td>
36
+ </tr>
37
+ <% } %>
38
+ </table>
39
+ <hr>
40
+ <a href='/admin/shutdown'>Shutdown</a>
41
+
42
+
43
+ <%= render_partial :log %>
@@ -0,0 +1,7 @@
1
+ <html>
2
+ <body>
3
+ <pre>
4
+ <%=infoVar.pretty_inspect.to_hents%>
5
+ </pre>
6
+ </body>
7
+ </html>
@@ -0,0 +1,9 @@
1
+ <h2>Settings</h2>
2
+
3
+ <%=appSettings.data.inspect.to_h%>
4
+
5
+ <form>
6
+ <%= render_partial :settings_string %>
7
+ <%= render_partial :settings_httpapp_instance %>
8
+ </form>
9
+
@@ -0,0 +1,15 @@
1
+ <% instances.each{|instance| %>
2
+ <li>
3
+ <%=instance.instanceName%>
4
+ <form method="POST" action="<%=url(:action=>:del)%>/<%=@targetApp.object_id%>" name="<%=instance.instanceName%>">
5
+ <button name="delete">Delete</button>
6
+ <input type="hidden" name="instanceName" value="<%=instance.instanceName%>" />
7
+ </form>
8
+ </li>
9
+ <% } %>
10
+
11
+ <form method="POST" action="<%=url(:action=>:add)%>">
12
+ <input type="hidden" name="appId" value="<%=@targetApp.object_id%>" />
13
+ <input type="text" name="NewInstanceName" />
14
+ <button name="CreateInstance">Create Instance</button>
15
+ </form>
@@ -0,0 +1,32 @@
1
+ Current mount points:
2
+ <ul>
3
+ <% @targetApp.mounts.each{|mount| %>
4
+ <li>
5
+ <a href="<%="/"+mount.mountPoint%>">
6
+ "<%=mount.mountPoint%>" to "<%=mount.instance.instanceName%>" instance of <%=mount.instance.instanceType%>
7
+ </a>
8
+ <form method="POST" action="<%=url(:action=>:del)%>/<%=@targetApp.object_id%>" name="<%=mount.mountPoint%>">
9
+ <button name="delete" value="Delete">Delete</button>
10
+ <input type="hidden" name="mount" value="<%=mount.mountPoint%>" />
11
+ </form>
12
+ </li>
13
+ <% } %>
14
+ </ul>
15
+
16
+ Create new mount point:
17
+ <form method="POST" action="<%=url(:action=>:addMount)%>/<%=@targetApp.object_id%>">
18
+ <input type="text" name="mountPath">/</input>
19
+ <select name="httpApp">
20
+ <% @targetApp.cluster.getApps(:httpApp).each{|httpApp| %>
21
+ <option value="<%=httpApp.getAppName%>"><%=httpApp.shortName%></option>
22
+ <% } %>
23
+ </select>
24
+ <select name="httpAppInstance">
25
+ <% @targetApp.cluster.getApps(:httpApp).map{|app|app.instances}.flatten.each{|instance| %>
26
+ <option value="<%=instance.instanceName%>"><%=instance.instanceName%></option>
27
+ <% } %>
28
+ </select>
29
+ <button name="Add mount">Add mount</button>
30
+ </form>
31
+
32
+
@@ -0,0 +1,3 @@
1
+ <h2>Settings</h2>
2
+
3
+ <%= render_partial(:editApp) %>
@@ -0,0 +1,6 @@
1
+ <%#
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+ %>
5
+
6
+ <%= "indexmyyy" %>
@@ -0,0 +1,11 @@
1
+ require 'service.rb'
2
+
3
+ class ApplicationProviderApp<Service
4
+ def initialize(cluster,options)
5
+ super(cluster,options,:appProvider)
6
+
7
+
8
+ end
9
+
10
+
11
+ end
data/apps/blog/blog.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'http.rb'
2
+
3
+ class BlogApp<HTTPApp
4
+ requires :localTupleSpace
5
+ def initialize(*ops)
6
+ super
7
+ u=url
8
+ withAppFork(:directoryService) do
9
+ loop do
10
+ begin
11
+ log "Trying to register blog"
12
+ register(u,"blog")
13
+ log "Registered blog"
14
+ begin
15
+ assert{lookup(u)=="blog"}
16
+ rescue Object=>e
17
+ log e,e.backtrace
18
+ end
19
+ break
20
+ rescue NetApplication::NotInitialized=>e
21
+ #pp e
22
+ log "Failed to register blog",e
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ class Entry
2
+ attr_reader :body, :title
3
+ def initialize(params)
4
+ @body=params["body"].to_s
5
+ @title=params["title"].to_s
6
+ end
7
+ end
8
+
9
+ class Blog<HTTPController
10
+ def initialize(app)
11
+ super
12
+
13
+ @tspace=app.cluster.getApp(:localTupleSpace)
14
+ end
15
+ def index(*s)
16
+ @entries=@tspace.read(:entries)
17
+ @entries||=[]
18
+ end
19
+
20
+ def add
21
+ puts "ADD"
22
+ entries=@tspace.lend(:entries)
23
+ entries||=[]
24
+ entries << Entry.new(params)
25
+ @tspace.store(:entries,entries)
26
+
27
+ redirect_to(url(:action=>:index))
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ <html>
2
+ <body>
3
+ BLOG
4
+
5
+ <%=tspace.to_s%>
6
+
7
+ <%=params.inspect%>
8
+
9
+ <br>
10
+ <% entries.each{|entry| %>
11
+ <h3><%=entry.title%></h3>
12
+ <p><%=entry.body%></p>
13
+
14
+ <% } %>
15
+
16
+ <br>
17
+
18
+ <form method='POST' action='/blog/add'>
19
+ <input type='text' name='title' />
20
+ <br>
21
+ <textarea name='body'></textarea>
22
+ <br>
23
+ <input type='submit'>
24
+ </form>
25
+
26
+ </body>
27
+ </html>
@@ -0,0 +1,32 @@
1
+ require 'application.rb'
2
+
3
+ class BrowserStarterApp<Application
4
+ def initialize(*s)
5
+ super
6
+ end
7
+
8
+ def run
9
+ dirs=["/Applications/*/Contents/MacOS","/Applications/*/*/Contents/MacOS",
10
+ "/usr/bin","/usr/local/bin","/opt/bin"
11
+ ]
12
+ browsers=["firefox"]
13
+
14
+ bs=browsers.map{|b|
15
+ dirs.map{|d|
16
+ f=File.join(d,b)
17
+ pp f
18
+ Dir[f]
19
+ }}.flatten
20
+
21
+ browser=bs[0]
22
+
23
+ pp "BS:",bs
24
+
25
+ if browser
26
+ system "#{browser} http://localhost:4000"
27
+ else
28
+ # the windows-way
29
+ system "start http://localhost:4000"
30
+ end
31
+ end
32
+ end