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
Binary file
@@ -0,0 +1,28 @@
1
+ After do
2
+ @testbed.stop if @testbed
3
+ @testbed.stop! if @testbed
4
+ @testbed=nil
5
+ end
6
+
7
+ Given /^an empty "([^\"]*)" directory$/ do |dir|
8
+ if dir==".appswarm"
9
+ p=File.join(ENV["HOME"],dir)
10
+ `rm -rf #{p}`
11
+ end
12
+ #pending
13
+ end
14
+
15
+ Given /^a testbed$/ do
16
+ @testbed=TestBed.new
17
+ end
18
+
19
+ When /^the cluster is running$/ do
20
+ @testbed.runCluster
21
+ sleep 1
22
+ end
23
+
24
+ Then /^the appId of "(.*)" is different from the appId of "(.*)"$/ do |app0,app1|
25
+ app0=testbed.getApp(app0)
26
+ app1=testbed.getApp(app1)
27
+ app0.getAppId.should_not == app1.getAppId
28
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ After do
4
+ if @testbeds
5
+ @testbeds.p_each{|t|t.stop}
6
+ @testbeds.p_each{|t|t.stop!}
7
+ #@testbeds.clear
8
+ end
9
+ end
10
+
11
+
12
+
13
+
14
+
15
+
16
+ def testbed
17
+ @testbed || @testbeds[-1]
18
+ end
@@ -0,0 +1,64 @@
1
+
2
+ Before do
3
+ # TestBed.finishTesting
4
+ end
5
+
6
+ After do
7
+ TestBed.finishTesting
8
+ end
9
+
10
+ Given /^a testbed with an? "([^\"]*)" application$/ do |appName|
11
+ @testbed=TestBed.new
12
+ @testbed.run(appName)
13
+ end
14
+
15
+ Given /^a "([^\"]*)" application in it$/ do |name|
16
+ @testbed.runAndWait(name)
17
+ end
18
+
19
+ When /^I store a string "([^\"]*)" for "([^\"]*)" within the "([^\"]*)"$/ do |str, app, store|
20
+ store=@testbed.getApp(store)
21
+ app=@testbed.getApp(app)
22
+ app.should_not be_nil
23
+ store.config(app)["exampleString"]=str
24
+ end
25
+
26
+ Then /^the restored string from the "([^\"]*)" for "([^\"]*)" is "([^\"]*)"$/ do |store,app,str|
27
+ store=@testbed.getApp(store)
28
+ app=@testbed.getApp(app)
29
+ store.config(app)["exampleString"].content.should ==str
30
+ end
31
+
32
+ When /^the testbed is stopped$/ do
33
+ @testbed.stop
34
+ @testbed=nil
35
+ end
36
+
37
+ When /^a new testbed with a "([^\"]*)" application is started$/ do |app|
38
+ @testbed=TestBed.new
39
+ @testbed.run(app)
40
+ end
41
+
42
+ Then /^the restored string from the "([^\"]*)" for "([^\"]*)" is not existing$/ do |store,app|
43
+ store=@testbed.getApp(store)
44
+ app=@testbed.getApp(app)
45
+ app.should_not be_nil
46
+ store.config(app)["exampleString"].content.should be_nil
47
+
48
+ end
49
+
50
+ When /^the scenario is started$/ do
51
+
52
+ end
53
+
54
+ Then /^the "([^\"]*)" directory should be empty$/ do |dir|
55
+ #p=
56
+ Dir[File.join(ENV["HOME"],dir,"*")].should == []
57
+ end
58
+
59
+
60
+
61
+ Then /^a "([^\"]*)" application is running$/ do |appName|
62
+ testbed.getLocalApplications.map{|a|a.class.to_s.gsub(/App$/,'')}.member?(appName).should be_true
63
+ end
64
+
@@ -0,0 +1,257 @@
1
+ require 'webrat'
2
+ require 'webrat/mechanize'
3
+
4
+
5
+ After do
6
+ @testbed.stop if @testbed
7
+ @testbed.stop! if @testbed
8
+ @testbed=nil
9
+ end
10
+
11
+ Given /^I create a "([^\"]*)" instance on the "([^\"]*)" http\-application$/ do |instance,app|
12
+ app=@testbed.getApp(app)
13
+ app.createInstance(instance)
14
+ end
15
+
16
+ When /^the "([^\"]*)" instance of "([^\"]*)" is offered on path "([^\"]*)" on the "([^\"]*)" application$/ do |instance,webApp,url,server|
17
+ webApp=@testbed.getApp(webApp)
18
+ server=@testbed.getApp(server)
19
+ inst=webApp.getInstanceByName(instance)
20
+ server.mount(url,inst)
21
+ end
22
+
23
+ def visit(app,url)
24
+ app=@testbed.getApp(app)
25
+ url=app.url+url
26
+ @webrat=Webrat::MechanizeSession.new
27
+ begin
28
+ @webrat.visit(url)
29
+ #res=@webrat.get(url,nil)
30
+ @result=@webrat.page
31
+ @result.should_not be_nil
32
+ @error=nil
33
+ rescue WWW::Mechanize::ResponseCodeError=>e
34
+ @result=nil
35
+ @error=e
36
+ rescue Object=>e
37
+ raise e
38
+ end
39
+ end
40
+
41
+ When /^I visit "([^\"]*)" on the "([^\"]*)"$/ do |url, app|
42
+ visit(app,url)
43
+ end
44
+
45
+
46
+ When /^a client accesses the "([^\"]*)" (application )?on "([^\"]*)"$/ do |app,dummy,url|
47
+ visit(app,url)
48
+ end
49
+
50
+
51
+ Then /^the resulting (html )?page contains "([^\"]*)"$/ do |html,str|
52
+ @result.should be_a_kind_of(WWW::Mechanize::Page)
53
+ @result.content.should=~/#{str}/
54
+ end
55
+
56
+ Then /^the resulting html page doesn't contain \/(.*)\/$/ do |pattern|
57
+ pattern=/#{pattern}/
58
+ @result.should be_a_kind_of(WWW::Mechanize::Page)
59
+ @result.content.should_not=~pattern
60
+ end
61
+
62
+
63
+ Then /^the resulting (html )?page contains a field "([^\"]*)"$/ do |html,str|
64
+ @result.body.should be_valid_html
65
+ str="//input[@name='#{str}']" if str=~/^[a-zA-Z]*$/
66
+ field=@webrat.field_by_xpath(str)
67
+ field.should_not be_nil
68
+ end
69
+
70
+
71
+
72
+ Then /^it is given an error$/ do
73
+ @result.should be_nil
74
+ @error.should_not be_nil
75
+ end
76
+
77
+ When /^the "([^\"]*)" instance of "([^\"]*)" is offered on the "([^\"]*)" application$/ do |instance, app, provider|
78
+ app=@testbed.getApp(app)
79
+ provider=@testbed.getApp(provider)
80
+ instance=app.getInstanceByName(instance)
81
+ provider.offerInstance(instance)
82
+
83
+ end
84
+
85
+ When /^the "([^\"]*)" instance of "([^\"]*)" is globally mounted on "([^\"]*)"$/ do |instanceName, webApp, url|
86
+ webApp=@testbed.getApp(webApp)
87
+ instance=webApp.getInstanceByName(instanceName)
88
+ nameService=@testbed.getApp(:nameService)
89
+ nameService.export(url,instance)
90
+ end
91
+
92
+ When /^a client accesses "([^\"]*)" through "([^\"]*)"$/ do |url, proxy|
93
+ proxy=@testbed.getApp(proxy)
94
+
95
+ @webrat=Webrat::MechanizeSession.new
96
+ @webrat.mechanize.set_proxy("localhost",proxy.port)
97
+ begin
98
+ @webrat.visit(url)
99
+ res=@webrat.get(url,nil)
100
+ @result=res
101
+ @error=nil
102
+ rescue WWW::Mechanize::ResponseCodeError=>e
103
+ @result=nil
104
+ @error=e
105
+ end
106
+ end
107
+
108
+
109
+ When /^the browser accesses the "(.*)" application on "(.*)"$/ do |app,url|
110
+ app=testbed.getApp(app)
111
+ lws=testbed.getApp("LocalWebServer")
112
+
113
+ @wehrat=Webrat::MechanizeSession.new
114
+ if lws
115
+ url=lws.url+url
116
+ else
117
+ proxy=testbed.getApp("GlobalWebProxy")
118
+ unless proxy
119
+ proxy=testbed.run("GlobalWebProxy")
120
+ end
121
+ s.mechanize.set_proxy("localhost",proxy.port)
122
+ url="my.appswarm"
123
+ ns=testbed.getOrCreate("NameService")
124
+ ns.export(url,app.defaultInstance)
125
+ url="http://#{url}"
126
+ sleep 2
127
+ end
128
+ #url=app.url+url
129
+ begin
130
+ res=@wehrat.get(url,nil)
131
+ @result=res
132
+ @error=nil
133
+ rescue WWW::Mechanize::ResponseCodeError=>e
134
+ pp e
135
+ pp url
136
+ @result=nil
137
+ @error=e
138
+ rescue Object=>e
139
+ pp e
140
+ end
141
+ #pending
142
+ end
143
+
144
+ Then /^one "([^\"]*)" application should be running$/ do |app|
145
+ testbed.getApp(app).should_not be_nil
146
+ end
147
+
148
+ When /^it is restarted$/ do
149
+ id=testbed.testbedId
150
+ testbed.log testbed.getLocalApplications
151
+ testbed.log testbed
152
+ testbed.log "RESTART - stop"
153
+ testbed.stop
154
+ @testbed=TestBed.new({:testbedId=>id})
155
+ @testbed.log "RESTART - start"
156
+ @testbed.runCluster
157
+ @testbed.waitUntilAllUpAndRunning
158
+ @testbed.log "ALL RUNNING ?"
159
+ end
160
+
161
+
162
+ Given /^the default instance of the "([^\"]*)" application is offered on "([^\"]*)" under "([^\"]*)"$/ do |app, ws, url|
163
+ app=testbed.getApp(app)
164
+ ws=testbed.getApp(ws)
165
+ ws.mount(url,app.defaultInstance)
166
+ end
167
+
168
+
169
+ When /^I enter (text )?"([^\"]*)" into "([^\"]*)"$/ do |dummy,text, field|
170
+ @webrat
171
+ @webrat.fill_in field, :with => text
172
+ end
173
+
174
+ When /^(I )?click (on)? "([^\"]*)"$/ do |i,on,button|
175
+ page=@result
176
+ l=page.links.select{|l|
177
+ l.text==button}[0]
178
+ if l
179
+ begin
180
+ @webrat.click_link button
181
+ rescue Object=>e
182
+ begin
183
+ @webrat.click_button button
184
+ rescue Object=>e
185
+ pp e,e.backtrace
186
+ raise e
187
+ end
188
+ end
189
+ else
190
+ clicked=false
191
+ ["//button[@name='#{button}']","//input[@value='#{button}']","//button[text()='#{button}']"].each{|xpath|
192
+ field=@webrat.field_by_xpath(xpath)
193
+ if field
194
+ field.click
195
+ clicked=true
196
+ break
197
+ end
198
+ }
199
+ unless clicked
200
+ pp page.body
201
+ raise "Button #{button} not found"
202
+ end
203
+ end
204
+ @result=@webrat.page
205
+ end
206
+
207
+ Then /it is given a valid html page/ do
208
+ @result.body.should be_valid_html
209
+ end
210
+
211
+ Then /it is given nothing/ do
212
+ @result.should be_nil
213
+ end
214
+
215
+
216
+ Then /^the access is restricted$/ do
217
+ begin
218
+ @webrat.response_code.should == 403
219
+ rescue Object=>e
220
+ pp e,e.backtrace
221
+ raise e
222
+ end
223
+ end
224
+
225
+ Then /^the "([^\"]*)" application has a "([^\"]*)" instance$/ do |appName, instanceName|
226
+ app=testbed.getApp(appName)
227
+ app.getInstanceByName(instanceName).should_not be_nil
228
+ end
229
+
230
+
231
+ When /^I click on "([^\"]*)" within the "([^\"]*)" form$/ do |buttonName, formName|
232
+ xpath="//form[@name='#{formName}']/button[text()='#{buttonName}']"
233
+ field=@webrat.field_by_xpath(xpath)
234
+ field.click
235
+ @result=@webrat.page
236
+ end
237
+
238
+ Then /^the resulting html page doesn't contain "([^\"]*)"$/ do |str|
239
+ @result.body.should_not =~/#{str}/
240
+ end
241
+
242
+ Then /^the "([^\"]*)" application has no "([^\"]*)" instance$/ do |appName, instanceName|
243
+ app=testbed.getApp(appName)
244
+ app.getInstanceByName(instanceName).should be_nil
245
+ end
246
+
247
+
248
+ When /^I select "([^\"]*)" from "([^\"]*)"$/ do |option, select|
249
+ @webrat.select option, :from => select
250
+ end
251
+
252
+ Then /^the "([^\"]*)" has "([^\"]*)" mounts$/ do |app, mountCount|
253
+ app=testbed.getApp(app)
254
+ app.mounts.length.should == mountCount.to_i
255
+ end
256
+
257
+
@@ -0,0 +1,7 @@
1
+ require 'spec/expectations'
2
+ require 'cucumber/formatter/unicode'
3
+ require 'pp'
4
+ $:<<File.expand_path('../../../lib',__FILE__)
5
+ $:<<File.expand_path('../../../lib/appswarm',__FILE__)
6
+
7
+ require 'features_helper.rb'
data/lib/appswarm.rb ADDED
@@ -0,0 +1,127 @@
1
+ $:<<File.join(File.expand_path('../appswarm',__FILE__))
2
+ Dir["apps/*"].each{|d|$: << d if File.directory?(d)}
3
+ require 'package.rb'
4
+ require 'optparse'
5
+ require 'cluster_funcs.rb'
6
+ require 'ubygems'
7
+
8
+ $DEBUGGING=true
9
+
10
+ class Appswarm
11
+ VERSION = '0.0.1'
12
+
13
+ include ClusterFuncs
14
+
15
+ BASIC_APPS=[
16
+ # "LocalFileStore",
17
+ # "LocalWebServer",
18
+ "Admin",
19
+ # "Permaspace",
20
+ # "Home"
21
+ ]
22
+
23
+ attr_reader :running, :options, :apps
24
+
25
+ def initialize(options={})
26
+ @apps=[]
27
+ @allApps=loadApps(self)
28
+
29
+ if options[:trace]
30
+ enableTracing
31
+ end
32
+
33
+ @options=options
34
+ @appid=0
35
+ @running=true
36
+ @stopping=false
37
+
38
+ @stopMutex=Mutex.new
39
+ trap("INT"){ Tracer::enable ; stop }
40
+ end
41
+
42
+ def start
43
+ @appClasses=@allApps
44
+
45
+ BASIC_APPS.each{|appClass|
46
+ log "STart #{appClass}"
47
+ run(appClass)
48
+ }
49
+ log "All Apps started"
50
+ end
51
+
52
+ def stopApp(app)
53
+ log "Stopping #{app}"
54
+ if @apps.member?(app)
55
+ app.stop
56
+ @apps.delete(app)
57
+ end
58
+ end
59
+ def cloneApp(app)
60
+ if @apps.member?(app)
61
+ Thread.new {
62
+ log "Starting new app from #{app}"
63
+ options={:appName=>app.class.to_s+@appid.to_s}
64
+ inst=app.class.new(self,options)
65
+ @appid+=1
66
+ #inst.setAppName(app.getAppName.gsub(/[0-9]*$/,"")+@appid.to_s)
67
+ #raise 1
68
+ getApp(:logger).log(self,inst.getAppName)
69
+ @apps << inst
70
+ inst.run
71
+ }
72
+ end
73
+ end
74
+
75
+ def stop
76
+ puts "STOPPP"
77
+ puts @apps.length
78
+ [:quit,:stop,:stop!].each{|f|
79
+ puts "Calling #{f}"
80
+ @apps.p_each{|app|
81
+
82
+ if app.respond_to?(f)
83
+ app.send(f)
84
+ else
85
+ puts "#{app} does not support #{f}"
86
+ end
87
+
88
+ }
89
+ sleep 0.2
90
+ }
91
+ #@apps.p_each{|app|app.stop if app.respond_to?(:stop)}
92
+ end
93
+ def getApp(type)
94
+ getApps(type)[0]
95
+ end
96
+ def getAppByName(name)
97
+ @apps.select{|app|app.getAppName==name}[0]
98
+ end
99
+
100
+
101
+ def log(*s)
102
+ pp s
103
+ loggers=getApps(:logger)
104
+ if loggers.length>0
105
+ loggers.each{|app|app.log(self,"",*s)}
106
+ else
107
+ a=s.inspect.to_s
108
+ log_direct(caller[0],nil,a)
109
+ end
110
+ end
111
+
112
+ def getGlobalServices
113
+ @apps.select{|a|a.is_a?(GlobalService)}.map{|a|a.serviceID}
114
+ end
115
+
116
+
117
+ def shutdown
118
+ @running=false
119
+ stop
120
+ end
121
+
122
+ def appswarmBaseDir
123
+ File.join(ENV["HOME"],".appswarm")
124
+ end
125
+
126
+ end
127
+