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