package com.sequenceiq.cloudbreak.cloud.handler;
import javax.inject.Inject;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.sequenceiq.cloudbreak.cloud.event.CloudPlatformRequest;
import com.sequenceiq.cloudbreak.cloud.handler.testcontext.TestApplicationContext;
import reactor.bus.Event;
import reactor.bus.EventBus;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = TestApplicationContext.class)
public abstract class AbstractComponentTest<T> {
@Inject
private EventBus eb;
@Inject
private ParameterGenerator g;
protected T sendCloudRequest() {
CloudPlatformRequest request = getRequest();
return sendCloudRequest(request);
}
protected T sendCloudRequest(CloudPlatformRequest request) {
eb.notify(getTopicName(), Event.wrap(request));
try {
return (T) request.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
protected abstract String getTopicName();
protected abstract CloudPlatformRequest getRequest();
protected ParameterGenerator g() {
return g;
}
}