package org.oransc.policyagent.utils;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+
import java.lang.invoke.MethodHandles;
+import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import org.oransc.policyagent.clients.A1Client;
import org.oransc.policyagent.clients.A1ClientFactory;
+import org.oransc.policyagent.configuration.ApplicationConfig;
import org.oransc.policyagent.repository.PolicyTypes;
import org.oransc.policyagent.repository.Ric;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import reactor.core.publisher.Mono;
public class MockA1ClientFactory extends A1ClientFactory {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<String, MockA1Client> clients = new HashMap<>();
private final PolicyTypes policyTypes;
+ private Duration asynchDelay = Duration.ofSeconds(0);
public MockA1ClientFactory(PolicyTypes policyTypes) {
+ super(mock(ApplicationConfig.class));
this.policyTypes = policyTypes;
}
@Override
- protected A1Client createStdA1ClientImpl(Ric ric) {
- return getOrCreateA1Client(ric.name());
+ public Mono<A1Client> createA1Client(Ric ric) {
+ return Mono.just(getOrCreateA1Client(ric.name()));
}
public MockA1Client getOrCreateA1Client(String ricName) {
if (!clients.containsKey(ricName)) {
logger.debug("Creating client for RIC: {}", ricName);
- MockA1Client client = new MockA1Client(policyTypes);
+ MockA1Client client = spy(new MockA1Client(policyTypes, asynchDelay));
clients.put(ricName, client);
}
return clients.get(ricName);
}
+ /**
+ * Simulate network latency. The REST responses will be generated by separate
+ * threads
+ *
+ * @param delay the delay between the request and the response
+ */
+ public void setResponseDelay(Duration delay) {
+ this.asynchDelay = delay;
+ }
+
+ public void reset() {
+ this.asynchDelay = Duration.ofSeconds(0);
+ clients.clear();
+ }
+
}