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,45 @@
1
+
2
+
3
+ RemoteServiceID=Struct.new(:nodeInformation,:name,:provides)
4
+
5
+ class RemoteService
6
+ def initialize(serviceID,networkNode)
7
+ @service=serviceID
8
+ @networkNode=networkNode
9
+ end
10
+
11
+ def method_missing(*s)
12
+ log "remoteService calling #{s.inspect}"
13
+ if s[0].to_s=~/.*!/
14
+ res=@networkNode.callRun(@service,s)
15
+ else
16
+ res=@networkNode.call(@service,s)
17
+ end
18
+ log "RESULT:",res
19
+ res
20
+ end
21
+
22
+ def log(*s)
23
+ @networkNode.log(*s)
24
+ end
25
+ end
26
+
27
+ class RemoteCall
28
+ def intialize(remoteService,calledBy,name,args)
29
+
30
+ end
31
+ end
32
+
33
+ def RemoteReturn
34
+ def initialize(to,what)
35
+ @to=to
36
+ @what=what
37
+ end
38
+ end
39
+
40
+ class RemoteRun
41
+ def initialize(remoteService,name,args)
42
+ @args=args
43
+ end
44
+ end
45
+
@@ -0,0 +1,125 @@
1
+ require File.expand_path('../abstract_node.rb',__FILE__)
2
+ require 'secure_con.rb'
3
+
4
+ class WrongProtocol<Exception
5
+
6
+ end
7
+
8
+ class ConnectionClosed<Exception
9
+
10
+ end
11
+
12
+ class SecureNetNode<Secure::SimpleServer
13
+
14
+ attr_reader :protocol
15
+ def initialize(port,app,hash)
16
+ @protocol=:secure
17
+ @closeMutex=Mutex.new
18
+ @hash=hash
19
+ @app=app
20
+ @nodeList=[]
21
+ assert{@hash.is_a?(String)}
22
+ super(port)
23
+ taint
24
+ end
25
+
26
+ def nodeList
27
+ @nodeList.select{|k|getConnection(k)}
28
+ end
29
+ def nodeId
30
+ NodeInformation.new(localHost,localPort,:secure,@hash)
31
+ end
32
+
33
+ def stop
34
+ @server.stop
35
+ end
36
+
37
+ def close(nodeId)
38
+ cs=connections{|c|c.remoteHost==nodeId.address and c.remotePort==nodeId.port}
39
+ cs.each{|c|disconnect}
40
+ end
41
+
42
+ def info
43
+ {:protocol=>@protocol,
44
+ :connections=>connections.length
45
+ }
46
+ end
47
+
48
+ def connect(rnodeId)
49
+ return if nodeList.member?(rnodeId)
50
+ raise "Can't connect to myself" if rnodeId==nodeId
51
+ begin
52
+ pp "NODE-ID #{rnodeId}"
53
+ pp "NODE-ID #{rnodeId.protocol}"
54
+ raise WrongProtocol if rnodeId.protocol!=:secure
55
+ puts "#{nodeId} CONNCTING #{rnodeId} "
56
+
57
+ c=super(rnodeId.address,rnodeId.port)
58
+ puts "#{nodeId} CONNECTED #{rnodeId} "
59
+
60
+ Thread.new {
61
+ @nodeList << c.identifyMe(nodeId)
62
+ @app.log "connected #{nodeId}"
63
+ }
64
+ c
65
+ rescue ConnectionClosed=>e
66
+ nil
67
+ end
68
+ end
69
+
70
+ def getConnection(rNodeId)
71
+ connections.select{|c|c.remoteHost==rNodeId.address and c.remotePort==rNodeId.port}[0]
72
+ end
73
+
74
+
75
+ def sendAll(*s)
76
+ connections.p_map{|c|
77
+ begin
78
+ c.remoteCallSync(*s)
79
+ rescue ConnectionClosed=>e
80
+ :nothing
81
+ end
82
+ }.select{|x|x!=:nothing}
83
+ end
84
+
85
+ # FIXME: may be deprecated
86
+ def setHook(&hook)
87
+ @hook=hook
88
+ end
89
+
90
+
91
+ remote :remoteCall, :close
92
+ remote_sync :remoteCallSync, :identifyMe
93
+ allow :remoteCall, :identifyMe, :remoteCallSync
94
+
95
+ def remoteCall(name,*s)
96
+ pp "RemoteCall #{name}"
97
+ @hook.call(name,*s)
98
+ end
99
+
100
+ def remoteCallSync(name,*s)
101
+ pp "RemoteCall #{name}"
102
+ @hook.call(name,*s)
103
+ end
104
+
105
+
106
+ def eventConnected(host,port)
107
+ super
108
+ all=connections.select{|i|i.remoteHost==host and i.remotePort==port}
109
+
110
+ if all.length>1
111
+ pp "FOUND:",all.length
112
+ all[1..-1].each{|c|
113
+ pp "NOT YET CLOSE #{c}"
114
+ #c.disconnect # close last in list
115
+ }
116
+ end
117
+ end
118
+ #end
119
+ def identifyMe(pid)
120
+ connection=getConnection(pid)
121
+ @nodeList<<pid
122
+ @hook.call(:eventConnected,pid) #NodeInformation.new(host,port,:secure))
123
+ nodeId
124
+ end
125
+ end
@@ -0,0 +1,41 @@
1
+ require 'drb_node.rb'
2
+ def resetLog
3
+ $log=""
4
+ end
5
+ def log(*s)
6
+ $log||=""
7
+ if s.length>0
8
+ s=s.join(" ")
9
+ $log<<s<<";"
10
+ puts s
11
+ end
12
+ $log
13
+ end
14
+
15
+ if false
16
+ describe "Drb Node" do
17
+ it "should connect to another node" do
18
+ a=DrbNetNode.new(4000,nil)
19
+ class DrbNetNode
20
+ def hi(*what)
21
+ @hi=what.join("") if what.length>0
22
+ @hi
23
+ end
24
+ end
25
+ b=DrbNetNode.new(4041,nil)
26
+ a.connect(b.id)
27
+ b.sendAll(:hi,"hello1")
28
+ a.sendAll(:hi,"hello2")
29
+ a.hi.should == "hello1"
30
+ b.hi.should == "hello2"
31
+ b.close(a.node)
32
+ b.sendAll(:hi,"hello3")
33
+ a.sendAll(:hi,"hello4")
34
+ a.hi.should == "hello1"
35
+ b.hi.should == "hello2"
36
+ end
37
+ end
38
+
39
+
40
+
41
+ end
@@ -0,0 +1,264 @@
1
+ require 'network_node.rb'
2
+
3
+ describe "Network node" do
4
+
5
+ after(:each) do
6
+ TestBed::testbeds.should == []
7
+ TestBed::testbeds.each{|tb|tb.stop}
8
+ end
9
+
10
+ if false
11
+ it "should gather nodes from local storage" do
12
+ testBed=TestBed.new
13
+ s=testBed.run("LocalTupleSpace")
14
+ s.should be_a_kind_of(LocalTupleSpaceApp)
15
+ s.store(:networkNodeList,dummyServers)
16
+ node=testBed.run("NetworkNode")
17
+ sleep 2
18
+ (node.nodeList.sort).should == (dummyServers.sort)
19
+ testBed.stop
20
+ end
21
+ end
22
+ it "should gather nodes from master server and connect some nodes" do
23
+ TestBed::testbeds.should == []
24
+ testBed=TestBed.new
25
+ testBed2=TestBed.new
26
+ testBed2.options[:httpPort]=2001
27
+ s=testBed.run("Master")
28
+ l1=testBed.run("NetworkLookup")
29
+
30
+ l1=testBed2.run("NetworkLookup")
31
+
32
+ n0=testBed.run("NetworkNode")
33
+ n1=testBed2.run("NetworkNode")
34
+ n0.runCron
35
+ n1.runCron
36
+ n0.runCron
37
+ sleep 0.5
38
+ s.clients.length == 2
39
+ sleep 2
40
+ pp "MYNODELIST:",n0.nodeList
41
+ pp "MYNODELIST:",n1.nodeList
42
+ n0.nodeList.sort.should == ([n1.myNodeId,n0.myNodeId].sort)
43
+ n0.nodeList.should be_member(n1.myNodeId)
44
+ n1.nodeList.should be_member(n0.myNodeId)
45
+ testBed.stop
46
+ testBed2.stop
47
+ end
48
+
49
+ it "should not connect an already connected node"
50
+
51
+ it "should get nodes from neighbors" do
52
+ bs=[]
53
+ ns=[]
54
+ st=[]
55
+ 3.times{bs<<TestBed.new}
56
+ bs.each{|b|
57
+ ns<<b.run("NetworkNode",{:cronTime=>10000})
58
+ st<<b.run("LocalTupleSpace")
59
+ }
60
+ st[0].store(:networkNodeList,[ns[1].myNodeId])
61
+ puts "CRON>>>>>>>>>"
62
+ ns[0].runCron
63
+ puts "CRON<<<<<<<<<<"
64
+ ns[0].nodeList.should==[ns[1].myNodeId]
65
+ puts "_______"
66
+ ns.each{|n|
67
+ pp n.myNodeId,n.transceiver.nodeList,n.nodeList
68
+ }
69
+ puts "_______"
70
+ ns[0].transceiver.nodeList.should==[ns[1].myNodeId]
71
+ ns[1].transceiver.nodeList.should==[ns[0].myNodeId]
72
+ ns[1].nodeList.should==[ns[0].myNodeId]
73
+
74
+ st[2].store(:networkNodeList,[ns[0].myNodeId])
75
+ ns[2].runCron # getting at least ns0
76
+ sleep 0.5 # let network process a little
77
+ ns[2].nodeList.member?(ns[0].myNodeId).should be_true
78
+ ns[2].transceiver.nodeList.member?(ns[0].myNodeId).should be_true
79
+ puts "CRON>>>>>>>>>"
80
+ ns[2].runCron # getting ns2
81
+ sleep 0.5 # let network process a little
82
+ pp "TRANSLIST",ns[2].transceiver.nodeList
83
+ ns[2].transceiver.nodeList.length.should >= 2
84
+ puts "CRON<<<<<<<<<<"
85
+ ns[1].runCron # getting ns2
86
+ sleep 0.5 # let network process a little
87
+ ns[1].nodeList.member?(ns[2].myNodeId).should be_true
88
+
89
+
90
+ bs.each{|b|b.stop}
91
+
92
+ end
93
+
94
+ #if false
95
+
96
+
97
+ it "should give you access to services" do
98
+ testBed1=TestBed.new
99
+ testBed2=TestBed.new
100
+ testBed1.run("Master")
101
+ testBed1.run("NetworkLookup")
102
+ testBed2.run("NetworkLookup")
103
+ n1=testBed1.run("NetworkNode",{:cronTime=>1})
104
+ n2=testBed2.run("NetworkNode",{:cronTime=>1})
105
+ testBed1.run("LocalTupleSpace")
106
+
107
+ #sleep 4
108
+ 4.times {|i|
109
+
110
+ pp "CRON #{i} n1"
111
+ t=testBed1.getThread(n1)
112
+ pp t
113
+ pp t[:caller]
114
+ pp "CRON #{i}"
115
+ n1.runCron
116
+ pp "CRON #{i} n2"
117
+ t=testBed2.getThread(n2)
118
+ pp t
119
+ pp t[:caller]
120
+ n2.runCron
121
+ pp "CRON #{i}"
122
+ }
123
+
124
+ while not n2.nodeReachable(n1.myNodeId)
125
+ puts "WWAIT"
126
+ pp n2.services
127
+ pp n2.getRoutesDirectly
128
+ sleep 0.2
129
+ end
130
+
131
+ sv=testBed2.getApp(:networkNode).getRemoteService(:localTupleSpace)
132
+ puts "STORING....."
133
+ sv.store(:a,"A")
134
+ puts "STORED"
135
+ sv.read(:a).should == "A"
136
+
137
+ testBed1.stop
138
+ testBed2.stop
139
+ end
140
+
141
+
142
+ it "should process routes correctly" do
143
+ options={:minCompanions=>1}
144
+ testBed1=TestBed.new
145
+ testBed2=TestBed.new
146
+ testBed3=TestBed.new
147
+ n1=testBed1.run("NetworkNode",options)
148
+ n2=testBed2.run("NetworkNode",options)
149
+ n3=testBed3.run("NetworkNode",options)
150
+
151
+ t1=testBed1.run("LocalTupleSpace")
152
+ t3=testBed3.run("LocalTupleSpace")
153
+
154
+ t1.store(:networkNodeList,[n2.myNodeId])
155
+ t3.store(:networkNodeList,[n2.myNodeId])
156
+
157
+ n1.runCron
158
+ n3.runCron
159
+
160
+ nodes=[n1,n2,n3]
161
+
162
+ nodes.map{|node|node.getRoutesDirectly}.flatten.each{|n|nodes.map{|m|m.myNodeId}.member?(n.node).should == true}
163
+
164
+ n1.getRoutesDirectly.should == [NetworkNodeApp::Node.new(n2.myNodeId,0,n1.myNodeId)]
165
+ #(n2.getRoutesDirectly.sort).should == ([NetworkNodeApp::Node.new(n1.myNodeId,0,n2.myNodeId),
166
+ # NetworkNodeApp::Node.new(n3.myNodeId,0,n2.myNodeId)].sort)
167
+ n3.getRoutesDirectly.should == [NetworkNodeApp::Node.new(n2.myNodeId,0,n3.myNodeId)]
168
+
169
+ n1.runCron
170
+ n3.runCron
171
+
172
+ #pp n1.nodeListRoute.sort
173
+
174
+ pp "NODELISTROUTE:","____________________________________"
175
+
176
+
177
+ pp "N1:",n1.myNodeId, n1.getRoutesDirectly,n1.transceiver.nodeList
178
+ pp "N2:",n2.myNodeId, n2.getRoutesDirectly
179
+ pp "N3:",n3.myNodeId, n3.getRoutesDirectly
180
+
181
+ l1=n1.getRoutesDirectly.select{|node|node.node==n3.myNodeId}
182
+ l1.length.should == 1
183
+ l1.each{|info|info.hops.should == 1
184
+ info.route.should == n2.myNodeId
185
+ }
186
+
187
+ nodes.each{|node|
188
+ node.getRoutesDirectly.select{|info|info.node==node.myNodeId}.each{|info|
189
+ [0,1].member?(info.hops).should be_true
190
+ }
191
+ }
192
+
193
+ testBed1.stop
194
+ testBed2.stop
195
+ testBed3.stop
196
+
197
+ end
198
+
199
+
200
+ it "should be possible to define a hook from another app" do
201
+ bed1=TestBed.new
202
+ bed2=TestBed.new
203
+ bed1.run("Master")
204
+ bed1.run("NetworkLookup")
205
+ bed2.run("NetworkLookup")
206
+ n1=bed1.run("NetworkNode")
207
+ n2=bed2.run("NetworkNode")
208
+ sleep 2
209
+ check=false
210
+ b=binding
211
+ n1.hook("MyTest"){|*args|
212
+ eval("check=true",b)
213
+ }
214
+ #n2.runCron
215
+ #n1.runCron
216
+ n2.remoteApp(n1.myNodeId,"MyTest",:check)
217
+ sleep 0.5
218
+ check.should be_true
219
+ bed1.stop
220
+ bed2.stop
221
+ end
222
+
223
+
224
+ it "should build a single complete network" do
225
+ count=7
226
+ testbeds=[]
227
+ nodes=[]
228
+ count.times{|i|
229
+ testbed=TestBed.new
230
+ nodes << testbed.run("NetworkNode",{:minCompanions=>5})
231
+ testbed.run("NetworkLookup")
232
+
233
+ testbeds<<testbed
234
+ }
235
+ testbeds[0].run("Master")
236
+
237
+ (count-1).times{
238
+ nodes.each{|node|node.runCron}
239
+ }
240
+
241
+ testbeds.each{|t|t.stop}
242
+ ids=testbeds.map{|t|t.getApp(:networkNode).myNodeId}
243
+ puts "___________________________"
244
+ testbeds.each{|t|
245
+ puts t.getApp(:networkNode).nodeList.length
246
+ puts t.getApp(:networkNode).nodeList.uniq.length
247
+ puts t.getApp(:networkNode).nodeList
248
+ }
249
+ testbeds.each{|t|
250
+ n=t.getApp(:networkNode)
251
+ (n.nodeList.sort).should == (ids.sort) #-[n.myNodeId])
252
+ }
253
+ end
254
+
255
+ it "should be possible to gather a list of near services"
256
+ it "should provide a list of all services"
257
+
258
+ def dummyServers
259
+ [
260
+ NodeInformation.new("127.0.0.1",5678,:secure,"1234"),
261
+ NodeInformation.new("127.0.0.1",5900,:secure,"3456")
262
+ ]
263
+ end
264
+ end