@Test
 public void readWithPattern() {
   JmxReadRequest req = JmxRequestFactory.createGetRequest("read/java.lang:type=*", procParams);
   assert req.getType() == RequestType.READ : "Type is read";
   assert req.getObjectName().getCanonicalName().equals("java.lang:type=*")
       : "Name properly parsed";
   assert req.getObjectName().isPattern() : "Name is pattern";
   assert req.getAttributeNames() == null : "No attributes names";
   assert req.getAttributeName() == null : "No attributes names";
   assert req.getPath() == null : "Path is null";
   req = JmxRequestFactory.createGetRequest("read/java.lang:type=*/HeapMemoryUsage", procParams);
   assert req.getAttributeName().equals("HeapMemoryUsage") : "No attributes names";
 }
 @Test
 public void simpleGetWithEscapedAttribute() {
   JmxReadRequest req =
       JmxRequestFactory.createGetRequest(
           "read/java.lang:type=Memory/!/Heap!/Memory!/Usage!/", procParams);
   assertEquals(req.getAttributeName(), "/Heap/Memory/Usage/", "Attribute properly parsed");
 }
 @Test
 public void simpleGetWithEscapedPath() {
   JmxReadRequest req =
       JmxRequestFactory.createGetRequest(
           "read/java.lang:type=Memory/HeapMemoryUsage/used!/bla!/blub/bloe", procParams);
   assertEquals(req.getPathParts().size(), 2, "Size of path");
   assertEquals(req.getPath(), "used!/bla!/blub/bloe", "Path properly parsed");
 }
 @Test
 public void simpleGetWithQueryPath() {
   Map<String, String> params = new HashMap<String, String>();
   params.put("p", "list/java.lang/type=Memory");
   JmxListRequest req =
       JmxRequestFactory.createGetRequest(
           null, new Configuration().getProcessingParameters(params));
   assert req.getHttpMethod() == HttpMethod.GET : "GET by default";
   assert req.getPath().equals("java.lang/type=Memory") : "Path extracted";
 }
 @Test
 public void simpleGet() {
   JmxReadRequest req =
       JmxRequestFactory.createGetRequest(
           "read/java.lang:type=Memory/HeapMemoryUsage", procParams);
   assert req.getType() == RequestType.READ : "Type is read";
   assert req.getObjectName().getCanonicalName().equals("java.lang:type=Memory")
       : "Name properly parsed";
   assertEquals(req.getAttributeName(), "HeapMemoryUsage", "Attribute parsed properly");
   assert req.getPathParts() == null : "PathParts are null";
   assert req.getPath() == null : "Path is null";
 }
 @Test
 public void multiPostRequests() {
   Map<String, Object> req1Map =
       createMap(
           "type", "read",
           "mbean", "java.lang:type=Memory",
           "attribute", "HeapMemoryUsage");
   Map<String, Object> req2Map = createMap("type", "list");
   List<JmxRequest> req =
       JmxRequestFactory.createPostRequests(Arrays.asList(req1Map, req2Map), procParams);
   assertEquals(req.get(0).getType(), RequestType.READ);
   assertEquals(req.get(1).getType(), RequestType.LIST);
 }
 @Test
 public void simplePost() {
   Map<String, Object> reqMap =
       createMap(
           "type", "read",
           "mbean", "java.lang:type=Memory",
           "attribute", "HeapMemoryUsage");
   JmxReadRequest req = JmxRequestFactory.createPostRequest(reqMap, procParams);
   assert req.getType() == RequestType.READ : "Type is read";
   assert req.getObjectName().getCanonicalName().equals("java.lang:type=Memory")
       : "Name properly parsed";
   assertEquals(req.getAttributeName(), "HeapMemoryUsage", "Attribute parsed properly");
   assert req.getPathParts() == null : "PathParts are null";
   assert req.getPath() == null : "Path is null";
 }
 @Test
 public void simplePostWithPath() {
   Map<String, Object> reqMap =
       createMap(
           "type", "read",
           "mbean", "java.lang:type=Memory",
           "attribute", "HeapMemoryUsage",
           "path", "blub!/bla/hello");
   JmxReadRequest req = JmxRequestFactory.createPostRequest(reqMap, procParams);
   List<String> path = req.getPathParts();
   assertEquals(path.size(), 2);
   assertEquals(path.get(0), "blub/bla");
   assertEquals(path.get(1), "hello");
   assertEquals(req.getPath(), "blub!/bla/hello");
 }
 @Test
 public void simpleGetWithPath() {
   JmxWriteRequest req =
       JmxRequestFactory.createGetRequest(
           "write/java.lang:type=Runtime/SystemProperties/7788/[com.sun.management.jmxremote.port]/value",
           procParams);
   assert req.getType() == RequestType.WRITE : "Type is write";
   assert req.getObjectName().getCanonicalName().equals("java.lang:type=Runtime")
       : "Name properly parsed";
   List<String> parts = req.getPathParts();
   assert parts.get(0).equals("[com.sun.management.jmxremote.port]")
       : "Path part 0:" + parts.get(0);
   assert parts.get(1).equals("value") : "Path part 1: " + parts.get(1);
   assert req.getPath().equals("[com.sun.management.jmxremote.port]/value");
 }
 @Test
 public void simplePostWithMergedMaps() {
   Map config = new HashMap();
   config.put("maxDepth", "10");
   Map<String, Object> reqMap =
       createMap(
           "type", "read",
           "mbean", "java.lang:type=Memory",
           "attribute", "HeapMemoryUsage",
           "config", config);
   Map param = new HashMap();
   ;
   param.put("maxObjects", "100");
   JmxReadRequest req =
       (JmxReadRequest)
           JmxRequestFactory.createPostRequest(
               reqMap, new Configuration().getProcessingParameters(param));
   assertEquals(req.getAttributeName(), "HeapMemoryUsage");
   assertEquals(req.getParameter(ConfigKey.MAX_DEPTH), "10");
   assertEquals(req.getParameterAsInt(ConfigKey.MAX_OBJECTS), 100);
 }
 @Test(expectedExceptions = NullPointerException.class)
 public void nullProcParams() {
   JmxRequestFactory.createGetRequest("", null);
 }
 @Test(
     expectedExceptionsMessageRegExp = ".*pathinfo.*",
     expectedExceptions = {IllegalArgumentException.class})
 public void illegalPath() {
   JmxRequestFactory.createGetRequest("read", procParams);
 }
 @Test(expectedExceptions = {IllegalArgumentException.class})
 public void simplePostWithMalformedObjectName() {
   JmxRequestFactory.createPostRequest(
       createMap("type", "read", "mbean", "bal::blub", "attribute", "HeapMemoryUsage"),
       procParams);
 }
 @Test(
     expectedExceptionsMessageRegExp = ".*Invalid object name.*",
     expectedExceptions = {IllegalArgumentException.class})
 public void invalidObjectName() {
   JmxRequestFactory.createGetRequest("read/bla::blub", procParams);
 }
 @Test(expectedExceptions = {UnsupportedOperationException.class})
 public void unsupportedType() {
   JmxRequestFactory.createGetRequest("regnotif", procParams);
 }
 @Test(expectedExceptions = {ClassCastException.class})
 public void castException() {
   JmxReadRequest req =
       JmxRequestFactory.createGetRequest("exec/java.lang:type=Memory/gc", procParams);
 }
 @Test
 public void emptyRequest() {
   JmxVersionRequest req = JmxRequestFactory.createGetRequest("", procParams);
   req = JmxRequestFactory.createGetRequest(null, procParams);
 }
 @Test(expectedExceptions = {IllegalArgumentException.class})
 public void multiPostRequestsWithWrongArg() {
   Map<String, Object> reqMap = createMap("type", "list");
   JmxRequestFactory.createPostRequests(Arrays.asList(reqMap, "Wrong"), procParams);
 }