/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.core.internal.diagnostic; import com.google.common.collect.Lists; import io.nuun.kernel.api.plugin.context.InitContext; import org.fest.reflect.core.Reflection; import org.junit.Before; import org.junit.Test; import org.mockito.internal.util.reflection.Whitebox; import org.seedstack.coffig.Coffig; import org.seedstack.seed.Application; import org.seedstack.seed.spi.ApplicationProvider; import org.seedstack.seed.diagnostic.spi.DiagnosticDomain; import org.seedstack.seed.diagnostic.spi.DiagnosticInfoCollector; import java.util.AbstractMap; import java.util.Collection; import java.util.HashMap; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * CorePlugin unit test */ public class DiagnosticPluginTest { @DiagnosticDomain("test") private static class TestDiagnosticInfoCollector implements DiagnosticInfoCollector { @Override public Map<String, Object> collect() { return null; } } private DiagnosticPlugin diagnosticPlugin; @Before public void before() { diagnosticPlugin = new DiagnosticPlugin(); Whitebox.setInternalState(diagnosticPlugin, "diagnosticManager", new DiagnosticManagerImpl()); } @Test public void nameTest() { assertThat(diagnosticPlugin.name()).isNotNull(); } @Test public void verify_nativeUnitModule_instance() { Object object = diagnosticPlugin.nativeUnitModule(); assertThat(object).isInstanceOf(DiagnosticModule.class); } @Test public void initPluginTest() { InitContext initContext = mockInitContextForCore(Lists.newArrayList(TestDiagnosticInfoCollector.class)); diagnosticPlugin.init(initContext); @SuppressWarnings("unchecked") Map<String, Class<? extends DiagnosticInfoCollector>> seedModules = Reflection.field("diagnosticInfoCollectorClasses").ofType(Map.class).in(diagnosticPlugin).get(); assertThat(seedModules).containsExactly(new AbstractMap.SimpleImmutableEntry<String, Class<? extends DiagnosticInfoCollector>>("test", TestDiagnosticInfoCollector.class)); } private InitContext mockInitContextForCore(Collection<Class<?>> diagnosticClasses) { InitContext initContext = mock(InitContext.class); Application application = mock(Application.class); Map<Class<?>, Collection<Class<?>>> scannedSubTypesByParentClass = new HashMap<>(); scannedSubTypesByParentClass.put(DiagnosticInfoCollector.class, diagnosticClasses); when(application.getConfiguration()).thenReturn(Coffig.builder().build()); when(initContext.dependency(ApplicationProvider.class)).thenReturn(() -> application); when(initContext.scannedSubTypesByParentClass()).thenReturn(scannedSubTypesByParentClass); return initContext; } }