r2corba 1.4.1-x86-mingw32
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.
- checksums.yaml +7 -0
- data/CHANGES +159 -0
- data/LICENSE +59 -0
- data/README +62 -0
- data/THANKS +52 -0
- data/bin/r2corba +8 -0
- data/bin/r2corba.bat +20 -0
- data/bin/ridlc +11 -0
- data/bin/ridlc.bat +23 -0
- data/bin/rins +7 -0
- data/bin/rins.bat +19 -0
- data/ext/.keep +0 -0
- data/lib/corba/cbase/IORMap.rb +33 -0
- data/lib/corba/cbase/ORB.rb +231 -0
- data/lib/corba/cbase/Request.rb +134 -0
- data/lib/corba/cbase/Streams.rb +129 -0
- data/lib/corba/cbase/Stub.rb +19 -0
- data/lib/corba/cbase/Typecode.rb +441 -0
- data/lib/corba/cbase/Values.rb +129 -0
- data/lib/corba/cbase/exception.rb +66 -0
- data/lib/corba/cbase/poa.rb +23 -0
- data/lib/corba/cbase/policies.rb +78 -0
- data/lib/corba/cbase/post_require.rb +14 -0
- data/lib/corba/cbase/require.rb +28 -0
- data/lib/corba/cmds/base.rb +85 -0
- data/lib/corba/cmds/test.rb +30 -0
- data/lib/corba/common/Any.rb +91 -0
- data/lib/corba/common/IDL.rb +104 -0
- data/lib/corba/common/ORB.rb +368 -0
- data/lib/corba/common/Object.rb +208 -0
- data/lib/corba/common/Request.rb +20 -0
- data/lib/corba/common/Servant.rb +108 -0
- data/lib/corba/common/Struct.rb +22 -0
- data/lib/corba/common/Stub.rb +79 -0
- data/lib/corba/common/Typecode.rb +1121 -0
- data/lib/corba/common/Union.rb +56 -0
- data/lib/corba/common/Values.rb +92 -0
- data/lib/corba/common/const.rb +22 -0
- data/lib/corba/common/exception.rb +68 -0
- data/lib/corba/common/require.rb +27 -0
- data/lib/corba/common/version.rb +22 -0
- data/lib/corba/idl/BiDirPolicyC.rb +63 -0
- data/lib/corba/idl/CosNamingC.rb +461 -0
- data/lib/corba/idl/CosNamingS.rb +309 -0
- data/lib/corba/idl/IDL.rb +21 -0
- data/lib/corba/idl/IORTable.pidl +62 -0
- data/lib/corba/idl/IORTableC.rb +117 -0
- data/lib/corba/idl/MessagingC.rb +904 -0
- data/lib/corba/idl/POAC.rb +930 -0
- data/lib/corba/idl/TAO_Ext.pidl +46 -0
- data/lib/corba/idl/TAO_ExtC.rb +179 -0
- data/lib/corba/idl/r2c_orb.rb +572 -0
- data/lib/corba/idl/require.rb +20 -0
- data/lib/corba/jbase/Any.rb +273 -0
- data/lib/corba/jbase/IORMap.rb +36 -0
- data/lib/corba/jbase/ORB.rb +99 -0
- data/lib/corba/jbase/Object.rb +98 -0
- data/lib/corba/jbase/Request.rb +226 -0
- data/lib/corba/jbase/Servant.rb +247 -0
- data/lib/corba/jbase/ServerRequest.rb +128 -0
- data/lib/corba/jbase/Streams.rb +671 -0
- data/lib/corba/jbase/Stub.rb +38 -0
- data/lib/corba/jbase/Typecode.rb +520 -0
- data/lib/corba/jbase/Values.rb +173 -0
- data/lib/corba/jbase/exception.rb +106 -0
- data/lib/corba/jbase/poa.rb +229 -0
- data/lib/corba/jbase/policies.rb +300 -0
- data/lib/corba/jbase/post_require.rb +14 -0
- data/lib/corba/jbase/require.rb +86 -0
- data/lib/corba/naming.rb +14 -0
- data/lib/corba/naming_service.rb +15 -0
- data/lib/corba/poa.rb +15 -0
- data/lib/corba/policies.rb +18 -0
- data/lib/corba/require.rb +17 -0
- data/lib/corba/svcs/ins/cos_naming.rb +426 -0
- data/lib/corba/svcs/ins/ins.rb +526 -0
- data/lib/corba/svcs/ins/naming_service.rb +119 -0
- data/lib/corba.rb +16 -0
- data/lib/ridlbe/ruby/config.rb +336 -0
- data/lib/ridlbe/ruby/orb.pidlc +0 -0
- data/lib/ridlbe/ruby/require.rb +16 -0
- data/lib/ridlbe/ruby/walker.rb +1582 -0
- data/mkrf_conf_bingem.rb +101 -0
- data/rakelib/bin.rake +80 -0
- data/rakelib/bin.rb +146 -0
- data/rakelib/build.rake +87 -0
- data/rakelib/config.rake +52 -0
- data/rakelib/config.rb +450 -0
- data/rakelib/ext.rake +242 -0
- data/rakelib/ext.rb +308 -0
- data/rakelib/ext_r2tao.rb +232 -0
- data/rakelib/gem.rake +212 -0
- data/rakelib/gem.rb +146 -0
- data/rakelib/package.rake +26 -0
- data/rakelib/test.rake +23 -0
- data/test/BiDirectional/Test.idl +34 -0
- data/test/BiDirectional/client.rb +132 -0
- data/test/BiDirectional/run_test.rb +68 -0
- data/test/BiDirectional/server.ior +1 -0
- data/test/BiDirectional/server.rb +169 -0
- data/test/CORBA_Services/Naming/BindingIterator/Test.idl +27 -0
- data/test/CORBA_Services/Naming/BindingIterator/client.rb +121 -0
- data/test/CORBA_Services/Naming/BindingIterator/ins.ior +1 -0
- data/test/CORBA_Services/Naming/BindingIterator/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/BindingIterator/server.rb +109 -0
- data/test/CORBA_Services/Naming/Corbaname/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Corbaname/client.rb +85 -0
- data/test/CORBA_Services/Naming/Corbaname/corbaname.ior +1 -0
- data/test/CORBA_Services/Naming/Corbaname/ins.ior +1 -0
- data/test/CORBA_Services/Naming/Corbaname/run_test.rb +88 -0
- data/test/CORBA_Services/Naming/Corbaname/server.rb +135 -0
- data/test/CORBA_Services/Naming/Simple/Test.idl +27 -0
- data/test/CORBA_Services/Naming/Simple/client.rb +84 -0
- data/test/CORBA_Services/Naming/Simple/ins.ior +1 -0
- data/test/CORBA_Services/Naming/Simple/run_test.rb +82 -0
- data/test/CORBA_Services/Naming/Simple/server.rb +109 -0
- data/test/Collocation/Diamond.idl +39 -0
- data/test/Collocation/run_test.rb +52 -0
- data/test/Collocation/test.rb +195 -0
- data/test/Connect_Timeout/Test.idl +27 -0
- data/test/Connect_Timeout/client.rb +111 -0
- data/test/Connect_Timeout/run_test.rb +52 -0
- data/test/DII/Test.idl +27 -0
- data/test/DII/client.rb +115 -0
- data/test/DII/run_test.rb +69 -0
- data/test/DII/server.ior +1 -0
- data/test/DII/server.rb +95 -0
- data/test/DSI/Test.idl +27 -0
- data/test/DSI/client.rb +66 -0
- data/test/DSI/run_test.rb +69 -0
- data/test/DSI/server.ior +1 -0
- data/test/DSI/server.rb +106 -0
- data/test/Exceptions/Test.idl +48 -0
- data/test/Exceptions/client.rb +118 -0
- data/test/Exceptions/run_test.rb +69 -0
- data/test/Exceptions/server.ior +1 -0
- data/test/Exceptions/server.rb +131 -0
- data/test/Hello/Test.idl +27 -0
- data/test/Hello/client.rb +78 -0
- data/test/Hello/run_test.rb +71 -0
- data/test/Hello/server.rb +95 -0
- data/test/IDL_Test/Test.idl +113 -0
- data/test/IDL_Test/Test_inc.idl +17 -0
- data/test/IDL_Test/client.rb +102 -0
- data/test/IDL_Test/run_test.rb +69 -0
- data/test/IDL_Test/server.ior +1 -0
- data/test/IDL_Test/server.rb +99 -0
- data/test/IORMap/Test.idl +27 -0
- data/test/IORMap/client.rb +73 -0
- data/test/IORMap/run_test.rb +69 -0
- data/test/IORMap/server.ior +1 -0
- data/test/IORMap/server.rb +114 -0
- data/test/IORTable/Test.idl +27 -0
- data/test/IORTable/client.rb +75 -0
- data/test/IORTable/run_test.rb +69 -0
- data/test/IORTable/server.ior +1 -0
- data/test/IORTable/server.rb +130 -0
- data/test/Implicit_Conversion/Test.idl +31 -0
- data/test/Implicit_Conversion/client.rb +110 -0
- data/test/Implicit_Conversion/run_test.rb +69 -0
- data/test/Implicit_Conversion/server.ior +1 -0
- data/test/Implicit_Conversion/server.rb +99 -0
- data/test/Multi_Threading/Multiple_ORB/Test.idl +27 -0
- data/test/Multi_Threading/Multiple_ORB/client.rb +82 -0
- data/test/Multi_Threading/Multiple_ORB/run_test.rb +71 -0
- data/test/Multi_Threading/Multiple_ORB/server.rb +108 -0
- data/test/Multi_Threading/Multiple_ORB/server0.ior +1 -0
- data/test/Multi_Threading/Multiple_ORB/server1.ior +1 -0
- data/test/Multi_Threading/Simple/Test.idl +27 -0
- data/test/Multi_Threading/Simple/client.rb +88 -0
- data/test/Multi_Threading/Simple/run_test.rb +69 -0
- data/test/Multi_Threading/Simple/server.ior +1 -0
- data/test/Multi_Threading/Simple/server.rb +118 -0
- data/test/Multi_Threading/Threads/Test.idl +31 -0
- data/test/Multi_Threading/Threads/client.rb +80 -0
- data/test/Multi_Threading/Threads/run_test.rb +76 -0
- data/test/Multi_Threading/Threads/server.ior +1 -0
- data/test/Multi_Threading/Threads/server.rb +119 -0
- data/test/Multi_Threading/Threads/watchdog.ior +1 -0
- data/test/Multi_Threading/Threads/watchdog.rb +87 -0
- data/test/Multiple_Servant_Interfaces/Test.idl +34 -0
- data/test/Multiple_Servant_Interfaces/client.rb +70 -0
- data/test/Multiple_Servant_Interfaces/run_test.rb +69 -0
- data/test/Multiple_Servant_Interfaces/server.ior +1 -0
- data/test/Multiple_Servant_Interfaces/server.rb +102 -0
- data/test/Nil/Test.idl +27 -0
- data/test/Nil/run_test.rb +52 -0
- data/test/Nil/test.rb +78 -0
- data/test/OBV/AbstractInterface/client.rb +179 -0
- data/test/OBV/AbstractInterface/run_test.rb +69 -0
- data/test/OBV/AbstractInterface/server.ior +1 -0
- data/test/OBV/AbstractInterface/server.rb +149 -0
- data/test/OBV/AbstractInterface/test.idl +53 -0
- data/test/OBV/Custom/OBV.idl +18 -0
- data/test/OBV/Custom/OBV_impl.rb +40 -0
- data/test/OBV/Custom/client.rb +86 -0
- data/test/OBV/Custom/run_test.rb +69 -0
- data/test/OBV/Custom/server.ior +1 -0
- data/test/OBV/Custom/server.rb +100 -0
- data/test/OBV/Simple/OBV.idl +15 -0
- data/test/OBV/Simple/OBV_impl.rb +26 -0
- data/test/OBV/Simple/client.rb +86 -0
- data/test/OBV/Simple/run_test.rb +69 -0
- data/test/OBV/Simple/server.ior +1 -0
- data/test/OBV/Simple/server.rb +100 -0
- data/test/OBV/Simple_Event/Event.idl +15 -0
- data/test/OBV/Simple_Event/Event_impl.rb +26 -0
- data/test/OBV/Simple_Event/client.rb +86 -0
- data/test/OBV/Simple_Event/run_test.rb +69 -0
- data/test/OBV/Simple_Event/server.ior +1 -0
- data/test/OBV/Simple_Event/server.rb +100 -0
- data/test/OBV/Supports/client.rb +116 -0
- data/test/OBV/Supports/run_test.rb +69 -0
- data/test/OBV/Supports/server.ior +1 -0
- data/test/OBV/Supports/server.rb +103 -0
- data/test/OBV/Supports/supports.idl +33 -0
- data/test/OBV/Supports/supports_impl.rb +57 -0
- data/test/OBV/Tree/client.rb +116 -0
- data/test/OBV/Tree/run_test.rb +69 -0
- data/test/OBV/Tree/server.ior +1 -0
- data/test/OBV/Tree/server.rb +117 -0
- data/test/OBV/Tree/test.idl +32 -0
- data/test/OBV/Truncatable/Extra.idl +27 -0
- data/test/OBV/Truncatable/Truncatable.idl +105 -0
- data/test/OBV/Truncatable/Truncatable_impl.rb +86 -0
- data/test/OBV/Truncatable/client.rb +279 -0
- data/test/OBV/Truncatable/run_test.rb +69 -0
- data/test/OBV/Truncatable/server.ior +1 -0
- data/test/OBV/Truncatable/server.rb +89 -0
- data/test/OBV/ValueBox/client.rb +497 -0
- data/test/OBV/ValueBox/run_test.rb +69 -0
- data/test/OBV/ValueBox/server.ior +1 -0
- data/test/OBV/ValueBox/server.rb +271 -0
- data/test/OBV/ValueBox/valuebox.idl +101 -0
- data/test/OBV/ValueBox/vb_basic.idl +75 -0
- data/test/OBV/ValueBox/vb_struct.idl +68 -0
- data/test/OBV/ValueBox/vb_union.idl +21 -0
- data/test/Object/Test.idl +27 -0
- data/test/Object/client.rb +103 -0
- data/test/Object/run_test.rb +69 -0
- data/test/Object/server.ior +1 -0
- data/test/Object/server.rb +126 -0
- data/test/POA/Test.idl +27 -0
- data/test/POA/run_test.rb +52 -0
- data/test/POA/test.rb +112 -0
- data/test/Param_Test/Test.idl +182 -0
- data/test/Param_Test/client.rb +277 -0
- data/test/Param_Test/run_test.rb +69 -0
- data/test/Param_Test/server.ior +1 -0
- data/test/Param_Test/server.rb +296 -0
- data/test/Performance/Simple/Test.idl +27 -0
- data/test/Performance/Simple/client.rb +90 -0
- data/test/Performance/Simple/run_test.rb +69 -0
- data/test/Performance/Simple/server.ior +1 -0
- data/test/Performance/Simple/server.rb +95 -0
- data/test/Policies/Test.idl +27 -0
- data/test/Policies/run_test.rb +52 -0
- data/test/Policies/test.rb +144 -0
- data/test/Timeout/client.rb +207 -0
- data/test/Timeout/run_test.rb +69 -0
- data/test/Timeout/server.ior +1 -0
- data/test/Timeout/server.rb +109 -0
- data/test/Timeout/test.idl +19 -0
- data/test/lib/assert.rb +43 -0
- data/test/lib/test.rb +542 -0
- data/test/test_runner.rb +193 -0
- metadata +342 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'optparse'
|
14
|
+
require 'lib/assert.rb'
|
15
|
+
include TestUtil::Assertions
|
16
|
+
|
17
|
+
OPTIONS = {
|
18
|
+
:use_implement => false,
|
19
|
+
:orb_debuglevel => 0,
|
20
|
+
:iorfile => 'file://server.ior'
|
21
|
+
}
|
22
|
+
|
23
|
+
ARGV.options do |opts|
|
24
|
+
script_name = File.basename($0)
|
25
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
26
|
+
|
27
|
+
opts.separator ""
|
28
|
+
|
29
|
+
opts.on("--k IORFILE",
|
30
|
+
"Set IOR.",
|
31
|
+
"Default: 'file://server.ior'") { |v| OPTIONS[:iorfile]=v }
|
32
|
+
opts.on("--d LVL",
|
33
|
+
"Set ORBDebugLevel value.",
|
34
|
+
"Default: 0") { |v| OPTIONS[:orb_debuglevel]=v }
|
35
|
+
opts.on("--use-implement",
|
36
|
+
"Load IDL through CORBA.implement() instead of precompiled code.",
|
37
|
+
"Default: off") { |v| OPTIONS[:use_implement]=v }
|
38
|
+
|
39
|
+
opts.separator ""
|
40
|
+
|
41
|
+
opts.on("-h", "--help",
|
42
|
+
"Show this help message.") { puts opts; exit }
|
43
|
+
|
44
|
+
opts.parse!
|
45
|
+
end
|
46
|
+
|
47
|
+
if OPTIONS[:use_implement]
|
48
|
+
require 'corba'
|
49
|
+
CORBA.implement('Test.idl', OPTIONS)
|
50
|
+
else
|
51
|
+
require 'TestC.rb'
|
52
|
+
end
|
53
|
+
|
54
|
+
orb = CORBA.ORB_init(["-ORBDebugLevel", OPTIONS[:orb_debuglevel]], 'myORB')
|
55
|
+
|
56
|
+
DATA = 'Hello world! 0123456789012345678901234567890123456789012345678901234567890123456789'
|
57
|
+
|
58
|
+
begin
|
59
|
+
|
60
|
+
obj = orb.string_to_object(OPTIONS[:iorfile])
|
61
|
+
|
62
|
+
hello_obj = Test::Hello._narrow(obj)
|
63
|
+
|
64
|
+
# run once to initialize the whole path
|
65
|
+
hello_obj.do_test(0, DATA)
|
66
|
+
|
67
|
+
t_start = Time.now
|
68
|
+
|
69
|
+
# run test
|
70
|
+
10000.times do |i|
|
71
|
+
count_, data_ = hello_obj.do_test(i, DATA)
|
72
|
+
end
|
73
|
+
|
74
|
+
t_diff = Time.now - t_start
|
75
|
+
|
76
|
+
STDERR.puts "*** Avg turnaround time per invocation = #{'%.2f' % (t_diff / 10)} msec"
|
77
|
+
|
78
|
+
hello_obj.shutdown()
|
79
|
+
|
80
|
+
assert_not "ERROR: Object is reported nil!", CORBA::is_nil(hello_obj)
|
81
|
+
|
82
|
+
hello_obj._free_ref()
|
83
|
+
|
84
|
+
assert "ERROR: Object is reported non-nil!", CORBA::is_nil(hello_obj)
|
85
|
+
|
86
|
+
ensure
|
87
|
+
|
88
|
+
orb.destroy()
|
89
|
+
|
90
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
OPTIONS = {
|
14
|
+
:debug_opt => '',
|
15
|
+
:use_implement => '--use-implement'
|
16
|
+
}
|
17
|
+
|
18
|
+
require 'optparse'
|
19
|
+
|
20
|
+
ARGV.options do |opts|
|
21
|
+
script_name = File.basename($0)
|
22
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
23
|
+
|
24
|
+
opts.separator ""
|
25
|
+
|
26
|
+
opts.on("-d",
|
27
|
+
"Run with debugging output.",
|
28
|
+
"Default: false") { OPTIONS[:debug_opt] = '--d 10' }
|
29
|
+
opts.on("--use-stubs",
|
30
|
+
"Use stubs generated by RIDL.",
|
31
|
+
"Default: false (uses embedded IDL)") { OPTIONS[:use_implement] = '' }
|
32
|
+
|
33
|
+
opts.separator ""
|
34
|
+
|
35
|
+
opts.on("-h", "--help",
|
36
|
+
"Show this help message.") { puts opts; exit }
|
37
|
+
|
38
|
+
opts.parse!
|
39
|
+
end
|
40
|
+
|
41
|
+
require 'lib/test.rb'
|
42
|
+
include TestUtil
|
43
|
+
|
44
|
+
ior_file = 'server.ior'
|
45
|
+
|
46
|
+
TestUtil.remove_file(ior_file)
|
47
|
+
|
48
|
+
srv = Test.new
|
49
|
+
|
50
|
+
exit(255) if !srv.run('server.rb', "--o #{ior_file} #{OPTIONS[:debug_opt]} #{OPTIONS[:use_implement]}")
|
51
|
+
|
52
|
+
TestUtil.wait_for_file(ior_file, 400)
|
53
|
+
|
54
|
+
clt = Test.new
|
55
|
+
|
56
|
+
if !clt.run('client.rb', "--k file://#{ior_file} #{OPTIONS[:debug_opt]} #{OPTIONS[:use_implement]}")
|
57
|
+
srv.kill(100)
|
58
|
+
exit(255)
|
59
|
+
end
|
60
|
+
|
61
|
+
exrc = clt.wait(400)
|
62
|
+
|
63
|
+
if exrc ==0
|
64
|
+
srv.wait(400)
|
65
|
+
else
|
66
|
+
srv.wait_term(400)
|
67
|
+
end
|
68
|
+
|
69
|
+
exit(exrc)
|
@@ -0,0 +1 @@
|
|
1
|
+
IOR:010000001300000049444c3a546573742f48656c6c6f3a312e30000001000000000000006c000000010102650d0000003137322e31362e372e32343800200b061b00000014010f00525354a8fe045201970d000000000001000000010000005202000000000000000800000001032300004f41540100000018000000010000000100010001000000010001050901010000000000
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'optparse'
|
14
|
+
|
15
|
+
OPTIONS = {
|
16
|
+
:use_implement => false,
|
17
|
+
:orb_debuglevel => 0,
|
18
|
+
:iorfile => 'server.ior'
|
19
|
+
}
|
20
|
+
|
21
|
+
ARGV.options do |opts|
|
22
|
+
script_name = File.basename($0)
|
23
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
24
|
+
|
25
|
+
opts.separator ""
|
26
|
+
|
27
|
+
opts.on("--o IORFILE",
|
28
|
+
"Set IOR filename.",
|
29
|
+
"Default: 'server.ior'") { |v| OPTIONS[:iorfile]=v }
|
30
|
+
opts.on("--d LVL",
|
31
|
+
"Set ORBDebugLevel value.",
|
32
|
+
"Default: 0") { |v| OPTIONS[:orb_debuglevel]=v }
|
33
|
+
opts.on("--use-implement",
|
34
|
+
"Load IDL through CORBA.implement() instead of precompiled code.",
|
35
|
+
"Default: off") { |v| OPTIONS[:use_implement]=v }
|
36
|
+
|
37
|
+
opts.separator ""
|
38
|
+
|
39
|
+
opts.on("-h", "--help",
|
40
|
+
"Show this help message.") { puts opts; exit }
|
41
|
+
|
42
|
+
opts.parse!
|
43
|
+
end
|
44
|
+
|
45
|
+
if OPTIONS[:use_implement]
|
46
|
+
require 'corba/poa'
|
47
|
+
CORBA.implement('Test.idl', OPTIONS, CORBA::IDL::SERVANT_INTF)
|
48
|
+
else
|
49
|
+
require 'TestS.rb'
|
50
|
+
end
|
51
|
+
|
52
|
+
class MyHello < POA::Test::Hello
|
53
|
+
def initialize(orb)
|
54
|
+
@orb = orb
|
55
|
+
end
|
56
|
+
|
57
|
+
def do_test(count, data)
|
58
|
+
[count, data]
|
59
|
+
end
|
60
|
+
|
61
|
+
def shutdown()
|
62
|
+
@orb.shutdown()
|
63
|
+
end
|
64
|
+
end #of servant MyHello
|
65
|
+
|
66
|
+
orb = CORBA.ORB_init(["-ORBDebugLevel", OPTIONS[:orb_debuglevel]], 'myORB')
|
67
|
+
|
68
|
+
obj = orb.resolve_initial_references('RootPOA')
|
69
|
+
|
70
|
+
root_poa = PortableServer::POA._narrow(obj)
|
71
|
+
|
72
|
+
poa_man = root_poa.the_POAManager
|
73
|
+
|
74
|
+
poa_man.activate
|
75
|
+
|
76
|
+
hello_srv = MyHello.new(orb)
|
77
|
+
|
78
|
+
hello_obj = hello_srv._this()
|
79
|
+
|
80
|
+
hello_ior = orb.object_to_string(hello_obj)
|
81
|
+
|
82
|
+
open(OPTIONS[:iorfile], 'w') { |io|
|
83
|
+
io.write hello_ior
|
84
|
+
}
|
85
|
+
|
86
|
+
Signal.trap('INT') do
|
87
|
+
puts "SIGINT - shutting down ORB..."
|
88
|
+
orb.shutdown()
|
89
|
+
end
|
90
|
+
|
91
|
+
if Signal.list.has_key?('USR2')
|
92
|
+
Signal.trap('USR2', 'EXIT')
|
93
|
+
end
|
94
|
+
|
95
|
+
orb.run
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/*--------------------------------------------------------------------
|
2
|
+
* Author: Martin Corino
|
3
|
+
*
|
4
|
+
* This program is free software; you can redistribute it and/or
|
5
|
+
* modify it under the terms of the R2CORBA LICENSE which is
|
6
|
+
* included with this program.
|
7
|
+
*
|
8
|
+
* Copyright (c) Remedy IT Expertise BV
|
9
|
+
* Chamber of commerce Rotterdam nr.276339, The Netherlands
|
10
|
+
*--------------------------------------------------------------------*/
|
11
|
+
|
12
|
+
/// Put the interfaces in a module, to avoid global namespace pollution
|
13
|
+
module Test
|
14
|
+
{
|
15
|
+
/// A very simple interface
|
16
|
+
interface Hello
|
17
|
+
{
|
18
|
+
/// Return a simple string
|
19
|
+
string get_string ();
|
20
|
+
|
21
|
+
/// A method to shutdown the ORB
|
22
|
+
/**
|
23
|
+
* This method is used to simplify the test shutdown process
|
24
|
+
*/
|
25
|
+
oneway void shutdown ();
|
26
|
+
};
|
27
|
+
};
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
OPTIONS = {
|
14
|
+
:debug_opt => '',
|
15
|
+
:use_implement => '--use-implement'
|
16
|
+
}
|
17
|
+
|
18
|
+
require 'optparse'
|
19
|
+
|
20
|
+
ARGV.options do |opts|
|
21
|
+
script_name = File.basename($0)
|
22
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
23
|
+
|
24
|
+
opts.separator ""
|
25
|
+
|
26
|
+
opts.on("-d",
|
27
|
+
"Run with debugging output.",
|
28
|
+
"Default: false") { OPTIONS[:debug_opt] = '--d 10' }
|
29
|
+
opts.on("--use-stubs",
|
30
|
+
"Use stubs generated by RIDL.",
|
31
|
+
"Default: false (uses embedded IDL)") { OPTIONS[:use_implement] = '' }
|
32
|
+
|
33
|
+
opts.separator ""
|
34
|
+
|
35
|
+
opts.on("-h", "--help",
|
36
|
+
"Show this help message.") { puts opts; exit }
|
37
|
+
|
38
|
+
opts.parse!
|
39
|
+
end
|
40
|
+
|
41
|
+
require 'lib/test.rb'
|
42
|
+
include TestUtil
|
43
|
+
|
44
|
+
clt = Test.new
|
45
|
+
|
46
|
+
if !clt.run('test.rb', "#{OPTIONS[:debug_opt]} #{OPTIONS[:use_implement]}")
|
47
|
+
exit(255)
|
48
|
+
end
|
49
|
+
|
50
|
+
exrc = clt.wait(400)
|
51
|
+
|
52
|
+
exit(exrc)
|
@@ -0,0 +1,144 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'optparse'
|
14
|
+
require 'lib/assert.rb'
|
15
|
+
include TestUtil::Assertions
|
16
|
+
|
17
|
+
OPTIONS = {
|
18
|
+
:use_implement => false,
|
19
|
+
:orb_debuglevel => 0
|
20
|
+
}
|
21
|
+
|
22
|
+
ARGV.options do |opts|
|
23
|
+
script_name = File.basename($0)
|
24
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
25
|
+
|
26
|
+
opts.separator ""
|
27
|
+
|
28
|
+
opts.on("--d LVL",
|
29
|
+
"Set ORBDebugLevel value.",
|
30
|
+
"Default: 0") { |v| OPTIONS[:orb_debuglevel]=v }
|
31
|
+
opts.on("--use-implement",
|
32
|
+
"Load IDL through CORBA.implement() instead of precompiled code.",
|
33
|
+
"Default: off") { |v| OPTIONS[:use_implement]=v }
|
34
|
+
|
35
|
+
opts.separator ""
|
36
|
+
|
37
|
+
opts.on("-h", "--help",
|
38
|
+
"Show this help message.") { puts opts; exit }
|
39
|
+
|
40
|
+
opts.parse!
|
41
|
+
end
|
42
|
+
|
43
|
+
if OPTIONS[:use_implement]
|
44
|
+
require 'corba/poa'
|
45
|
+
CORBA.implement('Test.idl', OPTIONS, CORBA::IDL::SERVANT_INTF)
|
46
|
+
else
|
47
|
+
require 'TestS.rb'
|
48
|
+
end
|
49
|
+
require 'corba/policies'
|
50
|
+
|
51
|
+
class MyHello < POA::Test::Hello
|
52
|
+
def initialize(orb)
|
53
|
+
@orb = orb
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_string()
|
57
|
+
"Hello there!"
|
58
|
+
end
|
59
|
+
|
60
|
+
def shutdown()
|
61
|
+
@orb.shutdown()
|
62
|
+
end
|
63
|
+
end #of servant MyHello
|
64
|
+
|
65
|
+
if defined?(JRUBY_VERSION)
|
66
|
+
## JacORB needs explicit activation of this option
|
67
|
+
props = {
|
68
|
+
"org.omg.PortableInterceptor.ORBInitializerClass.bidir_init" =>
|
69
|
+
"org.jacorb.orb.giop.BiDirConnectionInitializer"
|
70
|
+
}
|
71
|
+
else
|
72
|
+
props = {}
|
73
|
+
end
|
74
|
+
orb = CORBA.ORB_init(["-ORBDebugLevel", OPTIONS[:orb_debuglevel]], 'myORB', props)
|
75
|
+
|
76
|
+
begin
|
77
|
+
|
78
|
+
o = orb.resolve_initial_references('RootPOA')
|
79
|
+
|
80
|
+
rootpoa = PortableServer::POA._narrow(o)
|
81
|
+
|
82
|
+
assert_not 'Failed to resolve RootPOA', CORBA.is_nil(rootpoa) || !rootpoa.is_a?(PortableServer::POA)
|
83
|
+
|
84
|
+
pol = rootpoa.create_thread_policy(PortableServer::SINGLE_THREAD_MODEL)
|
85
|
+
assert 'Failed to create correct policy' ,
|
86
|
+
!pol.nil? and pol.is_a?(PortableServer::ThreadPolicy) and pol.value == PortableServer::SINGLE_THREAD_MODEL
|
87
|
+
|
88
|
+
pol = rootpoa.create_lifespan_policy(PortableServer::PERSISTENT)
|
89
|
+
assert 'Failed to create correct policy' ,
|
90
|
+
!pol.nil? and pol.is_a?(PortableServer::LifespanPolicy) and pol.value == PortableServer::PERSISTENT
|
91
|
+
|
92
|
+
pol = rootpoa.create_id_uniqueness_policy(PortableServer::UNIQUE_ID)
|
93
|
+
assert 'Failed to create correct policy' ,
|
94
|
+
!pol.nil? and pol.is_a?(PortableServer::IdUniquenessPolicy) and pol.value == PortableServer::UNIQUE_ID
|
95
|
+
|
96
|
+
pol = rootpoa.create_id_assignment_policy(PortableServer::USER_ID)
|
97
|
+
assert 'Failed to create correct policy' ,
|
98
|
+
!pol.nil? and pol.is_a?(PortableServer::IdAssignmentPolicy) and pol.value == PortableServer::USER_ID
|
99
|
+
|
100
|
+
pol = rootpoa.create_implicit_activation_policy(PortableServer::NO_IMPLICIT_ACTIVATION)
|
101
|
+
assert 'Failed to create correct policy' ,
|
102
|
+
!pol.nil? and pol.is_a?(PortableServer::ImplicitActivationPolicy) and pol.value == PortableServer::NO_IMPLICIT_ACTIVATION
|
103
|
+
|
104
|
+
pol = rootpoa.create_servant_retention_policy(PortableServer::RETAIN)
|
105
|
+
assert 'Failed to create correct policy' ,
|
106
|
+
!pol.nil? and pol.is_a?(PortableServer::ServantRetentionPolicy) and pol.value == PortableServer::RETAIN
|
107
|
+
|
108
|
+
pol = rootpoa.create_request_processing_policy(PortableServer::USE_DEFAULT_SERVANT)
|
109
|
+
assert 'Failed to create correct policy' ,
|
110
|
+
!pol.nil? and pol.is_a?(PortableServer::RequestProcessingPolicy) and pol.value == PortableServer::USE_DEFAULT_SERVANT
|
111
|
+
|
112
|
+
assert_except('orb.create_policy should have thrown a PolicyError',
|
113
|
+
CORBA::PolicyError) { orb.create_policy(9999, CORBA::Any.to_any(0)) }
|
114
|
+
|
115
|
+
pol = orb.create_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
|
116
|
+
CORBA::Any.to_any(BiDirPolicy::BOTH, BiDirPolicy::BidirectionalPolicyValue._tc))
|
117
|
+
assert 'Failed to create correct policy' ,
|
118
|
+
!pol.nil? and pol.is_a?(BiDirPolicy) and pol.value == BiDirPolicy::BOTH
|
119
|
+
|
120
|
+
poa_man = rootpoa.the_POAManager
|
121
|
+
|
122
|
+
poa_man.activate
|
123
|
+
|
124
|
+
hello_srv = MyHello.new(orb)
|
125
|
+
|
126
|
+
id = rootpoa.activate_object(hello_srv)
|
127
|
+
|
128
|
+
obj = rootpoa.id_to_reference(id)
|
129
|
+
|
130
|
+
assert_except('obj._get_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE) should have thrown INV_POLICY',
|
131
|
+
CORBA::INV_POLICY) { obj._get_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE) }
|
132
|
+
|
133
|
+
assert 'obj._get_policy_overrides should have returned an empty sequence',
|
134
|
+
obj._get_policy_overrides([BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE]).empty?
|
135
|
+
|
136
|
+
obj = obj._set_policy_overrides([pol], CORBA::SET_OVERRIDE)
|
137
|
+
|
138
|
+
assert 'obj._get_policy_overrides should have returned 1 policy',
|
139
|
+
obj._get_policy_overrides([BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE]).size == 1
|
140
|
+
|
141
|
+
ensure
|
142
|
+
orb.destroy()
|
143
|
+
end
|
144
|
+
|
@@ -0,0 +1,207 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
#
|
3
|
+
# Author: Martin Corino
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the R2CORBA LICENSE which is
|
7
|
+
# included with this program.
|
8
|
+
#
|
9
|
+
# Copyright (c) Remedy IT Expertise BV
|
10
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
11
|
+
#--------------------------------------------------------------------
|
12
|
+
|
13
|
+
require 'optparse'
|
14
|
+
require 'lib/assert.rb'
|
15
|
+
include TestUtil::Assertions
|
16
|
+
|
17
|
+
OPTIONS = {
|
18
|
+
:use_implement => false,
|
19
|
+
:orb_debuglevel => 0,
|
20
|
+
:iorfile => 'file://server.ior'
|
21
|
+
}
|
22
|
+
|
23
|
+
ARGV.options do |opts|
|
24
|
+
script_name = File.basename($0)
|
25
|
+
opts.banner = "Usage: ruby #{script_name} [options]"
|
26
|
+
|
27
|
+
opts.separator ""
|
28
|
+
|
29
|
+
opts.on("--k IORFILE",
|
30
|
+
"Set IOR.",
|
31
|
+
"Default: 'file://server.ior'") { |v| OPTIONS[:iorfile]=v }
|
32
|
+
opts.on("--d LVL",
|
33
|
+
"Set ORBDebugLevel value.",
|
34
|
+
"Default: 0", Integer) { |v| OPTIONS[:orb_debuglevel]=v }
|
35
|
+
opts.on("--use-implement",
|
36
|
+
"Load IDL through CORBA.implement() instead of precompiled code.",
|
37
|
+
"Default: off") { |v| OPTIONS[:use_implement]=v }
|
38
|
+
|
39
|
+
opts.separator ""
|
40
|
+
|
41
|
+
opts.on("-h", "--help",
|
42
|
+
"Show this help message.") { puts opts; exit }
|
43
|
+
|
44
|
+
opts.parse!
|
45
|
+
end
|
46
|
+
|
47
|
+
if OPTIONS[:use_implement]
|
48
|
+
require 'corba'
|
49
|
+
CORBA.implement('test.idl', OPTIONS)
|
50
|
+
else
|
51
|
+
require 'testC.rb'
|
52
|
+
end
|
53
|
+
require 'corba/policies.rb'
|
54
|
+
|
55
|
+
Min_timeout = 0
|
56
|
+
Max_timeout = 20
|
57
|
+
|
58
|
+
None, Orb1, Thread1, Object1 = (0..3).to_a
|
59
|
+
To_type_names = [ "none", "orb", "thread", "object" ]
|
60
|
+
|
61
|
+
Timeout_count = [0, 0, 0, 0]
|
62
|
+
In_time_count = [0, 0, 0, 0]
|
63
|
+
|
64
|
+
def send_echo (ctype, orb, server, t)
|
65
|
+
begin
|
66
|
+
server.echo(0, t)
|
67
|
+
|
68
|
+
In_time_count[ctype] += 1
|
69
|
+
rescue CORBA::TIMEOUT
|
70
|
+
Timeout_count[ctype] += 1
|
71
|
+
|
72
|
+
# Trap this exception and continue...
|
73
|
+
puts "==> Trapped a TIMEOUT exception (expected)"
|
74
|
+
|
75
|
+
# Sleep so the server can send the reply...
|
76
|
+
tv = Max_timeout / 1000.0 # max_timeout is in msec, so get seconds
|
77
|
+
|
78
|
+
ts_end = Time.now + tv
|
79
|
+
begin
|
80
|
+
orb.perform_work if orb.work_pending
|
81
|
+
sleep 0.01
|
82
|
+
end until Time.now > ts_end
|
83
|
+
# This is a non-standard TAO call that's used to give the
|
84
|
+
# client ORB a chance to cleanup the reply that's come back
|
85
|
+
# from the server.
|
86
|
+
#orb.run(tv)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
orb = CORBA.ORB_init(["-ORBDebugLevel", OPTIONS[:orb_debuglevel]], 'myORB')
|
92
|
+
|
93
|
+
begin
|
94
|
+
|
95
|
+
obj = orb.string_to_object(OPTIONS[:iorfile])
|
96
|
+
|
97
|
+
assert_not 'Object reference is nil.', CORBA::is_nil(obj)
|
98
|
+
|
99
|
+
simple_srv = Simple_Server._narrow(obj)
|
100
|
+
|
101
|
+
obj = orb.resolve_initial_references('ORBPolicyManager')
|
102
|
+
|
103
|
+
pol_man = CORBA::PolicyManager._narrow(obj)
|
104
|
+
|
105
|
+
obj = begin
|
106
|
+
orb.resolve_initial_references('PolicyCurrent')
|
107
|
+
rescue CORBA::ORB::InvalidName
|
108
|
+
STDERR.puts 'Client: PolicyCurrent not supported'
|
109
|
+
nil
|
110
|
+
end
|
111
|
+
|
112
|
+
pol_cur = obj ? CORBA::PolicyCurrent._narrow(obj) : nil
|
113
|
+
|
114
|
+
mid_value = 10000 * (Min_timeout + Max_timeout) / 2 # convert from msec to "TimeT" (0.1 usec units)
|
115
|
+
|
116
|
+
any_orb = CORBA::Any.to_any(mid_value, TimeBase::TimeT._tc)
|
117
|
+
any_thread = CORBA::Any.to_any(mid_value+10000, TimeBase::TimeT._tc) # midvalue + 1 msec
|
118
|
+
any_object = CORBA::Any.to_any(mid_value+20000, TimeBase::TimeT._tc) # midvalue + 2 msec
|
119
|
+
|
120
|
+
policies = []
|
121
|
+
policies << orb.create_policy(Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE, any_object)
|
122
|
+
|
123
|
+
obj = simple_srv._set_policy_overrides(policies, CORBA::SET_OVERRIDE)
|
124
|
+
|
125
|
+
simple_timeout_srv = Simple_Server._narrow(obj)
|
126
|
+
|
127
|
+
policies[0].destroy()
|
128
|
+
policies[0] = nil
|
129
|
+
|
130
|
+
puts "client (#{Process.pid}) testing from #{Min_timeout} to #{Max_timeout} milliseconds"
|
131
|
+
|
132
|
+
for t in Min_timeout...Max_timeout
|
133
|
+
puts ""
|
134
|
+
puts "client (#{Process.pid}) ================================"
|
135
|
+
puts "client (#{Process.pid}) Trying with timeout = #{t} msec"
|
136
|
+
|
137
|
+
puts "client (#{Process.pid}) Cleanup ORB/Thread/Object policies"
|
138
|
+
|
139
|
+
policies.clear()
|
140
|
+
pol_man.set_policy_overrides(policies, CORBA::SET_OVERRIDE)
|
141
|
+
pol_cur.set_policy_overrides(policies, CORBA::SET_OVERRIDE) if pol_cur
|
142
|
+
|
143
|
+
send_echo(None, orb, simple_srv, t)
|
144
|
+
|
145
|
+
puts "client (#{Process.pid}) Set the ORB policies"
|
146
|
+
|
147
|
+
policies << orb.create_policy(Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
|
148
|
+
any_orb)
|
149
|
+
|
150
|
+
pol_man.set_policy_overrides(policies, CORBA::SET_OVERRIDE)
|
151
|
+
|
152
|
+
send_echo(Orb1, orb, simple_srv, t)
|
153
|
+
|
154
|
+
policies[0].destroy()
|
155
|
+
|
156
|
+
if pol_cur
|
157
|
+
puts "client (#{Process.pid}) Set the thread policies"
|
158
|
+
|
159
|
+
policies.clear()
|
160
|
+
policies << orb.create_policy(Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
|
161
|
+
any_thread)
|
162
|
+
|
163
|
+
pol_cur.set_policy_overrides(policies, CORBA::SET_OVERRIDE)
|
164
|
+
|
165
|
+
send_echo(Thread1, orb, simple_srv, t)
|
166
|
+
|
167
|
+
policies[0].destroy()
|
168
|
+
end
|
169
|
+
|
170
|
+
puts "client (#{Process.pid}) Use the object policies"
|
171
|
+
|
172
|
+
send_echo(Object1, orb, simple_timeout_srv, t)
|
173
|
+
end
|
174
|
+
|
175
|
+
puts "\n\n"
|
176
|
+
puts "client (#{Process.pid}) Test completed, resynch with server"
|
177
|
+
|
178
|
+
policies.clear()
|
179
|
+
pol_man.set_policy_overrides(policies, CORBA::SET_OVERRIDE)
|
180
|
+
pol_cur.set_policy_overrides(policies, CORBA::SET_OVERRIDE) if pol_cur
|
181
|
+
|
182
|
+
send_echo(None, orb, simple_srv, 0)
|
183
|
+
|
184
|
+
simple_srv.shutdown()
|
185
|
+
|
186
|
+
timeout_count_total = 0
|
187
|
+
in_time_count_total = 0
|
188
|
+
for i in 0..3
|
189
|
+
timeout_count_total += Timeout_count[i]
|
190
|
+
in_time_count_total += In_time_count[i]
|
191
|
+
puts "client (#{Process.pid}) in_time_count[#{To_type_names[i]}]= #{In_time_count[i]} "+
|
192
|
+
"timeout_count[#{To_type_names[i]}]= #{Timeout_count[i]}"
|
193
|
+
end
|
194
|
+
|
195
|
+
assert_not "client (#{Process.pid}) ERROR: No messages timed out", timeout_count_total == 0
|
196
|
+
|
197
|
+
assert_not "client (#{Process.pid}) ERROR: No messages on time (within time limit)", in_time_count_total == 0
|
198
|
+
|
199
|
+
puts "client (#{Process.pid}) in_time_count_total = #{in_time_count_total}, timeout_count_total = #{timeout_count_total}"
|
200
|
+
|
201
|
+
sleep(0.1)
|
202
|
+
|
203
|
+
ensure
|
204
|
+
|
205
|
+
orb.destroy()
|
206
|
+
|
207
|
+
end
|