/**
* 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);
}
}
}