/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.config.spring; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.api.lifecycle.Initialisable; import org.mule.runtime.api.lifecycle.InitialisationException; import org.mule.tck.junit4.AbstractMuleTestCase; import org.mule.tck.size.SmallTest; import java.util.LinkedHashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; @SmallTest @RunWith(MockitoJUnitRunner.class) public class SpringLifecycleCallbackTestCase extends AbstractMuleTestCase { private SpringRegistryLifecycleManager springRegistryLifecycleManager; @Mock private SpringRegistry springRegistry; @Mock private MuleContext muleContext; private SpringLifecycleCallback callback; @Before public void before() { springRegistryLifecycleManager = new SpringRegistryLifecycleManager("id", springRegistry, muleContext); springRegistryLifecycleManager.registerPhases(); callback = new SpringLifecycleCallback(springRegistryLifecycleManager); } @Test public void phaseAppliesInDependencyOrder() throws Exception { Map<String, Initialisable> objects = new LinkedHashMap<>(); for (int i = 1; i <= 5; i++) { final String key = String.valueOf(i); objects.put(key, newInitialisable()); } Map<String, ?> childsOf1 = new LinkedHashMap<>(objects); childsOf1.remove("1"); childsOf1.remove("4"); childsOf1.remove("5"); Map<String, Object> childsOf4 = new LinkedHashMap<>(); childsOf4.put("5", objects.get("5")); when(springRegistry.getDependencies("1")).thenReturn((Map<String, Object>) childsOf1); when(springRegistry.getDependencies("4")).thenReturn(childsOf4); when(springRegistry.lookupEntriesForLifecycle(Initialisable.class)).thenReturn(objects); InOrder inOrder = inOrder(objects.values().toArray()); callback.onTransition(Initialisable.PHASE_NAME, springRegistry); verifyInitialisation(inOrder, objects, "2", "3", "1", "5", "4"); } private void verifyInitialisation(InOrder inOrder, Map<String, Initialisable> objects, String... keys) throws InitialisationException { for (String key : keys) { inOrder.verify(objects.get(key)).initialise(); } } private Initialisable newInitialisable() throws Exception { return mock(Initialisable.class); } }