1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.logging.tccl.log;
19
20 import java.net.URL;
21
22 import junit.framework.Test;
23 import junit.framework.TestCase;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogConfigurationException;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.commons.logging.PathableClassLoader;
29 import org.apache.commons.logging.PathableTestSuite;
30
31
32
33
34
35 public class TcclDisabledTestCase extends TestCase {
36
37 public static final String MY_LOG_PKG =
38 "org.apache.commons.logging.tccl.custom";
39
40 public static final String MY_LOG_IMPL =
41 MY_LOG_PKG + ".MyLog";
42
43
44
45
46 public static Test suite() throws Exception {
47 final Class thisClass = TcclDisabledTestCase.class;
48
49
50
51
52
53 final PathableClassLoader dummy = new PathableClassLoader(null);
54 dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
55 dummy.addLogicalLib("testclasses");
56 dummy.addLogicalLib("commons-logging");
57
58 final String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
59 final URL baseUrl = dummy.findResource(thisClassPath);
60
61
62
63
64
65
66
67 final PathableClassLoader emptyLoader = new PathableClassLoader(null);
68
69 final PathableClassLoader parentLoader = new PathableClassLoader(null);
70 parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
71 parentLoader.addLogicalLib("commons-logging");
72 parentLoader.addLogicalLib("testclasses");
73
74
75 parentLoader.useExplicitLoader(MY_LOG_PKG + ".", emptyLoader);
76
77 final URL propsEnableUrl = new URL(baseUrl, "props_disable_tccl/");
78 parentLoader.addURL(propsEnableUrl);
79
80 final PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
81 tcclLoader.addLogicalLib("testclasses");
82
83 final Class testClass = parentLoader.loadClass(thisClass.getName());
84 return new PathableTestSuite(testClass, tcclLoader);
85 }
86
87
88
89
90 @Override
91 public void setUp() throws Exception {
92 LogFactory.releaseAll();
93 }
94
95
96
97
98 @Override
99 public void tearDown() {
100 LogFactory.releaseAll();
101 }
102
103
104
105
106 public void testLoader() throws Exception {
107
108 final ClassLoader thisClassLoader = this.getClass().getClassLoader();
109 final ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
110
111
112 assertNotSame("tccl not same as test class loader", thisClassLoader, tcclLoader);
113
114
115 try {
116 final Class clazz = thisClassLoader.loadClass(MY_LOG_IMPL);
117 fail("Unexpectedly able to load MyLog via test class class loader");
118 assertNotNull(clazz);
119 } catch (final ClassNotFoundException ex) {
120
121 }
122
123
124 try {
125 final Class clazz = tcclLoader.loadClass(MY_LOG_IMPL);
126 assertNotNull(clazz);
127 } catch (final ClassNotFoundException ex) {
128 fail("Unexpectedly unable to load MyLog via tccl class loader");
129 }
130 }
131
132
133
134
135
136
137
138 public void testTcclLoading() throws Exception {
139 final LogFactory instance = LogFactory.getFactory();
140 assertEquals(
141 "Correct LogFactory loaded",
142 "org.apache.commons.logging.impl.LogFactoryImpl",
143 instance.getClass().getName());
144
145 try {
146 final Log log = instance.getInstance("test");
147 fail("Unexpectedly succeeded in loading a custom Log class"
148 + " that is only accessible via the tccl.");
149 assertNotNull(log);
150 } catch (final LogConfigurationException ex) {
151
152 assertTrue("MyLog not found", ex.getMessage().contains(MY_LOG_IMPL));
153 }
154 }
155 }