1
2
3
4
5
6
7
8
9
10
11 package psiprobe.beans;
12
13 import static org.junit.jupiter.api.Assertions.assertEquals;
14 import static org.junit.jupiter.api.Assertions.assertNotNull;
15 import static org.mockito.ArgumentMatchers.isNull;
16 import static org.mockito.Mockito.any;
17 import static org.mockito.Mockito.mock;
18 import static org.mockito.Mockito.when;
19
20 import java.lang.management.ManagementFactory;
21 import java.util.List;
22 import java.util.Set;
23
24 import javax.management.MBeanServer;
25 import javax.management.ObjectInstance;
26 import javax.management.ObjectName;
27 import javax.management.openmbean.CompositeDataSupport;
28
29 import org.junit.jupiter.api.Test;
30 import org.mockito.MockedStatic;
31 import org.mockito.Mockito;
32
33 import psiprobe.model.jmx.MemoryPool;
34 import psiprobe.tools.JmxTools;
35
36 class JvmMemoryInfoAccessorBeanTest {
37
38 @Test
39 void testGetPoolsReturnsMemoryPools() throws Exception {
40
41 MBeanServer mbeanServer = mock(MBeanServer.class);
42 ObjectName objName = new ObjectName("java.lang:type=MemoryPool,name=TestPool");
43 ObjectInstance objectInstance = mock(ObjectInstance.class);
44 when(objectInstance.getObjectName()).thenReturn(objName);
45
46 Set<ObjectInstance> objectInstances = Set.of(objectInstance);
47
48 when(mbeanServer.queryMBeans(any(ObjectName.class), isNull())).thenReturn(objectInstances);
49
50
51 CompositeDataSupport usage = mock(CompositeDataSupport.class);
52
53 try (MockedStatic<ManagementFactory> mgmtFactoryMock =
54 Mockito.mockStatic(ManagementFactory.class)) {
55 mgmtFactoryMock.when(ManagementFactory::getPlatformMBeanServer).thenReturn(mbeanServer);
56
57 try (MockedStatic<JmxTools> jmxToolsMock = Mockito.mockStatic(JmxTools.class)) {
58 jmxToolsMock.when(() -> JmxTools.getStringAttr(mbeanServer, objName, "Name"))
59 .thenReturn("TestPool");
60 jmxToolsMock.when(() -> JmxTools.getStringAttr(mbeanServer, objName, "Type"))
61 .thenReturn("HEAP");
62 jmxToolsMock.when(() -> JmxTools.getAttribute(mbeanServer, objName, "Usage"))
63 .thenReturn(usage);
64
65 jmxToolsMock.when(() -> JmxTools.getLongAttr(usage, "max")).thenReturn(100L);
66 jmxToolsMock.when(() -> JmxTools.getLongAttr(usage, "used")).thenReturn(50L);
67 jmxToolsMock.when(() -> JmxTools.getLongAttr(usage, "init")).thenReturn(10L);
68 jmxToolsMock.when(() -> JmxTools.getLongAttr(usage, "committed")).thenReturn(80L);
69
70 JvmMemoryInfoAccessorBean bean = new JvmMemoryInfoAccessorBean();
71
72
73 List<MemoryPool> pools = bean.getPools();
74
75
76 assertNotNull(pools);
77 assertEquals(2, pools.size());
78 MemoryPool pool = pools.get(0);
79 assertEquals("TestPool", pool.getName());
80 assertEquals("HEAP", pool.getType());
81 assertEquals(100L, pool.getMax());
82 assertEquals(50L, pool.getUsed());
83 assertEquals(10L, pool.getInit());
84 assertEquals(80L, pool.getCommitted());
85
86 MemoryPool total = pools.get(1);
87 assertEquals("Total", total.getName());
88 assertEquals("TOTAL", total.getType());
89 assertEquals(100L, total.getMax());
90 assertEquals(50L, total.getUsed());
91 assertEquals(10L, total.getInit());
92 assertEquals(80L, total.getCommitted());
93 }
94 }
95 }
96
97 @Test
98 void testGetPoolsHandlesNullUsage() throws Exception {
99 MBeanServer mbeanServer = mock(MBeanServer.class);
100 ObjectName objName = new ObjectName("java.lang:type=MemoryPool,name=TestPool");
101 ObjectInstance objectInstance = mock(ObjectInstance.class);
102 when(objectInstance.getObjectName()).thenReturn(objName);
103
104 Set<ObjectInstance> objectInstances = Set.of(objectInstance);
105
106 when(mbeanServer.queryMBeans(any(ObjectName.class), isNull())).thenReturn(objectInstances);
107
108 try (MockedStatic<ManagementFactory> mgmtFactoryMock =
109 Mockito.mockStatic(ManagementFactory.class)) {
110 mgmtFactoryMock.when(ManagementFactory::getPlatformMBeanServer).thenReturn(mbeanServer);
111
112 try (MockedStatic<JmxTools> jmxToolsMock = Mockito.mockStatic(JmxTools.class)) {
113 jmxToolsMock.when(() -> JmxTools.getStringAttr(mbeanServer, objName, "Name"))
114 .thenReturn("TestPool");
115 jmxToolsMock.when(() -> JmxTools.getStringAttr(mbeanServer, objName, "Type"))
116 .thenReturn("HEAP");
117 jmxToolsMock.when(() -> JmxTools.getAttribute(mbeanServer, objName, "Usage"))
118 .thenReturn(null);
119
120 JvmMemoryInfoAccessorBean bean = new JvmMemoryInfoAccessorBean();
121
122 List<MemoryPool> pools = bean.getPools();
123
124 assertNotNull(pools);
125 assertEquals(2, pools.size());
126 assertEquals(0L, pools.get(0).getMax());
127 assertEquals(0L, pools.get(0).getUsed());
128 assertEquals(0L, pools.get(0).getInit());
129 assertEquals(0L, pools.get(0).getCommitted());
130 }
131 }
132 }
133 }