/** * 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 org.apache.ambari.server.view; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import java.io.File; import java.net.URL; import org.apache.ambari.server.view.configuration.ViewConfig; import org.junit.Test; import junit.framework.Assert; /** * ViewClassLoader test. */ public class ViewClassLoaderTest { @Test public void testGetResource() throws Exception { ClassLoader parentClassLoader = createMock(ClassLoader.class); URL parentResource = new File("parent-resource").toURI().toURL(); ViewConfig viewConfig = createNiceMock(ViewConfig.class); expect(parentClassLoader.getResource("parent-resource")).andReturn(parentResource).once(); replay(parentClassLoader, viewConfig); File file = new File("./src/test/resources"); URL testURL = file.toURI().toURL(); URL[] urls = new URL[]{testURL}; ViewClassLoader classLoader = new ViewClassLoader(viewConfig, parentClassLoader, urls); URL url = classLoader.getResource("ambari.properties"); Assert.assertNotNull(url); url = classLoader.getResource("parent-resource"); Assert.assertNotNull(url); Assert.assertSame(parentResource, url); verify(parentClassLoader, viewConfig); } @Test public void testLoadClass() throws Exception { TestClassLoader parentClassLoader = createMock(TestClassLoader.class); Class parentClass = Object.class; ViewConfig viewConfig = createNiceMock(ViewConfig.class); expect(parentClassLoader.getPackage("org.apache.ambari.server.view")).andReturn(null).anyTimes(); expect(parentClassLoader.loadClass("java.lang.Object")).andReturn(parentClass).anyTimes(); expect(parentClassLoader.loadClass("ParentClass")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("org.apache.ambari.server.controller.spi.ResourceProvider")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("org.apache.ambari.view.ViewContext")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("javax.xml.parsers.SAXParserFactory")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("com.google.inject.AbstractModule")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("org.slf4j.LoggerFactory")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("com.sun.jersey.api.ConflictException")).andReturn(parentClass).once(); expect(parentClassLoader.loadClass("org.apache.velocity.VelocityContext")).andReturn(parentClass).once(); replay(parentClassLoader, viewConfig); File file = new File("./target/test-classes"); URL testURL = file.toURI().toURL(); URL[] urls = new URL[]{testURL}; ViewClassLoader classLoader = new ViewClassLoader(viewConfig, parentClassLoader, urls); // should be loaded by parent loader Class clazz = classLoader.loadClass("ParentClass"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("org.apache.ambari.server.controller.spi.ResourceProvider"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("org.apache.ambari.view.ViewContext"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("javax.xml.parsers.SAXParserFactory"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("com.google.inject.AbstractModule"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("org.slf4j.LoggerFactory"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("com.sun.jersey.api.ConflictException"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); clazz = classLoader.loadClass("org.apache.velocity.VelocityContext"); Assert.assertNotNull(clazz); Assert.assertSame(parentClass, clazz); verify(parentClassLoader, viewConfig); } public class TestClassLoader extends ClassLoader { @Override public Package getPackage(String s) { return super.getPackage(s); } } }