Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions src/main/java/org/ohdsi/webapi/info/InfoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,15 @@
@RequestMapping("/info")
public class InfoService {

private final Info info;
private final String version;
private final BuildInfo buildInfo;
private final List<ConfigurationInfo> configurationInfoList;

public InfoService(BuildProperties buildProperties, BuildInfo buildInfo, List<ConfigurationInfo> configurationInfoList) {

String version = getVersion(buildProperties);

this.info = new Info(
version,
buildInfo,
configurationInfoList.stream().collect(Collectors.toMap(ConfigurationInfo::getKey, ConfigurationInfo::getProperties))
);
this.version = getVersion(buildProperties);
this.buildInfo = buildInfo;
this.configurationInfoList = configurationInfoList;
}

/**
Expand All @@ -53,7 +51,11 @@ public InfoService(BuildProperties buildProperties, BuildInfo buildInfo, List<Co
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public Info getInfo() {

return info;
return new Info(
version,
buildInfo,
configurationInfoList.stream().collect(Collectors.toMap(ConfigurationInfo::getKey, ConfigurationInfo::getProperties))
);
}

private String getVersion(BuildProperties buildProperties) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,35 @@
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Component
public class PluginsConfigurationInfo extends ConfigurationInfo {
private static final String KEY = "plugins";

private final List<WebApiPlugin> plugins;
private final Boolean atlasgisEnabled;

public PluginsConfigurationInfo(
@Autowired(required = false) List<WebApiPlugin> plugins,
@Value("${atlasgis.enabled}") Boolean atlasgisEnabled) {
if (plugins == null) {
plugins = Collections.emptyList();
}
this.plugins = plugins == null ? Collections.emptyList() : plugins;
this.atlasgisEnabled = atlasgisEnabled;
}

// A plugin can only report itself active once its engine has started, which
// may happen after this bean is built, and it can stop again at runtime.
// Ask on every read rather than freezing whatever was true at construction.
@Override
public Map<String, Object> getProperties() {
Map<String, Object> current = new LinkedHashMap<>();
for (WebApiPlugin plugin : plugins) {
properties.put(plugin.getId() + "Enabled", plugin.isActive());
current.put(plugin.getId() + "Enabled", plugin.isActive());
}
properties.put("atlasgisEnabled", atlasgisEnabled);
current.put("atlasgisEnabled", atlasgisEnabled);
return current;
}

@Override
Expand Down
38 changes: 38 additions & 0 deletions src/test/java/org/ohdsi/webapi/info/InfoServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.ohdsi.webapi.info;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;
import org.ohdsi.webapi.plugins.PluginsConfigurationInfo;
import org.ohdsi.webapi.plugins.WebApiPlugin;
import org.springframework.boot.info.BuildProperties;

public class InfoServiceTest {

@Test
public void infoReflectsPluginStateAtRequestTime() {

AtomicBoolean active = new AtomicBoolean(false);
WebApiPlugin plugin = mock(WebApiPlugin.class);
when(plugin.getId()).thenReturn("trexsql");
when(plugin.isActive()).thenAnswer(invocation -> active.get());

BuildProperties buildProperties = mock(BuildProperties.class);
when(buildProperties.getVersion()).thenReturn("3.0.0-SNAPSHOT");

InfoService service = new InfoService(
buildProperties,
mock(BuildInfo.class),
Collections.singletonList(new PluginsConfigurationInfo(Collections.singletonList(plugin), false)));

assertEquals("3.0.0", service.getInfo().getVersion());
assertEquals(false, service.getInfo().getConfiguration().get("plugins").get("trexsqlEnabled"));

active.set(true);
assertEquals(true, service.getInfo().getConfiguration().get("plugins").get("trexsqlEnabled"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.ohdsi.webapi.plugins;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.Collections;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.Test;

public class PluginsConfigurationInfoTest {

private static WebApiPlugin plugin(String id, AtomicBoolean active) {

return new WebApiPlugin() {
public String getId() { return id; }
public String getName() { return id; }
public String getVersion() { return "1.0"; }
public boolean isActive() { return active.get(); }
};
}

@Test
public void reportsPluginActivationAtReadTimeNotConstructionTime() {

AtomicBoolean active = new AtomicBoolean(false);
PluginsConfigurationInfo info =
new PluginsConfigurationInfo(Collections.singletonList(plugin("trexsql", active)), false);

assertEquals(false, info.getProperties().get("trexsqlEnabled"));

active.set(true);
assertEquals(true, info.getProperties().get("trexsqlEnabled"));

active.set(false);
assertEquals(false, info.getProperties().get("trexsqlEnabled"));
}

@Test
public void omitsPluginKeysWhenNoPluginsAreRegistered() {

PluginsConfigurationInfo info = new PluginsConfigurationInfo(null, true);

assertEquals(1, info.getProperties().size());
assertEquals(true, info.getProperties().get("atlasgisEnabled"));
assertTrue(!info.getProperties().containsKey("trexsqlEnabled"));
}
}
Loading