1 # require 'profile'
2 require 'romp'
3
4 if ARGV.size > 1 or ARGV[0] == "-h" or ARGV[0] == '-H' then
5 puts <<END
6 Usage: #{$0} <url>
7 Example urls:
8 tcpromp://localhost:4242
9 udpromp://localhost:4242
10 unixromp:///tmp/foo
11 END
12 end
13
14 url = ARGV[0] || "tcpromp://localhost:4242"
15 client = ROMP::Client.new(url, false)
16 obj = client.resolve("foo")
17
18 N = 10
19
20 # --- Test normal functions ---
21 puts "Normal functions, no synchronization"
22 GC.start
23 start_time = Time.now
24 for i in 1..N do
25 obj.foo(i)
26 end
27 obj.sync()
28 total_time = Time.now - start_time
29 puts " Total time: #{total_time}"
30 puts " Messages per second: #{N/total_time}"
31
32 sleep(1)
33
34 # --- Test oneway functions ---
35 puts "Oneway functions, with synchronization"
36 GC.start
37 start_time = Time.now
38 for i in 1..N do
39 obj.oneway_sync(:foo, i)
40 # if (i % 1000) == 0 then
41 # obj.sync
42 # end
43 end
44 obj.sync()
45 total_time = Time.now - start_time
46 puts " Total time: #{total_time}"
47 puts " Messages per second: #{N/total_time}"
48
49 puts "You should see the number #{N}:"
50 puts obj.i()
51
52 # -- Test oneway functions without sync ---
53 puts "Oneway functions, no synchronization"
54 puts "(if this is slow, it is because the TCP buffers are being filled too fast)"
55 GC.start
56 start_time = Time.now
57 for i in 1..N do
58 obj.oneway(:foo, i)
59 # if (i % 1000) == 0 then
60 # obj.sync
61 # end
62 end
63 obj.sync()
64 total_time = Time.now - start_time
65 puts " Total time: #{total_time}"
66 puts " Messages per second: #{N/total_time}"
67
68 puts "You should see the number #{N}:"
69 puts obj.i()
70 # --- Test object inspection ---
71 puts "You should see an object Foo with an element @i=#{N}"
72 puts obj.inspect()
73
74 # --- Test dup ---
75 foo = obj.methods()
76 if foo.index("dup") then
77 puts "uh oh, shouldn't have found dup"
78 end
79
80 # --- Test resopnd_to for clone ---
81 if obj.respond_to?("clone") then
82 puts "uh oh, obj should not respond to clone"
83 end
84
85 # --- Test clone ---
86 except = false
87 begin
88 obj.clone()
89 rescue NameError
90 except = true
91 end
92 if !except then
93 puts "uh oh, I was able to clone obj"
94 end
95
96 # -- Test respond_to for foo ---
97 if !obj.respond_to?("foo") then
98 puts "uh oh, obj should respond to foo!"
99 end
100
101 # --- Test iterators ---
102 puts "You should see the numbers 1, 2, and 3 on separate lines:"
103 obj.each do |i|
104 puts i
105 end
106
107 # --- Test object references ---
108 puts "You should see the number #{obj.i + 1}:"
109 b = obj.bar
110 puts b.i
111 b.release
112
113 # --- Test exceptions
114 puts "You should now see a RuntimeError get thrown:"
115 obj.throw_exception()