Skip to content

Commit ce69053

Browse files
committed
resolve CR comments
1 parent c1d563c commit ce69053

6 files changed

Lines changed: 88 additions & 117 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package javasabr.rlib.common.util;
2+
3+
import java.io.ByteArrayInputStream;
4+
import java.io.InputStream;
5+
import java.nio.charset.StandardCharsets;
6+
import java.util.Map;
7+
import java.util.Set;
8+
import java.util.stream.Collectors;
9+
10+
public class ResourceClassLoader extends ClassLoader {
11+
12+
private final Map<String, byte[]> resources;
13+
private final Set<String> hiddenResources;
14+
15+
public ResourceClassLoader(Map<String, String> resources, Set<String> hiddenResources) {
16+
super(Thread
17+
.currentThread()
18+
.getContextClassLoader());
19+
this.resources = resources
20+
.entrySet()
21+
.stream()
22+
.collect(Collectors.toUnmodifiableMap(
23+
Map.Entry::getKey,
24+
entry -> entry.getValue().getBytes(StandardCharsets.UTF_8)));
25+
this.hiddenResources = Set.copyOf(hiddenResources);
26+
}
27+
28+
@Override
29+
public InputStream getResourceAsStream(String name) {
30+
byte[] loaded = resources.get(name);
31+
if (loaded != null) {
32+
return new ByteArrayInputStream(loaded);
33+
}
34+
if (hiddenResources.contains(name)) {
35+
return null;
36+
}
37+
return super.getResourceAsStream(name);
38+
}
39+
}

rlib-logger-impl-json/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ dependencies {
77
api projects.rlibLoggerImpl
88
api libs.jackson.core
99
api libs.jackson.databind
10+
testImplementation testFixtures(projects.rlibCommon)
1011
}

rlib-logger-impl-json/src/test/java/javasabr/rlib/logger/impl/config/loader/json/JsonLoggerConfigLoaderTest.java

Lines changed: 26 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,25 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.assertj.core.api.Assertions.assertThatThrownBy;
55

6-
import java.io.ByteArrayInputStream;
7-
import java.io.InputStream;
8-
import java.nio.charset.StandardCharsets;
96
import java.util.Map;
107
import java.util.Optional;
8+
import java.util.Set;
119
import java.util.function.Supplier;
12-
import java.util.stream.Collectors;
1310
import javasabr.rlib.collections.array.ArrayFactory;
1411
import javasabr.rlib.collections.array.MutableArray;
12+
import javasabr.rlib.common.util.ResourceClassLoader;
1513
import javasabr.rlib.logger.api.Logger;
1614
import javasabr.rlib.logger.api.LoggerLevel;
1715
import javasabr.rlib.logger.impl.DefaultLoggerService;
1816
import javasabr.rlib.logger.impl.config.LoggerConfig;
1917
import javasabr.rlib.logger.impl.config.consumer.impl.CustomLogMessageConsumer;
20-
import javasabr.rlib.logger.impl.config.render.LogMessageRender;
21-
import javasabr.rlib.logger.impl.config.render.impl.CustomLogMessageRender;
22-
import javasabr.rlib.logger.impl.config.render.impl.SimpleLogMessageRender;
2318
import javasabr.rlib.logger.impl.config.loader.json.dto.JsonLoggerConfigDto.ConsumerDto;
2419
import javasabr.rlib.logger.impl.config.loader.json.dto.JsonLoggerConfigDto.ConsumerType;
2520
import javasabr.rlib.logger.impl.config.loader.json.dto.JsonLoggerConfigDto.RenderDto;
2621
import javasabr.rlib.logger.impl.config.loader.json.dto.JsonLoggerConfigDto.RenderType;
22+
import javasabr.rlib.logger.impl.config.render.LogMessageRender;
23+
import javasabr.rlib.logger.impl.config.render.impl.CustomLogMessageRender;
24+
import javasabr.rlib.logger.impl.config.render.impl.SimpleLogMessageRender;
2725
import lombok.AccessLevel;
2826
import lombok.experimental.FieldDefaults;
2927
import org.junit.jupiter.api.AfterEach;
@@ -190,7 +188,9 @@ void shouldPreferTestJsonOverMainJson() {
190188
var loader = new JsonLoggerConfigLoader();
191189
var contextClassLoader = new ResourceClassLoader(Map.of(
192190
JsonLoggerConfigLoader.FILE_TEST, buildRootOnlyConfigJson("TRACE"),
193-
JsonLoggerConfigLoader.FILE_MAIN, buildRootOnlyConfigJson("ERROR")));
191+
JsonLoggerConfigLoader.FILE_MAIN, buildRootOnlyConfigJson("ERROR")), Set.of(
192+
JsonLoggerConfigLoader.FILE_TEST,
193+
JsonLoggerConfigLoader.FILE_MAIN));
194194

