/*
* Copyright 2008-2009 LinkedIn, Inc
*
* Licensed 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 voldemort.utils;
import java.io.IOException;
import junit.framework.TestCase;
public class NetworkClassLoaderTest extends TestCase {
NetworkClassLoader networkClassLoader;
@Override
public void setUp() {
networkClassLoader = new NetworkClassLoader(this.getClass().getClassLoader());
}
public void testPrimitiveLoadClass() throws IOException {
// check for simple classes
try {
checkLoadClass(new Integer(1).getClass());
checkLoadClass(new String().getClass());
fail();
} catch(SecurityException e) {
// this is good classLoader fails loading java specific classes.
}
}
public void testUserDefinedClass() throws IOException {
class UserClass {
Integer a;
String b;
@SuppressWarnings("unused")
private void foo() {}
@SuppressWarnings("unused")
public int getA() {
return a;
}
@SuppressWarnings("unused")
public String getB() {
return b;
}
}
checkLoadClass(new UserClass().getClass());
}
private void checkLoadClass(Class<?> cl) throws IOException {
byte[] classBytes = networkClassLoader.dumpClass(cl);
// ObjectInputStream oin = new ObjectInputStream(new
// ByteArrayInputStream(classBytes));
assertEquals("original class should match class after loading.",
cl.getName(),
networkClassLoader.loadClass(cl.getName(), classBytes, 0, classBytes.length)
.getName());
}
}