rboss 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +1 -0
  4. data/bin/jboss-profile +90 -0
  5. data/bin/twiddle +230 -0
  6. data/examples/jboss_profile/jbb_profile_1.yaml +32 -0
  7. data/examples/jboss_profile/jbb_profile_2.yaml +32 -0
  8. data/examples/jboss_profile/jboss_profile.yaml +7 -0
  9. data/examples/monitor/simple_monitor.rb +61 -0
  10. data/lib/rboss.rb +25 -0
  11. data/lib/rboss/component_processor.rb +177 -0
  12. data/lib/rboss/components/component.rb +52 -0
  13. data/lib/rboss/components/datasource.rb +198 -0
  14. data/lib/rboss/components/deploy_folder.rb +104 -0
  15. data/lib/rboss/components/hypersonic_replacer.rb +58 -0
  16. data/lib/rboss/components/jbossweb.rb +117 -0
  17. data/lib/rboss/components/jmx.rb +88 -0
  18. data/lib/rboss/components/mod_cluster.rb +81 -0
  19. data/lib/rboss/components/org/6.0/deploy_folder.rb +33 -0
  20. data/lib/rboss/components/org/jmx.rb +59 -0
  21. data/lib/rboss/components/profile_folder.rb +44 -0
  22. data/lib/rboss/components/resource.rb +53 -0
  23. data/lib/rboss/components/run_conf.rb +90 -0
  24. data/lib/rboss/components/run_conf.yaml +22 -0
  25. data/lib/rboss/components/service_script.rb +55 -0
  26. data/lib/rboss/components/slimming.rb +124 -0
  27. data/lib/rboss/components/soa-p/hypersonic_replacer.rb +79 -0
  28. data/lib/rboss/components/soa-p/jmx.rb +47 -0
  29. data/lib/rboss/components/xadatasource.rb +67 -0
  30. data/lib/rboss/file_processor.rb +107 -0
  31. data/lib/rboss/jboss_path.rb +53 -0
  32. data/lib/rboss/jboss_profile.rb +344 -0
  33. data/lib/rboss/resources/jboss_init_redhat.sh.erb +140 -0
  34. data/lib/rboss/resources/mod_cluster.sar/META-INF/mod_cluster-jboss-beans.xml +282 -0
  35. data/lib/rboss/resources/mod_cluster.sar/mod_cluster-1.1.2.Final.jar +0 -0
  36. data/lib/rboss/resources/run.conf.erb +62 -0
  37. data/lib/rboss/twiddle.rb +25 -0
  38. data/lib/rboss/twiddle/base_monitor.rb +57 -0
  39. data/lib/rboss/twiddle/mbean.rb +82 -0
  40. data/lib/rboss/twiddle/monitor.rb +144 -0
  41. data/lib/rboss/twiddle/scanner.rb +92 -0
  42. data/lib/rboss/twiddle/twiddle.rb +71 -0
  43. data/lib/rboss/utils.rb +33 -0
  44. data/lib/rboss/version.rb +25 -0
  45. data/rboss.gemspec +20 -0
  46. data/test/datasource_test.rb +211 -0
  47. data/test/deploy_folder_test.rb +126 -0
  48. data/test/mbean_test.rb +53 -0
  49. data/test/test_helper.rb +124 -0
  50. data/test/test_suite.rb +35 -0
  51. metadata +109 -0