195195
// when:
196196
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -216,7 +216,9 @@ void shouldFallbackToMainJsonWhenTestMissing() {
216216
// given:
217217
var loader = new JsonLoggerConfigLoader();
218218
var contextClassLoader = new ResourceClassLoader(Map.of(
219-
JsonLoggerConfigLoader.FILE_MAIN, buildRootOnlyConfigJson("ERROR")));
219+
JsonLoggerConfigLoader.FILE_MAIN, buildRootOnlyConfigJson("ERROR")), Set.of(
220+
JsonLoggerConfigLoader.FILE_TEST,
221+
JsonLoggerConfigLoader.FILE_MAIN));
220222

221223
// when:
222224
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -241,7 +243,9 @@ void shouldFallbackToMainJsonWhenTestMissing() {
241243
void shouldReturnEmptyWhenNoJsonConfigFound() {
242244
// given:
243245
var loader = new JsonLoggerConfigLoader();
244-
var contextClassLoader = new ResourceClassLoader(Map.of());
246+
var contextClassLoader = new ResourceClassLoader(Map.of(), Set.of(
247+
JsonLoggerConfigLoader.FILE_TEST,
248+
JsonLoggerConfigLoader.FILE_MAIN));
245249

246250
// when:
247251
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -255,7 +259,9 @@ void shouldThrowWhenJsonContentIsMalformed() {
255259
// given:
256260
var loader = new JsonLoggerConfigLoader();
257261
var contextClassLoader = new ResourceClassLoader(Map.of(
258-
JsonLoggerConfigLoader.FILE_TEST, "{ malformed-json"));
262+
JsonLoggerConfigLoader.FILE_TEST, "{ malformed-json"), Set.of(
263+
JsonLoggerConfigLoader.FILE_TEST,
264+
JsonLoggerConfigLoader.FILE_MAIN));
259265

260266
// when/then:
261267
assertThatThrownBy(() -> withContextClassLoader(contextClassLoader, loader::tryToLoad))
@@ -273,7 +279,9 @@ void shouldThrowWhenConsumerReferencesUnknownRender() {
273279
"consumers": [{"name":"consumer1","type":"CONSOLE","render":"unknown-render"}],
274280
"loggers": [{"name":"ROOT","level":"INFO","consumers":["consumer1"]}]
275281
}
276-
"""));
282+
"""), Set.of(
283+
JsonLoggerConfigLoader.FILE_TEST,
284+
JsonLoggerConfigLoader.FILE_MAIN));
277285

278286
// when/then:
279287
assertThatThrownBy(() -> withContextClassLoader(contextClassLoader, loader::tryToLoad))
@@ -290,7 +298,9 @@ void shouldThrowWhenCustomRenderClassIsMissing() {
290298
{
291299
"renders": [{"name":"render1","type":"CUSTOM"}]
292300
}
293-
"""));
301+
"""), Set.of(
302+
JsonLoggerConfigLoader.FILE_TEST,
303+
JsonLoggerConfigLoader.FILE_MAIN));
294304

295305
// when/then:
296306
assertThatThrownBy(() -> withContextClassLoader(contextClassLoader, loader::tryToLoad))
@@ -308,7 +318,9 @@ void shouldThrowWhenCustomConsumerClassIsMissing() {
308318
"renders": [{"name":"render1","type":"SIMPLE"}],
309319
"consumers": [{"name":"consumer1","type":"CUSTOM","render":"render1"}]
310320
}
311-
"""));
321+
"""), Set.of(
322+
JsonLoggerConfigLoader.FILE_TEST,
323+
JsonLoggerConfigLoader.FILE_MAIN));
312324

