@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); }