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,180 @@
1
+ require 'whiteboard.rb'
2
+
3
+ class RemoteSimpleAPI
4
+ class CallingTransaction
5
+ def initialize(app,txid)
6
+ @app=app
7
+ @txid=txid
8
+ end
9
+ def sendResult(r)
10
+ @app.sendResult(@txid,r)
11
+ end
12
+ end
13
+
14
+ class SentTransaction
15
+ TIMEOUT=10 #
16
+
17
+ def initialize(app,txid,from)
18
+ @app=app
19
+ @from=from
20
+ @txid=txid
21
+ end
22
+
23
+ # waits for the return value
24
+ def wait(timeout=nil)
25
+ timeout||=TIMEOUT
26
+ @app.getFromWhiteboard(@txid,@from,timeout)
27
+ end
28
+
29
+ def valueAvailable?
30
+ raise :NotImplementedYet # FIXME
31
+ end
32
+ end
33
+
34
+ class Service
35
+ # this function should not be called except through RewmoteSimpleAPI::hook(.)
36
+ def initialize(app,sname,pblock)
37
+ @app=app
38
+ @sname=sname
39
+ @block=pblock
40
+ end
41
+
42
+ # call service with *args and don't return anything - you won't get any info, if this succeeded
43
+ def sendAsync(node,*args)
44
+ @app.sendAsync(node,@sname,*data)
45
+ end
46
+
47
+ # sends *data to *node* and returns a SentTransaction value
48
+ def send(node,*data)
49
+ @app.send(node,@sname,*data)
50
+ end
51
+
52
+ # closes the service
53
+ def close
54
+ @app.closeService(self)
55
+ end
56
+
57
+ def name
58
+ @sname
59
+ end
60
+ def block
61
+ @block
62
+ end
63
+ end
64
+
65
+ def initialize(node)
66
+ @node=node
67
+
68
+ @txCount=0
69
+ @txMutex=Mutex.new
70
+
71
+ @services=[]
72
+
73
+ @node.addReceiver(self) {|from,args|
74
+ receive(from,args)
75
+ }
76
+
77
+ @whiteboard=Whiteboard.new
78
+ end
79
+
80
+ def me
81
+ @node.me
82
+ end
83
+
84
+ # close the api-object - api won't listen anymore
85
+ def close
86
+ @node.removeReceiver(self)
87
+ end
88
+
89
+ # hook up a new service with the given name and block - returns
90
+ # a Service object for simple handling of this service
91
+ def hook(serviceName,&block)
92
+ service=Service.new(self,serviceName,block)
93
+ @services << service
94
+ service
95
+ end
96
+
97
+ # send data to all hooks with name "serviceName" on node *node*
98
+ def send(node,serviceName,*data)
99
+ txid=nil
100
+ txid=getTxCount
101
+ sdata=Secure::Marshal::dump([false,serviceName,txid,*data])
102
+ @node.sendMessage(sdata,node)
103
+ SentTransaction.new(self,txid,node)
104
+ end
105
+
106
+
107
+ def sendAsync(node,serviceName,*data)
108
+ txid=nil
109
+ data=Secure::Marshal::dump([false,serviceName,txid,*data])
110
+
111
+ @node.sendMessage(data,node)
112
+ nil
113
+ end
114
+ def closeService(service)
115
+ @services.delete(service)
116
+ end
117
+
118
+ def getFromWhiteboard(tx,from,timeout)
119
+ log "getFromWhiteboard #{tx} #{from}"
120
+ @whiteboard.get([tx,from],timeout)
121
+ end
122
+ def stop
123
+
124
+ end
125
+
126
+ private
127
+
128
+ def getTxCount
129
+ id=nil
130
+ @txMutex.synchronize {
131
+ id=@txCount+=1
132
+ }
133
+ id
134
+ end
135
+
136
+ def receive(from,args)
137
+ args=Secure::Marshal.load(args)
138
+ #log "API RECEIVED",args.inspect
139
+ #log "FROM #{from}"
140
+ assert{args.is_a?(Array)}
141
+
142
+ if args[0]==false
143
+ call(from,args[1..-1])
144
+ else
145
+ pushReturn(from,args[1..-1])
146
+ end
147
+
148
+
149
+ end
150
+ def log(*x)
151
+ @node.log(*x)
152
+
153
+ end
154
+
155
+ # call local function of service
156
+ def call(from,args)
157
+ serviceName,tx,*args=args
158
+
159
+ @services.each{|service|
160
+ if service.name==serviceName
161
+ result=service.block.call(*args)
162
+ if tx
163
+ sendReturn(from,tx,result)
164
+ end
165
+ end
166
+ }
167
+ end
168
+
169
+ # put return value into whiteboard for retrieval
170
+ def pushReturn(from,args)
171
+ name,tx,value=args
172
+ @whiteboard.put([tx,from],value)
173
+ end
174
+
175
+ # send return value back to calling node
176
+ def sendReturn(from,tx,result)
177
+ data=Secure::Marshal::dump([true,nil,tx,result])
178
+ @node.sendMessage(data,from)
179
+ end
180
+ end
File without changes
@@ -0,0 +1,99 @@
1
+ require 'qos_queue.rb'
2
+ require 'network_interface_api.rb'
3
+
4
+ describe "QoS Queue" do
5
+
6
+ class TestNode<NetworkInterfaceAPI
7
+ attr_reader :sent
8
+ def initialize
9
+ super(nil)
10
+ @sent=[]
11
+ end
12
+ def sendMessage(data,node)
13
+ @sent<<[data,node]
14
+ end
15
+ end
16
+
17
+ class TestRec
18
+ attr_reader :received
19
+ def initialize(qq)
20
+ @received=[]
21
+ qq.addReceiver(self) {|from,args|
22
+ @received<<[from,args]
23
+ }
24
+ end
25
+ end
26
+ if false
27
+ it "should pass packages" do
28
+ tn=TestNode.new
29
+ qq=QoSQueue.new(tn)
30
+ tr=TestRec.new(qq)
31
+
32
+ data=1234
33
+
34
+ lambda {
35
+ qq.receive(:from,[1,QoSQueue::NORMAL_PKG,data])
36
+ }.should_not cross(QoSQueue,:requestPkg)
37
+ tr.received.should == [[:from,data]]
38
+ end
39
+
40
+ it "should request a missing first package" do
41
+ tn=TestNode.new
42
+ qq=QoSQueue.new(tn)
43
+ tr=TestRec.new(qq)
44
+
45
+ data=1234
46
+
47
+ qq.receive(:from,[2,QoSQueue::NORMAL_PKG,data])
48
+ sleep 0.2
49
+ tr.received.should == [[:from,data]]
50
+ tn.sent.should == [[[1,QoSQueue::REQUEST_PKG,nil],:from]]
51
+ end
52
+
53
+ it "should not request a received package anymore" do
54
+ tn=TestNode.new
55
+ qq=QoSQueue.new(tn)
56
+ tr=TestRec.new(qq)
57
+
58
+ data=1234
59
+
60
+ qq.receive(:from,[2,QoSQueue::NORMAL_PKG,data])
61
+ qq.receive(:from,[1,QoSQueue::NORMAL_PKG,data])
62
+ qq.receive(:from,[3,QoSQueue::NORMAL_PKG,data])
63
+ qq.receive(:from,[5,QoSQueue::NORMAL_PKG,data])
64
+ sleep 0.2
65
+ tr.received.should == [[:from,data]]*4
66
+ tn.sent.should == [[[1,QoSQueue::REQUEST_PKG,nil],:from],[[4,QoSQueue::REQUEST_PKG,nil],:from]]
67
+ end
68
+
69
+ end
70
+
71
+
72
+ # if false
73
+
74
+ it "should never miss a single package" do
75
+ FACTOR=200000
76
+ b1=TestBed.new
77
+ b2=TestBed.new
78
+ n1=b1.run("UdpNetwork").api
79
+ n2=b2.run("UdpNetwork").api
80
+ b1.run("NetworkDiscoveryUdp")
81
+ b2.run("NetworkDiscoveryUdp")
82
+
83
+ sleep 2
84
+ service1=n1.hook("test1"){|arg|
85
+ arg.should == "test1Arg"*FACTOR
86
+ "testRet"*FACTOR
87
+ }
88
+
89
+ measureTime {
90
+ n2.send(n1.me,"test1","test1Arg"*FACTOR).wait.should == "testRet"*FACTOR
91
+ }
92
+
93
+ b1.stop
94
+ b2.stop
95
+
96
+
97
+ end
98
+ #end
99
+ end
@@ -0,0 +1,35 @@
1
+ describe "Simple networking api" do
2
+
3
+
4
+ it "should provide a framework for running remote apps" do
5
+
6
+ FACTOR=200000
7
+
8
+ b1=TestBed.new
9
+ b2=TestBed.new
10
+
11
+ ["NodeBroadcast","NetworkDiscoveryUdp","NetworkDiscovery","UdpNetwork"].each{|n|
12
+ b1.run(n)
13
+ b2.run(n)
14
+ }
15
+
16
+ sleep 3
17
+
18
+ n1=b1.getApp(:fullNetworkNode).api
19
+ n2=b2.getApp(:fullNetworkNode).api
20
+
21
+ service1=n1.hook("test1"){|arg|
22
+ arg.should == "test1Arg"*FACTOR
23
+ "testRet"*FACTOR
24
+ }
25
+ puts "TESTTTTTTTTTTTTTTTTTTT"
26
+
27
+ measureTime {
28
+ n2.send(n1.me,"test1","test1Arg"*FACTOR).wait.should == "testRet"*FACTOR
29
+ }
30
+
31
+ b1.stop
32
+ b2.stop
33
+ end
34
+
35
+ end
@@ -0,0 +1,115 @@
1
+ alias :pputs :puts
2
+
3
+ def puts(*x)
4
+ if "#{x}"=~/.*NoMethod.*/
5
+ raise "MUH"
6
+ end
7
+ pputs *x
8
+ end
9
+
10
+ alias :ppp :pp
11
+ def pp(*x)
12
+ if "#{x}"=~/.*NoMethod.*/
13
+ raise "MUH"
14
+ end
15
+ ppp *x
16
+ end
17
+
18
+
19
+ describe "UDP Network" do
20
+
21
+ it "should offer itself over network discovery" do
22
+ b=TestBed.new
23
+ ["NetworkDiscovery","NetworkDiscoveryUdp","UdpNetwork"].each{|n|b.run(n)}
24
+ sleep 2
25
+ dis=b.getApp(:networkDiscovery)
26
+ pp dis.get
27
+ dis.get.should == [b.getApp(:fullNetworkNode).me]
28
+
29
+ b.stop
30
+ end
31
+
32
+ it "should connect to another node" do
33
+ b1=TestBed.new
34
+ b2=TestBed.new
35
+ ["UdpNetwork"].each{|n|
36
+ b1.run(n)
37
+ b2.run(n)
38
+ }
39
+
40
+ n1=b1.getApp(:fullNetworkNode)
41
+ n2=b2.getApp(:fullNetworkNode)
42
+
43
+ sleep 5
44
+
45
+ pp b1.getApp(:networkDiscovery).get
46
+ pp b2.getApp(:networkDiscovery).get
47
+
48
+ b2.getApp(:networkDiscovery).get.sort.should == [n1.me,n2.me].sort
49
+ b1.getApp(:networkDiscovery).get.sort.should == [n1.me,n2.me].sort
50
+
51
+ b1.stop
52
+ b2.stop
53
+
54
+ end
55
+
56
+ it "should provide some functions for spreading udp-node-information" do
57
+ b1=TestBed.new
58
+ b2=TestBed.new
59
+ b3=TestBed.new
60
+
61
+ [b1,b2,b3].each{|b|
62
+ b.run("NetworkDiscovery",{:discovery=>[:networkDiscoveryLocalstore]})
63
+ }
64
+
65
+ n1=b1.run("UdpNetwork")
66
+ n2=b2.run("UdpNetwork")
67
+ n3=b3.run("UdpNetwork")
68
+
69
+ store=b2.getApp(:networkDiscoveryLocalstore)
70
+ store.add(n1.me)
71
+ store.add(n3.me)
72
+
73
+ sleep UdpNetworkApp::SPREADING_INTERVAL*2
74
+
75
+ all=[n1,n2,n3].map{|n|n.me}.sort
76
+
77
+ n2.knownNodes.sort.should == all
78
+ n1.knownNodes.sort.should == all
79
+ n3.knownNodes.sort.should == all
80
+ end
81
+
82
+ it "should provide a framework for running remote apps" do
83
+ b1=TestBed.new
84
+ b2=TestBed.new
85
+
86
+ ["NodeBroadcast","NetworkDiscoveryUdp","NetworkDiscovery","UdpNetwork"].each{|n|
87
+ b1.run(n)
88
+ b2.run(n)
89
+ }
90
+
91
+ sleep 3
92
+
93
+ n1=b1.getApp(:fullNetworkNode).api
94
+ n2=b2.getApp(:fullNetworkNode).api
95
+
96
+ service1=n1.hook("test1"){|arg|
97
+ arg.should == "test1Arg"
98
+ "testRet"
99
+ }
100
+ service2=n2.hook("test1"){|arg|
101
+ arg.should == "test1Arg"
102
+ "testRet2"
103
+ }
104
+ measureTime {
105
+ n2.send(n1.me,"test1","test1Arg").wait.should == "testRet"
106
+ }
107
+
108
+ measureTime {
109
+ service1.send(n2.me,"test1Arg").wait.should == "testRet2"
110
+ }
111
+ b1.stop
112
+ b2.stop
113
+ end
114
+ end
115
+
@@ -0,0 +1,90 @@
1
+ require 'udp_transceiver.rb'
2
+
3
+ describe "UDP Transceiver" do
4
+ it "should send a packet correctly" do
5
+ bind="127.0.0.1"
6
+ udp1=UdpTransceiver.new(bind,8889)
7
+ udp2=UdpTransceiver.new("localhost",8898)
8
+ c12=udp1.connect(udp2.me)
9
+ c21=udp2.connect(udp1.me)
10
+
11
+ str="MUH"*10
12
+
13
+ c21.send(str)
14
+ sleep 0.5
15
+
16
+ c12.read.should == str
17
+
18
+ udp1.close!
19
+ udp2.close!
20
+ end
21
+
22
+ it "should work as a stream correctly" do
23
+ bind="127.0.0.1"
24
+ udp1=UdpTransceiver.new(bind,8889)
25
+ udp2=UdpTransceiver.new("localhost",8898)
26
+ c12=udp1.connect(udp2.me).stream
27
+ c21=udp2.connect(udp1.me).stream
28
+
29
+ str="MUH"*10000
30
+
31
+ c21.write(str)
32
+ sleep 0.1
33
+
34
+ c12.read.should == str
35
+
36
+ udp1.close!
37
+ udp2.close!
38
+ end
39
+
40
+ it "should support several separate streams simultaneously"
41
+
42
+ it "should ignore broken packets and afterwards it should continue" do
43
+ bind="127.0.0.1"
44
+ udp1=UdpTransceiver.new(bind,8889)
45
+ udp2=UdpTransceiver.new("localhost",8898)
46
+ c12=udp1.connect(udp2.me)
47
+ udp2.close!
48
+ sock=UDPSocket.open
49
+ sock.send("BUGGYTEXT",0,bind,8889)
50
+ c12.read.should be_nil
51
+
52
+ udp2=UdpTransceiver.new("localhost",8898)
53
+ c21=udp2.connect(udp1.me)
54
+ c21.send("MUH")
55
+ sleep 0.1
56
+ c12.read.should == "MUH"
57
+
58
+ udp1.close!
59
+ udp2.close!
60
+ end
61
+
62
+ it "should provide a receiving event-handler" do
63
+ bind="127.0.0.1"
64
+ udp1=UdpTransceiver.new(bind,8889)
65
+ udp2=UdpTransceiver.new(bind,8898)
66
+ c12=udp1.connect(udp2.me)
67
+ res=nil
68
+ udp2.receive{|from,packet|
69
+ puts "__________________________"
70
+ res=packet
71
+ }
72
+
73
+ str="MUH"*10
74
+
75
+ c12.send(str)
76
+ sleep 0.5
77
+
78
+ res.should == str
79
+
80
+ udp1.close!
81
+ udp2.close!
82
+
83
+ end
84
+
85
+ it "should request a missing packet"
86
+ it "should send acks every few messages"
87
+
88
+ end
89
+
90
+