313325
// when/then:
314326
assertThatThrownBy(() -> withContextClassLoader(contextClassLoader, loader::tryToLoad))
@@ -402,33 +414,4 @@ private static <T> T withContextClassLoader(ClassLoader contextClassLoader, Supp
402414
currentThread.setContextClassLoader(previousClassLoader);
403415
}
404416
}
405-
406-
private static class ResourceClassLoader extends ClassLoader {
407-
408-
private final Map<String, byte[]> resources;
409-
410-
private ResourceClassLoader(Map<String, String> resources) {
411-
super(Thread
412-
.currentThread()
413-
.getContextClassLoader());
414-
this.resources = resources
415-
.entrySet()
416-
.stream()
417-
.collect(Collectors.toUnmodifiableMap(
418-
Map.Entry::getKey,
419-
entry -> entry.getValue().getBytes(StandardCharsets.UTF_8)));
420-
}
421-
422-
@Override
423-
public InputStream getResourceAsStream(String name) {
424-
byte[] loaded = resources.get(name);
425-
if (loaded != null) {
426-
return new ByteArrayInputStream(loaded);
427-
}
428-
if (JsonLoggerConfigLoader.FILE_TEST.equals(name) || JsonLoggerConfigLoader.FILE_MAIN.equals(name)) {
429-
return null;
430-
}
431-
return super.getResourceAsStream(name);
432-
}
433-
}
434417
}

rlib-logger-impl-json/src/test/java/javasabr/rlib/logger/impl/config/loader/json/JsonLoggerConfigLoadersProviderTest.java

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5-
import java.io.ByteArrayInputStream;
6-
import java.io.InputStream;
7-
import java.nio.charset.StandardCharsets;
85
import java.util.Map;
96
import java.util.ServiceLoader;
7+
import java.util.Set;
108
import java.util.function.Supplier;
11-
import java.util.stream.Collectors;
9+
import javasabr.rlib.common.util.ResourceClassLoader;
1210
import javasabr.rlib.logger.api.Logger;
1311
import javasabr.rlib.logger.impl.DefaultLoggerService;
1412
import javasabr.rlib.logger.impl.config.loader.LoggerConfigResolver;
@@ -46,7 +44,11 @@ void shouldResolveJsonConfigThroughResolverWhenPropertiesMissing() {
4644
"consumers": [{"name":"consumer1","type":"CONSOLE","render":"render1"}],
4745
"loggers": [{"name":"ROOT","level":"TRACE","consumers":["consumer1"]}]
4846
}
49-
"""));
47+
"""), Set.of(
48+
JsonLoggerConfigLoader.FILE_TEST,
49+
JsonLoggerConfigLoader.FILE_MAIN,
50+
PropertyLoggerConfigLoader.FILE_TEST,
51+
PropertyLoggerConfigLoader.FILE_MAIN));
5052

5153
// when:
5254
var config = withContextClassLoader(contextClassLoader, LoggerConfigResolver::load);
@@ -72,36 +74,4 @@ private static <T> T withContextClassLoader(ClassLoader contextClassLoader, Supp
7274
currentThread.setContextClassLoader(previousClassLoader);
7375
}
7476
}
75-
76-
private static class ResourceClassLoader extends ClassLoader {
77-
78-
private final Map<String, byte[]> resources;
79-
80-
private ResourceClassLoader(Map<String, String> resources) {
81-
super(Thread
82-
.currentThread()
83-
.getContextClassLoader());
84-
this.resources = resources
85-
.entrySet()
86-
.stream()
87-
.collect(Collectors.toUnmodifiableMap(
88-
Map.Entry::getKey,
89-
entry -> entry.getValue().getBytes(StandardCharsets.UTF_8)));
90-
}
91-
92-
@Override
93-
public InputStream getResourceAsStream(String name) {
94-
byte[] loaded = resources.get(name);
95-
if (loaded != null) {
96-
return new ByteArrayInputStream(loaded);
97-
}
98-
if (JsonLoggerConfigLoader.FILE_TEST.equals(name) ||
99-
JsonLoggerConfigLoader.FILE_MAIN.equals(name) ||
100-
PropertyLoggerConfigLoader.FILE_TEST.equals(name) ||
101-
PropertyLoggerConfigLoader.FILE_MAIN.equals(name)) {
102-
return null;
103-
}
104-
return super.getResourceAsStream(name);
105-
}
106-
}
10777
}

