-
Notifications
You must be signed in to change notification settings - Fork 215
/
DefaultConnectivitySignalEnrichmentProviderTest.java
130 lines (113 loc) · 5.88 KB
/
DefaultConnectivitySignalEnrichmentProviderTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
* Copyright (c) 2022 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.connectivity.service.mapping;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import java.time.Duration;
import org.eclipse.ditto.connectivity.model.ConnectionId;
import org.eclipse.ditto.internal.models.signalenrichment.ByRoundTripSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.DittoCachingSignalEnrichmentFacade;
import org.eclipse.ditto.internal.models.signalenrichment.SignalEnrichmentFacade;
import org.eclipse.ditto.internal.utils.config.ScopedConfig;
import org.junit.After;
import org.junit.Test;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigException;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
import akka.actor.ActorSystem;
import akka.testkit.javadsl.TestKit;
/**
* Tests {@link DefaultConnectivitySignalEnrichmentProvider}.
*/
public final class DefaultConnectivitySignalEnrichmentProviderTest {
private static final Config CONFIG = ConfigFactory.empty()
.withValue("ditto.extensions.signal-enrichment-provider.extension-class",
ConfigValueFactory.fromAnyRef(DefaultConnectivitySignalEnrichmentProvider.class.getCanonicalName()))
.withValue("ditto.extensions.signal-enrichment-provider.extension-config.ask-timeout",
ConfigValueFactory.fromAnyRef(Duration.ofDays(1L)))
.withValue("ditto.extensions.signal-enrichment-provider.extension-config.cache.enabled",
ConfigValueFactory.fromAnyRef(false));
private ActorSystem actorSystem;
private void createActorSystem(final Config config) {
shutdownActorSystem();
actorSystem = ActorSystem.create(getClass().getSimpleName(), config);
}
@After
public void shutdownActorSystem() {
if (actorSystem != null) {
TestKit.shutdownActorSystem(actorSystem);
}
}
@Test
public void loadProvider() {
createActorSystem(CONFIG);
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
final var underTest = ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig);
assertThat(underTest).isInstanceOf(DefaultConnectivitySignalEnrichmentProvider.class);
}
@Test
public void withDisabledCaching() {
createActorSystem(CONFIG);
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
final var underTest = ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig);
final SignalEnrichmentFacade facade = underTest.getFacade(ConnectionId.generateRandom());
assertThat(facade).isInstanceOf(ByRoundTripSignalEnrichmentFacade.class);
}
@Test
public void withEnabledCaching() {
final Config dispatcherConfig = ConfigFactory.parseString("signal-enrichment-cache-dispatcher {\n" +
" type = Dispatcher\n" +
" executor = \"fork-join-executor\"\n" +
" fork-join-executor {\n" +
" parallelism-min = 4\n" +
" parallelism-factor = 3.0\n" +
" parallelism-max = 32\n" +
" }\n" +
" throughput = 5\n" +
"}");
createActorSystem(
withValue("ditto.extensions.signal-enrichment-provider.extension-config.cache.enabled", "true")
.withFallback(dispatcherConfig));
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
final var underTest = ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig);
final SignalEnrichmentFacade facade = underTest.getFacade(ConnectionId.generateRandom());
assertThat(facade).isInstanceOf(DittoCachingSignalEnrichmentFacade.class);
}
@Test
public void loadProviderWithNonexistentClass() {
createActorSystem(withValue("ditto.extensions.signal-enrichment-provider",
getClass().getCanonicalName() + "_NonexistentClass"));
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
assertThatExceptionOfType(ClassNotFoundException.class)
.isThrownBy(() -> ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig));
}
@Test
public void loadProviderWithIncorrectClass() {
createActorSystem(withValue("ditto.extensions.signal-enrichment-provider", "java.lang.Object"));
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
assertThatExceptionOfType(ClassCastException.class)
.isThrownBy(() -> ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig));
}
@Test
public void loadProviderWithIncorrectConfig() {
createActorSystem(withValue("ditto.extensions.signal-enrichment-provider.extension-config.ask-timeout",
"This is not a duration"));
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(actorSystem.settings().config());
assertThatExceptionOfType(ConfigException.class)
.isThrownBy(() -> ConnectivitySignalEnrichmentProvider.get(actorSystem, dittoExtensionsConfig));
}
private Config withValue(final String key, final String value) {
return CONFIG.withValue(key, ConfigValueFactory.fromAnyRef(value));
}
}