@@ -0,0 +1,33 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ class String
24
+
25
+ def camelize
26
+ (self.split(/_/).collect { |n| n.capitalize }).join
27
+ end
28
+
29
+ def uncapitalize
30
+ self[0, 1].downcase + self[1..-1]
31
+ end
32
+
33
+ end
@@ -0,0 +1,25 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ module RBoss
24
+ VERSION = "0.1.0"
25
+ end
data/rboss.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rboss/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rboss"
7
+ s.version = RBoss::VERSION
8
+ s.authors = ["Ataxexe"]
9
+ s.email = ["ataxexe@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{A Ruby way to do a JBoss work!}
12
+ s.description = %q{This gem help you to create a JBoss profile and some other things like building twiddle scripts}
13
+
14
+ s.rubyforge_project = "rboss"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
@@ -0,0 +1,211 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require_relative 'test_helper'
24
+
25
+ class DatasourceTest < Test::Unit::TestCase
26
+
27
+ def setup
28
+ @types = %w{mysql oracle postgres}
29
+ end
30
+
31
+ def test_datasource_type
32
+ @types.each do |type|
33
+ for_test_with :all do |profile|
34
+ profile.add :datasource,
35
+ :type => type
36
+ end
37
+
38
+ for_assertions_with :all do |jboss|
39
+ file = "#{jboss.profile}/deploy/#{type}-ds.xml"
40
+ assert File.exists? file
41
+ datasource_content = File.read file
42
+ assert datasource_content[type]
43
+ end
44
+
45
+ do_test
46
+ end
47
+ end
48
+
49
+ def test_datasource_naming
50
+ @types.each do |type|
51
+ for_test_with :all do |profile|
52
+ profile.add :datasource,
53
+ :type => type,
54
+ :name => 'my-datasource'
55
+ end
56
+
57
+ for_assertions_with :all do |jboss|
58
+ file = "#{jboss.profile}/deploy/my-datasource-ds.xml"
59
+ assert File.exists? file
60
+ datasource_content = File.read file
61
+ assert datasource_content[type]
62
+ end
63
+
64
+ do_test
65
+ end
66
+ end
67
+
68
+ def test_datasource_folder_inside_installation
69
+ @types.each do |type|
70
+ for_test_with :all do |profile|
71
+ profile.add :deploy_folder, 'deploy/datasources'
72
+
73
+ profile.add :datasource,
74
+ :type => type,
75
+ :folder => 'deploy/datasources'
76
+ end
77
+
78
+ for_assertions_with :all do |jboss|
79
+ file = "#{jboss.profile}/deploy/datasources/#{type}-ds.xml"
80
+ assert File.exists? file
81
+ datasource_content = File.read file
82
+ assert datasource_content[type]
83
+ end
84
+
85
+ do_test
86
+ end
87
+ end
88
+
89
+ def test_datasource_folder_outside_installation
90
+ @types.each do |type|
91
+ for_test_with :all do |profile|
92
+ profile.add :deploy_folder, '/tmp/datasources'
93
+
94
+ profile.add :datasource,
95
+ :type => type,
96
+ :folder => '/tmp/datasources'
97
+ end
98
+
99
+ for_assertions_with :all do |jboss|
100
+ file = "/tmp/datasources/#{type}-ds.xml"
101
+ assert File.exists? file
102
+ datasource_content = File.read file
103
+ assert datasource_content[type]
104
+
105
+ `rm -rf /tmp/datasources`
106
+ end
107
+
108
+ do_test
109
+ end
110
+ end
111
+
112
+ def test_datasource_attributes
113
+ @types.each do |type|
114
+ for_test_with :all do |profile|
115
+
116
+ profile.add :datasource,
117
+ :type => type,
118
+ :attributes => {
119
+ :jndi_name => "#{type}Datasource",
120
+ :user_name => "#{type}_user",
121
+ :password => "#{type}_password",
122
+ :connection_url => "#{type}_connection",
123
+ :driver_class => "#{type}_class"
124
+ }
125
+ end
126
+
127
+ for_assertions_with :all do |jboss|
128
+ file = "#{jboss.profile}/deploy/#{type}-ds.xml"
129
+ xml = REXML::Document::new File::new(file)
130
+
131
+ assert_tag xml, "//jndi-name", "#{type}Datasource", "local-tx-datasource"
132
+ assert_tag xml, "//user-name", "#{type}_user", "local-tx-datasource"
133
+ assert_tag xml, "//password", "#{type}_password", "local-tx-datasource"
134
+ assert_tag xml, "//connection-url", "#{type}_connection", "local-tx-datasource"
135
+ assert_tag xml, "//driver-class", "#{type}_class", "local-tx-datasource"
136
+ end
137
+
138
+ do_test
139
+ end
140
+ end
141
+
142
+ def test_new_datasource_attributes
143
+ @types.each do |type|
144
+ for_test_with :all do |profile|
145
+
146
+ profile.add :datasource,
147
+ :type => type,
148
+ :attributes => {
149
+ :min_pool_size => 10,
150
+ :max_pool_size => 50,
151
+ :use_java_context => true
152
+ }
153
+ end
154
+
155
+ for_assertions_with :all do |jboss|
156
+ file = "#{jboss.profile}/deploy/#{type}-ds.xml"
157
+ xml = REXML::Document::new File::new(file)
158
+
159
+ assert_tag xml, "//min-pool-size", 10, "local-tx-datasource"
160
+ assert_tag xml, "//max-pool-size", 50, "local-tx-datasource"
161
+ end
162
+
163
+ do_test
164
+ end
165
+ end
166
+
167
+ def test_datasource_encryption
168
+ @types.each do |type|
169
+ for_test_with :all do |profile|
170
+
171
+ profile.add :datasource,
172
+ :type => type,
173
+ :encrypt => true,
174
+ :attributes => {
175
+ :jndi_name => "MyDatasource",
176
+ :user_name => "user-name",
177
+ :password => "password"
178
+ }
179
+ end
180
+
181
+ for_assertions_with :all do |jboss|
182
+ file = "#{jboss.profile}/deploy/#{type}-ds.xml"
183
+ xml = REXML::Document::new File::new(file)
184
+
185
+ assert XPath::first(xml, "//user-name").nil?
186
+ assert XPath::first(xml, "//password").nil?
187
+
188
+ assert_tag xml, "//security-domain", type, "local-tx-datasource"
189
+
190
+ xml = REXML::Document::new File::new("#{jboss.profile}/deploy/#{type}.login-module.xml")
191
+
192
+ application_policy = XPath::first xml, "//application-policy[@name='#{type}']"
193
+ assert !application_policy.nil?
194
+ assert application_policy.parent.name == "policy"
195
+
196
+ assert_tag application_policy, ".//module-option[@name='username']", "user-name", "login-module"
197
+ assert_tag application_policy, ".//module-option[@name='password']", "5dfc52b51bd35553df8592078de921bc", "login-module"
198
+ assert_tag application_policy, ".//module-option[@name='managedConnectionFactoryName']", "jboss.jca:name=MyDatasource,service=LocalTxCM", "login-module"
199
+ end
200
+
201
+ do_test
202
+ end
203
+ end
204
+
205
+ def assert_tag xml, path, value, parent_name = nil
206
+ tag = XPath::first xml, path
207
+ assert tag.text.strip == value.to_s
208
+ assert tag.parent.name == parent_name if parent_name
209
+ end
210
+
211
+ end
@@ -0,0 +1,126 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require_relative 'test_helper'
24
+
25
+ class DeployFolderTest < Test::Unit::TestCase
26
+
27
+ def test_folder_inside_deploy
28
+ for_test_with :all do |profile|
29
+ profile.add :deploy_folder, 'deploy/rboss-deploy'
30
+ profile.add :deploy_folder, 'deploy/rboss/deploy'
31
+ end
32
+
33
+ for_assertions_with :all do |jboss|
34
+ assert(File.exists? "#{jboss.profile}/deploy/rboss-deploy")
35
+ assert(File.directory? "#{jboss.profile}/deploy/rboss-deploy")
36
+ assert(File.exists? "#{jboss.profile}/deploy/rboss/deploy")
37
+ assert(File.directory? "#{jboss.profile}/deploy/rboss/deploy")
38
+ end
39
+
40
+ do_test
41
+ end
42
+
43
+ def test_folder_outside_deploy
44
+ for_test_with :all do |profile|
45
+ profile.add :deploy_folder, 'rboss-deploy'
46
+ profile.add :deploy_folder, 'rboss/deploy'
47
+ end
48
+
49
+ for_assertions_with :all do |jboss|
50
+ assert(File.exists? "#{jboss.profile}/rboss-deploy")
51
+ assert(File.directory? "#{jboss.profile}/rboss-deploy")
52
+ assert(File.exists? "#{jboss.profile}/rboss/deploy")
53
+ assert(File.directory? "#{jboss.profile}/rboss/deploy")
54
+
55
+ check_profile_xml "${jboss.server.home.url}rboss-deploy", "${jboss.server.home.url}rboss/deploy"
56
+ check_vfs_xml "${jboss.server.home.url}rboss-deploy", "${jboss.server.home.url}rboss/deploy"
57
+ end
58
+
59
+ for_assertions_with :org, 6.0 do |jboss|
60
+ assert(File.exists? "#{jboss.profile}/rboss-deploy")
61
+ assert(File.directory? "#{jboss.profile}/rboss-deploy")
62
+ assert(File.exists? "#{jboss.profile}/rboss/deploy")
63
+ assert(File.directory? "#{jboss.profile}/rboss/deploy")
64
+
65
+ check_profile_xml "${jboss.server.home.url}rboss-deploy", "${jboss.server.home.url}rboss/deploy"
66
+ end
67
+
68
+ do_test
69
+ end
70
+
71
+ def test_folder_outside_jboss
72
+ for_test_with :all do |profile|
73
+ profile.add :deploy_folder, '/tmp/rboss-deploy'
74
+ profile.add :deploy_folder, '/tmp/rboss/deploy'
75
+ end
76
+
77
+ for_assertions_with :all do |jboss|
78
+ assert(File.exists? "/tmp/rboss-deploy")
79
+ assert(File.directory? "/tmp/rboss-deploy")
80
+ assert(File.exists? "/tmp/rboss/deploy")
81
+ assert(File.directory? "/tmp/rboss/deploy")
82
+
83
+ check_profile_xml 'file:///tmp/rboss-deploy', 'file:///tmp/rboss/deploy'
84
+ check_vfs_xml 'file:///tmp/rboss-deploy', 'file:///tmp/rboss/deploy'
85
+ end
86
+
87
+ for_assertions_with :org, 6.0 do |jboss|
88
+ assert(File.exists? "/tmp/rboss-deploy")
89
+ assert(File.directory? "/tmp/rboss-deploy")
90
+ assert(File.exists? "/tmp/rboss/deploy")
91
+ assert(File.directory? "/tmp/rboss/deploy")
92
+
93
+ check_profile_xml 'file:///tmp/rboss-deploy', 'file:///tmp/rboss/deploy'
94
+ end
95
+
96
+ do_test
97
+
98
+ `rm -rf /tmp/rboss*`
99
+ end
100
+
101
+ def check_profile_xml *names
102
+ xml = REXML::Document::new File::new("#{@jboss.profile}/conf/bootstrap/profile.xml")
103
+ element = XPath.first xml, "//property[@name='applicationURIs']"
104
+ element = XPath.first element, "//list[@elementClass='java.net.URI']"
105
+ element.each do |el|
106
+ names.delete el.text.strip if el.respond_to? :text
107
+ end
108
+ assert(names.empty?)
109
+ end
110
+
111
+ def check_vfs_xml *names
112
+ xml = REXML::Document::new File::new("#{@jboss.profile}/conf/bootstrap/vfs.xml")
113
+ element = XPath.first xml, "//property[@name='permanentRoots']"
114
+ element = XPath.first element, "//map[@keyClass='java.net.URL']"
115
+ XPath.each element, "//key" do |el|
116
+ if el.respond_to? :text
117
+ names.delete el.text.strip
118
+ value = XPath.first el.parent, "//value"
119
+ inject = XPath.first value, "//inject"
120
+ assert(inject.attributes["bean"] == "VfsNamesExceptionHandler")
121
+ end
122
+ end
123
+ assert(names.empty?)
124
+ end
125
+
126
+ end
@@ -0,0 +1,53 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ # THE SOFTWARE.
22
+
23
+ require 'test/unit'
24
+ require_relative '../lib/rboss'
25
+
26
+ class MBeanTest < Test::Unit::TestCase
27
+
28
+ def twiddle
29
+ twiddle = Object.new
30
+ def twiddle.invoke command, *args
31
+ "#{command} #{args.join " "}".strip
32
+ end
33
+ twiddle
34
+ end
35
+
36
+ def test_pattern_with_resource
37
+ mbean = JBoss::MBean::new :pattern => 'query=/#{resource}', :twiddle => twiddle
38
+ mbean.resource= "my_resource"
39
+ assert_equal "get query=/my_resource my_property", mbean[:my_property]
40
+ end
41
+
42
+ def test_pattern_without_resource
43
+ mbean = JBoss::MBean::new :pattern => 'query=/resource', :twiddle => twiddle
44
+ assert_equal "get query=/resource my_property", mbean[:my_property]
45
+ end
46
+
47
+ def test_invoke
48
+ mbean = JBoss::MBean::new :pattern => 'jboss.system:type=Server', :twiddle => twiddle
49
+ assert_equal "invoke jboss.system:type=Server shutdown", mbean.shutdown
50
+ assert_equal "invoke jboss.system:type=Server traceInstructions true", mbean.traceInstructions(true)
51
+ end
52
+
53
+ end