rlib-logger-impl/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ plugins {
66
dependencies {
77
api projects.rlibCommon
88
api projects.rlibCollections
9+
testImplementation testFixtures(projects.rlibCommon)
910
}

rlib-logger-impl/src/test/java/javasabr/rlib/logger/impl/config/loader/impl/PropertyLoggerConfigLoaderTest.java

Lines changed: 14 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.assertj.core.api.Assertions.assertThatThrownBy;
55

6-
import java.io.ByteArrayInputStream;
76
import java.io.IOException;
8-
import java.io.InputStream;
9-
import java.nio.charset.StandardCharsets;
107
import java.util.Map;
118
import java.util.Optional;
129
import java.util.Properties;
10+
import java.util.Set;
1311
import java.util.function.Supplier;
14-
import java.util.stream.Collectors;
1512
import javasabr.rlib.collections.array.Array;
1613
import javasabr.rlib.collections.array.UnsafeArray;
14+
import javasabr.rlib.common.util.ResourceClassLoader;
1715
import javasabr.rlib.logger.api.Logger;
1816
import javasabr.rlib.logger.api.LoggerLevel;
1917
import javasabr.rlib.logger.impl.DefaultLogger;
@@ -116,7 +114,9 @@ void shouldPreferTestPropertiesOverMainProperties() {
116114
var loader = new PropertyLoggerConfigLoader();
117115
var contextClassLoader = new ResourceClassLoader(Map.of(
118116
PropertyLoggerConfigLoader.FILE_TEST, "logger.level.ROOT=TRACE",
119-
PropertyLoggerConfigLoader.FILE_MAIN, "logger.level.ROOT=ERROR"));
117+
PropertyLoggerConfigLoader.FILE_MAIN, "logger.level.ROOT=ERROR"), Set.of(
118+
PropertyLoggerConfigLoader.FILE_TEST,
119+
PropertyLoggerConfigLoader.FILE_MAIN));
120120

121121
// when:
122122
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -142,7 +142,9 @@ void shouldFallbackToMainPropertiesWhenTestMissing() {
142142
// given:
143143
var loader = new PropertyLoggerConfigLoader();
144144
var contextClassLoader = new ResourceClassLoader(Map.of(
145-
PropertyLoggerConfigLoader.FILE_MAIN, "logger.level.ROOT=ERROR"));
145+
PropertyLoggerConfigLoader.FILE_MAIN, "logger.level.ROOT=ERROR"), Set.of(
146+
PropertyLoggerConfigLoader.FILE_TEST,
147+
PropertyLoggerConfigLoader.FILE_MAIN));
146148

147149
// when:
148150
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -167,7 +169,9 @@ void shouldFallbackToMainPropertiesWhenTestMissing() {
167169
void shouldReturnEmptyWhenNoPropertiesFound() {
168170
// given:
169171
var loader = new PropertyLoggerConfigLoader();
170-
var contextClassLoader = new ResourceClassLoader(Map.of());
172+
var contextClassLoader = new ResourceClassLoader(Map.of(), Set.of(
173+
PropertyLoggerConfigLoader.FILE_TEST,
174+
PropertyLoggerConfigLoader.FILE_MAIN));
171175

172176
// when:
173177
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -182,7 +186,9 @@ void shouldUseRootLevelForUnconfiguredLogger() {
182186
var loader = new PropertyLoggerConfigLoader();
183187
var contextClassLoader = new ResourceClassLoader(Map.of(
184188
PropertyLoggerConfigLoader.FILE_MAIN,
185-
"logger.level.ROOT=WARNING\nlogger.level.configured.logger=TRACE"));
189+
"logger.level.ROOT=WARNING\nlogger.level.configured.logger=TRACE"), Set.of(
190+
PropertyLoggerConfigLoader.FILE_TEST,
191+
PropertyLoggerConfigLoader.FILE_MAIN));
186192

187193
// when:
188194
Optional<LoggerConfig> loadedConfig = withContextClassLoader(contextClassLoader, loader::tryToLoad);
@@ -263,33 +269,4 @@ private static <T> T withContextClassLoader(ClassLoader contextClassLoader, Supp
263269
currentThread.setContextClassLoader(previousClassLoader);
264270
}
265271
}
266-
267-
private static class ResourceClassLoader extends ClassLoader {
268-
269-
private final Map<String, byte[]> resources;
270-
271-
private ResourceClassLoader(Map<String, String> resources) {
272-
super(Thread
273-
.currentThread()
274-
.getContextClassLoader());
275-
this.resources = resources
276-
.entrySet()
277-
.stream()
278-
.collect(Collectors.toUnmodifiableMap(
279-
Map.Entry::getKey,
280-
entry -> entry.getValue().getBytes(StandardCharsets.UTF_8)));
281-
}
282-
283-
@Override
284-
public InputStream getResourceAsStream(String name) {
285-
byte[] loaded = resources.get(name);
286-
if (loaded != null) {
287-
return new ByteArrayInputStream(loaded);
288-
}
289-
if (PropertyLoggerConfigLoader.FILE_TEST.equals(name) || PropertyLoggerConfigLoader.FILE_MAIN.equals(name)) {
290-
return null;
291-
}
292-
return super.getResourceAsStream(name);
293-
}
294-
}
295272
}

0 commit comments

Comments
 (0)