/* * 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.module.artifact.classloader; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mule.runtime.module.artifact.classloader.ParentFirstLookupStrategy.PARENT_FIRST; import org.mule.runtime.module.artifact.descriptor.ArtifactDescriptor; import org.mule.tck.junit4.AbstractMuleTestCase; import org.mule.tck.size.SmallTest; import java.net.URL; import org.junit.Before; import org.junit.Test; @SmallTest public class TrackingArtifactClassLoaderFactoryTestCase extends AbstractMuleTestCase { private static final String ARTIFACT_ID = "testId"; private static final String ARTIFACT_NAME = "test"; private ArtifactClassLoaderManager artifactClassLoaderManager; private ArtifactClassLoaderFactory<ArtifactDescriptor> delegateFactory; private TrackingArtifactClassLoaderFactory<ArtifactDescriptor> factory; private ArtifactClassLoader parent; private ArtifactDescriptor descriptor; private ArtifactClassLoader classLoader; private ClassLoaderLookupPolicy lookupPolicy; @Before public void setUp() throws Exception { artifactClassLoaderManager = mock(ArtifactClassLoaderManager.class); delegateFactory = mock(ArtifactClassLoaderFactory.class); factory = new TrackingArtifactClassLoaderFactory<>(artifactClassLoaderManager, delegateFactory); parent = mock(ArtifactClassLoader.class); descriptor = new ArtifactDescriptor(ARTIFACT_NAME); lookupPolicy = mock(ClassLoaderLookupPolicy.class); classLoader = new MuleArtifactClassLoader(ARTIFACT_NAME, descriptor, new URL[0], getClass().getClassLoader(), lookupPolicy); when(lookupPolicy.getClassLookupStrategy(any())).thenReturn(PARENT_FIRST); when(delegateFactory.create(ARTIFACT_ID, descriptor, getClass().getClassLoader(), lookupPolicy)).thenReturn(classLoader); } @Test public void registersClassLoader() throws Exception { ArtifactClassLoader artifactClassLoader = factory.create(ARTIFACT_ID, descriptor, getClass().getClassLoader(), lookupPolicy); verify(artifactClassLoaderManager).register(artifactClassLoader); } @Test public void disposesClassLoader() throws Exception { ArtifactClassLoader artifactClassLoader = factory.create(ARTIFACT_ID, descriptor, getClass().getClassLoader(), lookupPolicy); artifactClassLoader.dispose(); verify(artifactClassLoaderManager).unregister(artifactClassLoader.getArtifactId()); } }