/* * Copyright 2017 NAVER Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.profiler.context.monitor; import com.navercorp.pinpoint.bootstrap.plugin.monitor.DataSourceMonitor; import com.navercorp.pinpoint.common.trace.ServiceType; import org.junit.Assert; import org.junit.Test; import java.util.Random; /** * @author Taejin Koo */ public class DefaultPluginMonitorContextTest { @Test public void registerTest1() throws Exception { DataSourceMonitorRegistryService dataSourceMonitorRegistryService = new DefaultDataSourceMonitorRegistryService(20); int remainingCapacity = dataSourceMonitorRegistryService.getRemainingIdNumber(); MockDataSourceMonitor[] mockDataSourceMonitors = createMockDataSourceMonitor(dataSourceMonitorRegistryService, remainingCapacity); Assert.assertEquals(remainingCapacity, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); addOverDataSourceMonitor(dataSourceMonitorRegistryService); Assert.assertEquals(remainingCapacity, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); for (MockDataSourceMonitor mockMonitor : mockDataSourceMonitors) { boolean unregister = dataSourceMonitorRegistryService.unregister(mockMonitor); Assert.assertTrue(unregister); } Assert.assertEquals(0, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); } @Test public void registerTest2() throws Exception { DataSourceMonitorRegistryService dataSourceMonitorRegistryService = new DefaultDataSourceMonitorRegistryService(20); int remainingCapacity = dataSourceMonitorRegistryService.getRemainingIdNumber(); MockDataSourceMonitor[] mockDataSourceMonitors = createMockDataSourceMonitor(dataSourceMonitorRegistryService, remainingCapacity); Assert.assertEquals(remainingCapacity, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); addOverDataSourceMonitor(dataSourceMonitorRegistryService); Assert.assertEquals(remainingCapacity, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); for (MockDataSourceMonitor mockMonitor : mockDataSourceMonitors) { mockMonitor.close(); } Assert.assertEquals(0, dataSourceMonitorRegistryService.getPluginMonitorWrapperList().size()); } private MockDataSourceMonitor[] createMockDataSourceMonitor(DataSourceMonitorRegistryService dataSourceMonitorRegistry, int remainingCapacity) { MockDataSourceMonitor[] mockDataSourceMonitors = new MockDataSourceMonitor[remainingCapacity]; for (int i = 0; i < remainingCapacity; i++) { MockDataSourceMonitor mock = new MockDataSourceMonitor(); boolean register = dataSourceMonitorRegistry.register(mock); Assert.assertTrue(register); mockDataSourceMonitors[i] = mock; } return mockDataSourceMonitors; } private void addOverDataSourceMonitor(DataSourceMonitorRegistryService dataSourceMonitorRegistry) { Random random = new Random(System.currentTimeMillis()); int additionalRegisterCount = random.nextInt(10); for (int i = 0; i < additionalRegisterCount; i++) { MockDataSourceMonitor mock = new MockDataSourceMonitor(); boolean register = dataSourceMonitorRegistry.register(mock); Assert.assertFalse(register); } } private static class MockDataSourceMonitor implements DataSourceMonitor { private boolean closed = false; @Override public String getUrl() { return "url"; } @Override public int getActiveConnectionSize() { return 0; } @Override public int getMaxConnectionSize() { return 10; } @Override public ServiceType getServiceType() { return ServiceType.UNKNOWN; } @Override public boolean isDisabled() { return closed; } public void close() { closed = true; } } }