1 8 9 package test.mx4j.server; 10 11 import java.io.ByteArrayInputStream ; 12 import java.io.ByteArrayOutputStream ; 13 import java.io.ObjectInputStream ; 14 import java.io.ObjectOutputStream ; 15 import javax.management.MBeanPermission ; 16 17 import test.javax.management.PermissionTestCase; 18 19 22 public class MBeanPermissionTest extends PermissionTestCase 23 { 24 public MBeanPermissionTest(String s) 25 { 26 super(s); 27 } 28 29 public void testInvalidMBeanPermissionBecauseInvalidName() throws Exception 30 { 31 try 32 { 33 new MBeanPermission (null, null); 34 fail("Invalid MBeanPermission"); 35 } 36 catch (IllegalArgumentException ignored) 37 { 38 } 39 40 try 41 { 42 new MBeanPermission ("", null); 43 fail("Invalid MBeanPermission"); 44 } 45 catch (IllegalArgumentException ignored) 46 { 47 } 48 49 try 50 { 51 new MBeanPermission (" ", null); 52 fail("Invalid MBeanPermission"); 53 } 54 catch (IllegalArgumentException ignored) 55 { 56 } 57 58 try 59 { 60 new MBeanPermission (" ", "*"); 61 fail("Invalid MBeanPermission"); 62 } 63 catch (IllegalArgumentException ignored) 64 { 65 } 66 67 try 68 { 69 new MBeanPermission ("", "*"); 70 fail("Invalid MBeanPermission"); 71 } 72 catch (IllegalArgumentException ignored) 73 { 74 } 75 76 try 78 { 79 new MBeanPermission ("[d?k=v]", "*"); 80 fail("Invalid MBeanPermission"); 81 } 82 catch (IllegalArgumentException ignored) 83 { 84 } 85 86 try 87 { 88 new MBeanPermission ("[*]", "*"); 89 fail("Invalid MBeanPermission"); 90 } 91 catch (IllegalArgumentException ignored) 92 { 93 } 94 } 95 96 public void testInvalidMBeanPermissionBecauseInvalidActions() throws Exception 97 { 98 try 99 { 100 new MBeanPermission ("*", null); 101 fail("Invalid MBeanPermission"); 102 } 103 catch (IllegalArgumentException ignored) 104 { 105 } 106 107 try 108 { 109 new MBeanPermission ("com.*[d:k=v]", null); 110 fail("Invalid MBeanPermission"); 111 } 112 catch (IllegalArgumentException ignored) 113 { 114 } 115 116 try 117 { 118 new MBeanPermission ("com.*[d:k=v]", null); 119 fail("Invalid MBeanPermission"); 120 } 121 catch (IllegalArgumentException ignored) 122 { 123 } 124 125 try 126 { 127 new MBeanPermission ("com.*[d:k=v]", ""); 128 fail("Invalid MBeanPermission"); 129 } 130 catch (IllegalArgumentException ignored) 131 { 132 } 133 134 try 135 { 136 new MBeanPermission ("com.*[d:k=v]", " "); 137 fail("Invalid MBeanPermission"); 138 } 139 catch (IllegalArgumentException ignored) 140 { 141 } 142 143 try 144 { 145 new MBeanPermission ("com.*[d:k=v]", " , "); 146 fail("Invalid MBeanPermission"); 147 } 148 catch (IllegalArgumentException ignored) 149 { 150 } 151 } 152 153 public void testValidMBeanPermissionZero() throws Exception 154 { 155 MBeanPermission mbp1 = new MBeanPermission ("*", "*"); 156 MBeanPermission mbp2 = new MBeanPermission (" *", "*"); 157 MBeanPermission mbp3 = new MBeanPermission (" *", "* "); 158 MBeanPermission mbp4 = new MBeanPermission ("*[*:*]", "*"); 159 MBeanPermission mbp5 = new MBeanPermission ("*#*[*:*]", "*"); 160 161 shouldBeEqual(mbp1, mbp2); 163 shouldBeEqual(mbp2, mbp3); 164 shouldBeEqual(mbp3, mbp4); 165 shouldBeEqual(mbp4, mbp5); 166 } 167 168 public void testValidMBeanPermissionOne() throws Exception 169 { 170 MBeanPermission mbp1 = new MBeanPermission ("[d:k=v]", "invoke"); 171 MBeanPermission mbp2 = new MBeanPermission ("*[d:k=v]", "invoke"); 172 MBeanPermission mbp3 = new MBeanPermission ("*#*[d:k=v]", "invoke"); 173 174 shouldBeEqual(mbp1, mbp2); 175 shouldBeEqual(mbp2, mbp3); 176 } 177 178 public void testValidMBeanPermissionTwo() throws Exception 179 { 180 MBeanPermission mbp1 = new MBeanPermission ("com.package.MyClass", "getAttribute"); 181 MBeanPermission mbp2 = new MBeanPermission ("com.package.MyClass#*", "getAttribute"); 182 MBeanPermission mbp3 = new MBeanPermission ("com.package.MyClass#*[*:*]", "getAttribute"); 183 184 shouldBeEqual(mbp1, mbp2); 185 shouldBeEqual(mbp2, mbp3); 186 } 187 188 public void testValidMBeanPermissionThree() throws Exception 189 { 190 MBeanPermission mbp1 = new MBeanPermission ("com.package.MyClass[d:k=v]", "setAttribute"); 191 MBeanPermission mbp2 = new MBeanPermission ("com.package.MyClass#*[d:k=v]", "setAttribute"); 192 193 shouldBeEqual(mbp1, mbp2); 194 } 195 196 public void testValidMBeanPermissionFour() throws Exception 197 { 198 MBeanPermission mbp1 = new MBeanPermission ("#Name[d:k=v]", "isInstanceOf"); 199 MBeanPermission mbp2 = new MBeanPermission ("*#Name[d:k=v]", "isInstanceOf"); 200 201 shouldBeEqual(mbp1, mbp2); 202 } 203 204 public void testValidMBeanPermissionFive() throws Exception 205 { 206 MBeanPermission mbp1 = new MBeanPermission ("-", "getMBeanInfo"); 207 MBeanPermission mbp2 = new MBeanPermission ("-#*[*:*]", "getMBeanInfo"); 208 209 shouldBeEqual(mbp1, mbp2); 210 } 211 212 public void testValidMBeanPermissionSix() throws Exception 213 { 214 MBeanPermission mbp1 = new MBeanPermission ("-#-", "getMBeanInfo"); 215 MBeanPermission mbp2 = new MBeanPermission ("-#-[*:*]", "getMBeanInfo"); 216 217 shouldBeEqual(mbp1, mbp2); 218 } 219 220 public void testValidMBeanPermissionSeven() throws Exception 221 { 222 MBeanPermission mbp1 = new MBeanPermission ("-#-[-]", "getMBeanInfo"); 223 } 224 225 public void testValidMBeanPermissionEight() throws Exception 226 { 227 MBeanPermission mbp1 = new MBeanPermission ("com.package.MyClass#Attr[d:k=v]", "*"); 228 MBeanPermission mbp2 = new MBeanPermission ("com.package.MyClass#Attr[d:k=v]", "invoke,*"); 229 230 shouldBeEqual(mbp1, mbp2); 231 } 232 233 public void testValidMBeanPermissionNine() throws Exception 234 { 235 new MBeanPermission ("*[d:k=v]", "addNotificationListener, *"); 236 new MBeanPermission ("*[d:k1=v1,k2=v2]", "removeNotificationListener, *"); 237 new MBeanPermission ("mx4j.*", "addNotificationListener, removeNotificationListener"); 238 new MBeanPermission ("mx4j.Foo#*", "addNotificationListener, removeNotificationListener"); 239 new MBeanPermission ("mx4j.Foo$Inner#*", "addNotificationListener, removeNotificationListener"); 240 new MBeanPermission ("mx4j.Foo#*[*:*]", "addNotificationListener, removeNotificationListener"); 241 new MBeanPermission ("mx4j.Foo$Inner#*[*:*]", "addNotificationListener, removeNotificationListener"); 242 new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "addNotificationListener, removeNotificationListener"); 243 new MBeanPermission ("mx4j.Foo$Inner#Bar[d:k=v]", "addNotificationListener, removeNotificationListener"); 244 } 245 246 public void testMBeanPermissionWildcardAlwaysImplies() throws Exception 247 { 248 MBeanPermission wild = new MBeanPermission ("*", "*"); 249 shouldImply(wild, wild); 250 shouldImply(new MBeanPermission ("*[*:*]", "*"), wild); 251 shouldImply(wild, new MBeanPermission ("*[*:*]", "*")); 252 shouldImply(new MBeanPermission ("*#*[*:*]", "*"), wild); 253 shouldImply(wild, new MBeanPermission ("*#*[*:*]", "*")); 254 255 implies(wild, new MBeanPermission ("com.*", "*")); 256 shouldImply(wild, new MBeanPermission ("com.package.MyClass", "*")); 257 shouldImply(wild, new MBeanPermission ("com.package.MyClass#Attribute", "*")); 258 shouldImply(wild, new MBeanPermission ("com.package.MyClass#Attribute[d:k=v]", "*")); 259 shouldImply(wild, new MBeanPermission ("com.package.MyClass#Attribute[d:k=v]", "getObjectInstance")); 260 shouldImply(wild, new MBeanPermission ("-#-[-]", "*")); 261 } 262 263 public void testMBeanPermissionNilCardIsAlwaysImplied() throws Exception 264 { 265 String action = "queryNames"; 266 MBeanPermission nil = new MBeanPermission ("-#-[-]", action); 267 268 shouldImply(nil, nil); 269 shouldImply(new MBeanPermission ("com.package.MyClass#Attr[d:k=v]", action), nil); 270 } 271 272 public void testMBeanPermissionQueryMBeansImpliesQueryNames() throws Exception 273 { 274 shouldImply(new MBeanPermission ("*", "queryMBeans"), new MBeanPermission ("*", "queryNames")); 275 shouldNotImply(new MBeanPermission ("*", "queryMBeans"), new MBeanPermission ("*", "queryNames, invoke")); 276 } 277 278 public void testMBeanPermissionShuffledActionsAreEquals() throws Exception 279 { 280 MBeanPermission mbp1 = new MBeanPermission ("*", "addNotificationListener, removeNotificationListener"); 281 MBeanPermission mbp2 = new MBeanPermission ("*", "removeNotificationListener, addNotificationListener"); 282 283 shouldBeEqual(mbp1, mbp2); 284 } 285 286 public void testMBeanPermissionImpliesOne() throws Exception 287 { 288 MBeanPermission implied = new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,k2=v2]", "invoke"); 289 MBeanPermission all = new MBeanPermission ("*", "*"); 290 291 shouldImply(implied, implied); 292 293 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k2=v2,k1=v1]", "invoke"), implied); 294 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,k2=v2]", "invoke,getAttribute"), implied); 295 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,k2=v2]", "setAttribute,invoke"), implied); 296 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,k2=v2]", "invoke,*"), implied); 297 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,k2=v2]", "*"), implied); 298 299 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k1=v1,*]", "invoke"), implied); 300 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:k2=v2,*]", "invoke"), implied); 301 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[domain:*]", "invoke"), implied); 302 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[dom?in:k1=v1,k2=v2]", "invoke"), implied); 303 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[do*in:k1=v1,k2=v2]", "invoke"), implied); 304 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[*:k1=v1,k2=v2]", "invoke"), implied); 305 shouldImply(new MBeanPermission ("mx4j.Foo#Bar[*:*]", "invoke"), implied); 306 shouldImply(new MBeanPermission ("mx4j.Foo#Bar", "invoke"), implied); 307 308 shouldImply(new MBeanPermission ("mx4j.Foo#Bar*[domain:k1=v1,k2=v2]", "invoke"), implied); 309 shouldImply(new MBeanPermission ("mx4j.Foo#B*[domain:k1=v1,k2=v2]", "invoke"), implied); 310 shouldImply(new MBeanPermission ("mx4j.Foo#*[domain:k1=v1,k2=v2]", "invoke"), implied); 311 shouldImply(new MBeanPermission ("mx4j.Foo[domain:k1=v1,k2=v2]", "invoke"), implied); 312 shouldImply(new MBeanPermission ("mx4j.Foo#Bar*", "invoke"), implied); 313 shouldImply(new MBeanPermission ("mx4j.Foo#B*", "invoke"), implied); 314 shouldImply(new MBeanPermission ("mx4j.Foo#*", "invoke"), implied); 315 shouldImply(new MBeanPermission ("mx4j.Foo", "invoke"), implied); 316 317 shouldImply(new MBeanPermission ("mx4j.Foo*#Bar[domain:k1=v1,k2=v2]", "invoke"), implied); 318 shouldImply(new MBeanPermission ("mx4j.*#Bar[domain:k1=v1,k2=v2]", "invoke"), implied); 319 shouldImply(new MBeanPermission ("*#Bar[domain:k1=v1,k2=v2]", "invoke"), implied); 320 shouldImply(new MBeanPermission ("#Bar[domain:k1=v1,k2=v2]", "invoke"), implied); 321 shouldImply(new MBeanPermission ("mx4j.*#Bar", "invoke"), implied); 322 shouldImply(new MBeanPermission ("*#Bar", "invoke"), implied); 323 shouldImply(new MBeanPermission ("#Bar", "invoke"), implied); 324 shouldImply(new MBeanPermission ("mx4j.*", "invoke"), implied); 325 shouldImply(new MBeanPermission ("*", "invoke"), implied); 326 327 shouldImply(new MBeanPermission ("mx4j.Foo*#*[domain:k1=v1,k2=v2]", "invoke"), implied); 328 shouldImply(new MBeanPermission ("[domain:k1=v1,k2=v2]", "invoke"), implied); 329 330 shouldImply(all, implied); 331 332 shouldImply(new MBeanPermission ("[]", "*"), all); 333 shouldImply(implied, new MBeanPermission (null, null, null, "invoke")); 334 } 335 336 public void testMBeanPermissionNotImpliesOne() throws Exception 337 { 338 MBeanPermission notImplied = new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "invoke, getObjectInstance"); 339 340 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "getAttribute"), notImplied); 342 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "getAttribute,setAttribute"), notImplied); 343 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "invoke,setAttribute"), notImplied); 344 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "setAttribute,getObjectInstance"), notImplied); 345 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v]", "getObjectInstance,getAttribute"), notImplied); 346 347 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v1]", "invoke, getObjectInstance"), notImplied); 349 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[d:k=v,k1=v1]", "invoke, getObjectInstance"), notImplied); 350 shouldNotImply(new MBeanPermission ("mx4j.Foo#Bar[:k=v]", "invoke, getObjectInstance"), notImplied); 351 352 shouldNotImply(new MBeanPermission ("mx4j.Foo#Baz[d:k=v]", "invoke, getObjectInstance"), notImplied); 354 355 shouldNotImply(new MBeanPermission ("mx4j.Foo.Baz#Bar[d:k=v]", "invoke, getObjectInstance"), notImplied); 357 shouldNotImply(new MBeanPermission ("mx4j.Foo$Inner#Bar[d:k=v]", "invoke, getObjectInstance"), notImplied); 358 shouldNotImply(new MBeanPermission ("dummy.Foo#Bar[d:k=v]", "invoke, getObjectInstance"), notImplied); 359 } 360 361 public void testMBeanPermissionSerialization() throws Exception 362 { 363 MBeanPermission permission = new MBeanPermission ("mx4j.Foo#Bar[domain:key=value]", "invoke"); 364 365 ByteArrayOutputStream baos = new ByteArrayOutputStream (); 366 ObjectOutputStream oos = new ObjectOutputStream (baos); 367 oos.writeObject(permission); 368 oos.close(); 369 370 ByteArrayInputStream bais = new ByteArrayInputStream (baos.toByteArray()); 371 ObjectInputStream ois = new ObjectInputStream (bais); 372 MBeanPermission deserialized = (MBeanPermission )ois.readObject(); 373 ois.close(); 374 375 if (!(deserialized.equals(permission))) fail("Serialization/Deserialization failed"); 376 } 377 378 private void implies(MBeanPermission p1, MBeanPermission p2) 379 { 380 if (!imply(p1, p2)) fail("Permission " + p1 + " should imply Permission " + p2); 381 } 382 } 383 | Popular Tags |