mirror of https://github.com/longtai-cn/hippo4j
test: Add unit test about plugin manager (#892)
parent
d2f8a5e3ab
commit
f7ce392dbc
@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 cn.hippo4j.core.plugin.manager;
|
||||
|
||||
import cn.hippo4j.core.plugin.*;
|
||||
import lombok.Getter;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* test for {@link DefaultThreadPoolPluginManager}
|
||||
*/
|
||||
public class DefaultThreadPoolPluginManagerTest {
|
||||
|
||||
private DefaultThreadPoolPluginManager manager;
|
||||
|
||||
@Before
|
||||
public void initRegistry() {
|
||||
manager = new DefaultThreadPoolPluginManager();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegister() {
|
||||
manager.register(new TestShutdownAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getAllPlugins().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPlugins() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
manager.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(2, manager.getAllPlugins().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClear() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
manager.clear();
|
||||
Assert.assertTrue(manager.getAllPlugins().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTryRegister() {
|
||||
Assert.assertTrue(manager.tryRegister(new TestExecuteAwarePlugin()));
|
||||
Assert.assertFalse(manager.tryRegister(new TestExecuteAwarePlugin()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsRegistered() {
|
||||
Assert.assertFalse(manager.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(manager.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnregister() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
manager.unregister(TestExecuteAwarePlugin.class.getSimpleName());
|
||||
Assert.assertFalse(manager.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPlugin() {
|
||||
ThreadPoolPlugin plugin = new TestExecuteAwarePlugin();
|
||||
manager.register(plugin);
|
||||
Assert.assertSame(plugin, manager.getPlugin(plugin.getId()).orElse(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRejectedAwarePluginList() {
|
||||
manager.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getRejectedAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetShutdownAwarePluginList() {
|
||||
manager.register(new TestShutdownAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getShutdownAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskAwarePluginList() {
|
||||
manager.register(new TestTaskAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getTaskAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExecuteAwarePluginList() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getExecuteAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPluginsOfType() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
manager.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(1, manager.getAllPluginsOfType(TestExecuteAwarePlugin.class).size());
|
||||
Assert.assertEquals(1, manager.getAllPluginsOfType(TestRejectedAwarePlugin.class).size());
|
||||
Assert.assertEquals(2, manager.getAllPluginsOfType(ThreadPoolPlugin.class).size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPluginRuntimes() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
manager.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(2, manager.getAllPluginRuntimes().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPluginRuntime() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(manager.getRuntime(TestExecuteAwarePlugin.class.getSimpleName()).isPresent());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPluginOfType() {
|
||||
manager.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(manager.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), TestExecuteAwarePlugin.class).isPresent());
|
||||
Assert.assertTrue(manager.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), ThreadPoolPlugin.class).isPresent());
|
||||
Assert.assertFalse(manager.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), RejectedAwarePlugin.class).isPresent());
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestTaskAwarePlugin implements TaskAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestExecuteAwarePlugin implements ExecuteAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestRejectedAwarePlugin implements RejectedAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestShutdownAwarePlugin implements ShutdownAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 cn.hippo4j.core.plugin.manager;
|
||||
|
||||
import cn.hippo4j.core.executor.ExtensibleThreadPoolExecutor;
|
||||
import cn.hippo4j.core.plugin.impl.*;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* test for {@link DefaultThreadPoolPluginRegistrar}
|
||||
*/
|
||||
public class DefaultThreadPoolPluginRegistrarTest {
|
||||
|
||||
@Test
|
||||
public void testGetId() {
|
||||
ThreadPoolPluginRegistrar registrar = new DefaultThreadPoolPluginRegistrar();
|
||||
Assert.assertEquals(registrar.getClass().getSimpleName(), registrar.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoRegister() {
|
||||
ThreadPoolPluginRegistrar registrar = new DefaultThreadPoolPluginRegistrar(100L, 100L);
|
||||
ThreadPoolPluginManager manager = new DefaultThreadPoolPluginManager();
|
||||
ExtensibleThreadPoolExecutor executor = new ExtensibleThreadPoolExecutor(
|
||||
"test", manager,
|
||||
5, 5, 1000L, TimeUnit.MILLISECONDS,
|
||||
new ArrayBlockingQueue<>(1), Thread::new, new ThreadPoolExecutor.AbortPolicy());
|
||||
registrar.doRegister(executor);
|
||||
|
||||
Assert.assertTrue(manager.getPlugin(TaskDecoratorPlugin.PLUGIN_NAME).isPresent());
|
||||
Assert.assertTrue(manager.getPlugin(TaskTimeoutNotifyAlarmPlugin.PLUGIN_NAME).isPresent());
|
||||
Assert.assertTrue(manager.getPlugin(TaskRejectCountRecordPlugin.PLUGIN_NAME).isPresent());
|
||||
Assert.assertTrue(manager.getPlugin(TaskRejectNotifyAlarmPlugin.PLUGIN_NAME).isPresent());
|
||||
Assert.assertTrue(manager.getPlugin(ThreadPoolExecutorShutdownPlugin.PLUGIN_NAME).isPresent());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 cn.hippo4j.core.plugin.manager;
|
||||
|
||||
import cn.hippo4j.core.plugin.ThreadPoolPlugin;
|
||||
import lombok.Getter;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* test for {@link cn.hippo4j.core.plugin.manager.EmptyThreadPoolPluginManager}
|
||||
*/
|
||||
public class EmptyThreadPoolPluginManagerTest {
|
||||
|
||||
private final ThreadPoolPluginManager manager = EmptyThreadPoolPluginManager.INSTANCE;
|
||||
|
||||
@Test
|
||||
public void testEmpty() {
|
||||
Assert.assertSame(manager, ThreadPoolPluginManager.empty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPlugins() {
|
||||
Assert.assertEquals(Collections.emptyList(), manager.getAllPluginRuntimes());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClear() {
|
||||
manager.clear();
|
||||
Assert.assertTrue(isEmpty(manager));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegister() {
|
||||
manager.register(new TestPlugin());
|
||||
Assert.assertTrue(isEmpty(manager));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTryRegister() {
|
||||
Assert.assertFalse(manager.tryRegister(new TestPlugin()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsRegistered() {
|
||||
manager.register(new TestPlugin());
|
||||
Assert.assertFalse(manager.isRegistered(TestPlugin.class.getSimpleName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnregister() {
|
||||
manager.register(new TestPlugin());
|
||||
manager.unregister(TestPlugin.class.getSimpleName());
|
||||
Assert.assertTrue(isEmpty(manager));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPlugin() {
|
||||
Assert.assertSame(Optional.empty(), manager.getPlugin(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRejectedAwarePluginList() {
|
||||
Assert.assertEquals(Collections.emptyList(), manager.getRejectedAwarePluginList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetShutdownAwarePluginList() {
|
||||
Assert.assertEquals(Collections.emptyList(), manager.getShutdownAwarePluginList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskAwarePluginList() {
|
||||
Assert.assertEquals(Collections.emptyList(), manager.getTaskAwarePluginList());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExecuteAwarePluginList() {
|
||||
Assert.assertEquals(Collections.emptyList(), manager.getExecuteAwarePluginList());
|
||||
}
|
||||
|
||||
private static boolean isEmpty(ThreadPoolPluginManager manager) {
|
||||
return manager.getAllPlugins().isEmpty();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private static class TestPlugin implements ThreadPoolPlugin {
|
||||
|
||||
private final String id = TestPlugin.class.getSimpleName();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,189 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 cn.hippo4j.core.plugin.manager;
|
||||
|
||||
import cn.hippo4j.core.executor.ExtensibleThreadPoolExecutor;
|
||||
import cn.hippo4j.core.plugin.*;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* test for default method of {@link ThreadPoolPluginSupport}
|
||||
*/
|
||||
public class ThreadPoolPluginSupportTest {
|
||||
|
||||
private final ThreadPoolPluginManager manager = new DefaultThreadPoolPluginManager();
|
||||
private final ExtensibleThreadPoolExecutor executor = new ExtensibleThreadPoolExecutor(
|
||||
"test", manager,
|
||||
5, 5, 1000L, TimeUnit.MILLISECONDS,
|
||||
new ArrayBlockingQueue<>(1), Thread::new, new ThreadPoolExecutor.AbortPolicy());
|
||||
private final ThreadPoolPluginSupport support = new TestSupport(executor.getThreadPoolId(), executor, manager);
|
||||
|
||||
@Test
|
||||
public void testGetThreadPoolId() {
|
||||
Assert.assertEquals(executor.getThreadPoolId(), support.getThreadPoolId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetThreadPoolPluginManager() {
|
||||
Assert.assertEquals(manager, support.getThreadPoolPluginManager());
|
||||
}
|
||||
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
private static class TestSupport implements ThreadPoolPluginSupport {
|
||||
|
||||
private final String threadPoolId;
|
||||
private final ExtensibleThreadPoolExecutor threadPoolExecutor;
|
||||
private final ThreadPoolPluginManager threadPoolPluginManager;
|
||||
}
|
||||
|
||||
// ================ default delegate method ================
|
||||
|
||||
@Test
|
||||
public void testRegister() {
|
||||
support.register(new TestShutdownAwarePlugin());
|
||||
Assert.assertEquals(1, support.getAllPlugins().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPlugins() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
support.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(2, support.getAllPlugins().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClear() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
support.clear();
|
||||
Assert.assertTrue(support.getAllPlugins().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTryRegister() {
|
||||
Assert.assertTrue(support.tryRegister(new TestExecuteAwarePlugin()));
|
||||
Assert.assertFalse(support.tryRegister(new TestExecuteAwarePlugin()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsRegistered() {
|
||||
Assert.assertFalse(support.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(support.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnregister() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
support.unregister(TestExecuteAwarePlugin.class.getSimpleName());
|
||||
Assert.assertFalse(support.isRegistered(TestExecuteAwarePlugin.class.getSimpleName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPlugin() {
|
||||
ThreadPoolPlugin plugin = new TestExecuteAwarePlugin();
|
||||
support.register(plugin);
|
||||
Assert.assertSame(plugin, support.getPlugin(plugin.getId()).orElse(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRejectedAwarePluginList() {
|
||||
support.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(1, support.getRejectedAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetShutdownAwarePluginList() {
|
||||
support.register(new TestShutdownAwarePlugin());
|
||||
Assert.assertEquals(1, support.getShutdownAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskAwarePluginList() {
|
||||
support.register(new TestTaskAwarePlugin());
|
||||
Assert.assertEquals(1, support.getTaskAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetExecuteAwarePluginList() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertEquals(1, support.getExecuteAwarePluginList().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPluginsOfType() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
support.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(1, support.getAllPluginsOfType(TestExecuteAwarePlugin.class).size());
|
||||
Assert.assertEquals(1, support.getAllPluginsOfType(TestRejectedAwarePlugin.class).size());
|
||||
Assert.assertEquals(2, support.getAllPluginsOfType(ThreadPoolPlugin.class).size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllPluginRuntimes() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
support.register(new TestRejectedAwarePlugin());
|
||||
Assert.assertEquals(2, support.getAllPluginRuntimes().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPluginRuntime() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(support.getRuntime(TestExecuteAwarePlugin.class.getSimpleName()).isPresent());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPluginOfType() {
|
||||
support.register(new TestExecuteAwarePlugin());
|
||||
Assert.assertTrue(support.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), TestExecuteAwarePlugin.class).isPresent());
|
||||
Assert.assertTrue(support.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), ThreadPoolPlugin.class).isPresent());
|
||||
Assert.assertFalse(support.getPluginOfType(TestExecuteAwarePlugin.class.getSimpleName(), RejectedAwarePlugin.class).isPresent());
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestTaskAwarePlugin implements TaskAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestExecuteAwarePlugin implements ExecuteAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestRejectedAwarePlugin implements RejectedAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private final static class TestShutdownAwarePlugin implements ShutdownAwarePlugin {
|
||||
|
||||
private final String id = this.getClass().getSimpleName();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue