appswarm 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+