JmxRequestFactory { public static <R extends JmxRequest> R createGetRequest(String pPathInfo, ProcessingParameters pProcessingParameters) { RequestType type = null; try { String pathInfo = extractPathInfo(pPathInfo, pProcessingParameters); Stack<String> elements = EscapeUtil.extractElementsFromPath(pathInfo); type = elements.size() != 0 ? RequestType.getTypeByName(elements.pop()) : RequestType.VERSION; return (R) getCreator(type).create(elements, pProcessingParameters); } catch (MalformedObjectNameException e) { throw new IllegalArgumentException("Invalid object name. " + e.getMessage(),e); } catch (EmptyStackException exp) { throw new IllegalArgumentException("Invalid arguments in pathinfo " + pPathInfo + (type != null ? " for command " + type : ""),exp); } } private  JmxRequestFactory(); static R createGetRequest(String pPathInfo, ProcessingParameters pProcessingParameters); static R createPostRequest(Map<String, ?> pRequestMap, ProcessingParameters pProcessingParams); static List<JmxRequest> createPostRequests(List pJsonRequests, ProcessingParameters pProcessingParams);  }
@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 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 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(expectedExceptionsMessageRegExp = ".*pathinfo.*",expectedExceptions = {IllegalArgumentException.class}) public void illegalPath() { JmxRequestFactory.createGetRequest("read", 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 public void emptyRequest() { JmxVersionRequest req = JmxRequestFactory.createGetRequest("",procParams); req = JmxRequestFactory.createGetRequest(null,procParams); }
@Test(expectedExceptions = NullPointerException.class) public void nullProcParams() { JmxRequestFactory.createGetRequest("",null); }
@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 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 readWithPatternAndAttribute() { 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"; }
@Test(expectedExceptions = { ClassCastException.class } ) public void castException() { JmxReadRequest req = JmxRequestFactory.createGetRequest("exec/java.lang:type=Memory/gc", procParams); }