Skip to content

Commit 5cdfffb

Browse files
Show error message if reading config file fails (#171)
* NullPointerException thrown when drmHandle is null in readConfigurationFile. MonitoringConfiguration constructor removed * Code clean up: unnecessary constructor removed from AmIMonitoringService and getInstance() method removed form MonitoringConfiguration. * error message logged when config file does not exist for given location and fileName. * minor change with file path in default getInstance() method. * getInstance() method in MonitoringConfiguration takes default file path when not specified. * NullPointerException thrown when drmHandle is null in readConfigurationFile. MonitoringConfiguration constructor removed * Code clean up: unnecessary constructor removed from AmIMonitoringService and getInstance() method removed form MonitoringConfiguration. * error message logged when config file does not exist for given location and fileName. * minor change with file path in default getInstance() method. * getInstance() method in MonitoringConfiguration takes default file path when not specified. * applied patch for resolving logging issue * readConfigurationFileTest() is added and some code cleanup * suggestions applied * replacing workaround code for getting config file path with ContextPathUtils.getConfigDir() * Apply patch for: fix_silently_failing_test_TestMonitoringService * suggestions applied * suggestions applied Co-authored-by: Sebastian Scholze <4063307+schlotze@users.noreply.github.com>
1 parent 72190fc commit 5cdfffb

File tree

19 files changed

+231
-220
lines changed

19 files changed

+231
-220
lines changed

context-core/src/main/java/org/eclipse/opensmartclide/pm2/common/io/POKindCoreServiceMonitoringConfAMsImpl.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,15 @@
1313
* SPDX-License-Identifier: EPL-2.0
1414
* #L%
1515
*/
16+
import org.eclipse.opensmartclide.pm2.common.application.ObjectKinds;
17+
1618
import java.io.File;
1719
import java.io.IOException;
1820
import java.nio.file.Files;
1921
import java.nio.file.Paths;
2022

21-
import org.eclipse.opensmartclide.pm2.common.application.ObjectKinds;
22-
2323
public final class POKindCoreServiceMonitoringConfAMsImpl implements
2424
POKindCoreServiceMonitoringConfAMs {
25-
2625
// currently it only checks whether the file exists. In case it exists
2726
// returns true
2827
public boolean POKindCoreServiceConfOpenAM(String name, String path,

context-monitoring/src/main/java/org/eclipse/opensmartclide/context/monitoring/config/MonitoringConfiguration.java

+25-37
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717

1818
import org.eclipse.opensmartclide.context.common.Configuration;
19+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
1920
import org.eclipse.opensmartclide.context.common.exceptions.ConfigurationException;
2021
import org.eclipse.opensmartclide.context.monitoring.config.models.*;
2122
import org.eclipse.opensmartclide.context.tools.ontology.AmIMonitoringConfiguration;
2223
import org.simpleframework.xml.core.Persister;
2324

2425
import java.io.ByteArrayInputStream;
25-
import java.io.IOException;
2626
import java.io.InputStream;
27+
import java.nio.file.Path;
2728
import java.util.HashMap;
2829
import java.util.List;
2930
import java.util.Map;
@@ -40,26 +41,20 @@ public final class MonitoringConfiguration extends Configuration<Config> impleme
4041
private static final String DEFAULT_FILE_NAME = "monitoring-config.xml";
4142

4243
public static MonitoringConfiguration getInstance() {
44+
final Path DEFAULT_FILE_PATH = ContextPathUtils.getConfigDirPath();
4345
if (SETTINGS.get(DEFAULT_FILE_NAME) == null) {
44-
SETTINGS.put(DEFAULT_FILE_NAME, new MonitoringConfiguration(DEFAULT_FILE_NAME));
46+
SETTINGS.put(DEFAULT_FILE_NAME, new MonitoringConfiguration(DEFAULT_FILE_NAME, DEFAULT_FILE_PATH.toString()));
4547
}
4648
return SETTINGS.get(DEFAULT_FILE_NAME);
4749
}
4850

4951
public static MonitoringConfiguration getInstance(final AmIMonitoringConfiguration config) {
50-
if (SETTINGS.get(config) == null) {
52+
if (SETTINGS.get(config.getId()) == null) {
5153
SETTINGS.put(config.getId(), new MonitoringConfiguration(config));
5254
}
5355
return SETTINGS.get(config.getId());
5456
}
5557

56-
public static MonitoringConfiguration getInstance(final String configFileName) {
57-
if (SETTINGS.get(configFileName) == null) {
58-
SETTINGS.put(configFileName, new MonitoringConfiguration(configFileName));
59-
}
60-
return SETTINGS.get(configFileName);
61-
}
62-
6358
public static MonitoringConfiguration getInstance(final String configFileName, final String configFilePath) {
6459
if (SETTINGS.get(configFileName) == null) {
6560
SETTINGS.put(configFileName, new MonitoringConfiguration(configFileName, configFilePath));
@@ -71,38 +66,31 @@ private MonitoringConfiguration(final String givenName, final String givenPath)
7166
super(givenName, givenPath, Config.class, "Monitoring Configuration");
7267
}
7368

74-
private MonitoringConfiguration(final String givenName) {
75-
super(givenName, null, Config.class, "Monitoring Configuration");
76-
}
77-
7869
private MonitoringConfiguration(final AmIMonitoringConfiguration config) {
7970
super(config, Config.class, "Monitoring Configuration");
8071
}
8172

8273
protected void readConfigurationFile() {
83-
InputStream is = null;
84-
try {
85-
final String drmHandle = sysCaller.openDRMobject(configurationFileName, configurationLookupPath, "read");
86-
if (drmHandle != null) {
87-
final byte[] readConfig = sysCaller.getDRMobject(configurationFileName, configurationLookupPath);
88-
if (readConfig != null) {
89-
is = new ByteArrayInputStream(readConfig);
90-
this.configurationBean = new Persister().read(this.configurationClass, is);
91-
is.close();
92-
logger.info("{} loaded!", configurationFileName);
93-
}
94-
sysCaller.closeDRMobject(drmHandle);
95-
}
96-
} catch (final Exception e) {
97-
logger.error("Could not serialize the {} file {}", configurationName, configurationFileName, e);
98-
} finally {
99-
if (is != null) {
100-
try {
101-
is.close();
102-
} catch (final IOException e) {
103-
logger.error(e.getMessage(), e);
104-
}
105-
}
74+
final String drmHandle = sysCaller.openDRMobject(configurationFileName, configurationLookupPath, "read");
75+
if (drmHandle == null) {
76+
throw new RuntimeException("Read config file with name: " + configurationFileName + " at given location: " +
77+
configurationLookupPath + " fails due to null DRM object.");
78+
}
79+
final byte[] readConfig = sysCaller.getDRMobject(configurationFileName, configurationLookupPath);
80+
if (readConfig == null) {
81+
throw new RuntimeException("Read config file with name: " + configurationFileName + " at given location: " +
82+
configurationLookupPath + " fails due to null readConfig object.");
83+
}
84+
try (InputStream is = new ByteArrayInputStream(readConfig)) {
85+
this.configurationBean = new Persister().read(this.configurationClass, is);
86+
logger.info("{} loaded!", configurationFileName);
87+
} catch (Exception e) {
88+
throw new RuntimeException("Read config file with name: " + configurationFileName + " at given location: " +
89+
configurationLookupPath + " fails while reading byte data from input stream", e);
90+
}
91+
if (!sysCaller.closeDRMobject(drmHandle)) {
92+
throw new RuntimeException("Read config file with name: " + configurationFileName + " at given location: " +
93+
configurationLookupPath + " fails while closing DRM object.");
10694
}
10795
}
10896

context-monitoring/src/main/java/org/eclipse/opensmartclide/context/services/AmIMonitoringService.java

-5
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ public AmIMonitoringService() {
6868
initializeServices();
6969
}
7070

71-
public AmIMonitoringService(final String configFile) {
72-
this.config = MonitoringConfiguration.getInstance(configFile);
73-
initializeServices();
74-
}
75-
7671
@Override
7772
public void start() {
7873
logger.info(String.format("Starting %s ...", this.getClass()

context-monitoring/src/test/java/org/eclipse/opensmartclide/context/monitoring/TestMetaMonitor.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.ArrayList;
99
import java.util.List;
1010

11+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
1112
import org.eclipse.opensmartclide.context.monitoring.config.models.DataSource;
1213
import org.eclipse.opensmartclide.context.monitoring.index.Indexer;
1314
import org.junit.AfterClass;
@@ -41,8 +42,8 @@ public class TestMetaMonitor {
4142

4243
@BeforeClass
4344
public static void beforeClass() {
44-
final Path configDir = Path.of("src", "test", "resources").toAbsolutePath();
45-
config = MonitoringConfiguration.getInstance("monitoring-config.xml", configDir.toString());
45+
final Path configDirPath = ContextPathUtils.getConfigDirPath();
46+
config = MonitoringConfiguration.getInstance("monitoring-config.xml", configDirPath.toString());
4647
}
4748

4849
@Test
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package org.eclipse.opensmartclide.context.monitoring.config;
2+
3+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
4+
import org.eclipse.opensmartclide.context.monitoring.config.models.DataSource;
5+
import org.eclipse.opensmartclide.context.monitoring.config.models.Index;
6+
import org.eclipse.opensmartclide.context.monitoring.config.models.Interpreter;
7+
import org.eclipse.opensmartclide.context.monitoring.config.models.Monitor;
8+
import org.eclipse.opensmartclide.context.tools.ontology.AmIMonitoringConfiguration;
9+
import org.junit.Assert;
10+
import org.junit.BeforeClass;
11+
import org.junit.Test;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.nio.charset.StandardCharsets;
16+
import java.nio.file.Files;
17+
import java.nio.file.Path;
18+
import java.util.List;
19+
20+
import static org.hamcrest.MatcherAssert.assertThat;
21+
import static org.hamcrest.core.Is.is;
22+
import static org.hamcrest.core.IsNull.notNullValue;
23+
import static org.junit.Assert.assertFalse;
24+
25+
public class TestGetInstanceForMonitoringConfiguration {
26+
27+
private static Path configDirPath;
28+
private static final String CONFIG_FILE_NAME = "monitoring-config.xml";
29+
private static final String EXPECTED_DATASOURCE_ID = "datasource-dummy";
30+
private static final String EXPECTED_INDEX_ID = "index-dummy";
31+
private static final String EXPECTED_INTERPRETER_ID = "interpreter-dummy";
32+
private static final String EXPECTED_MONITOR_ID = "monitor-dummy";
33+
34+
@BeforeClass
35+
public static void beforeClass() {
36+
configDirPath = ContextPathUtils.getConfigDirPath();
37+
}
38+
39+
@Test
40+
public final void readConfigurationFileWithDefaultConfig() {
41+
final MonitoringConfiguration config = MonitoringConfiguration.getInstance();
42+
this.commonTests(config);
43+
}
44+
45+
@Test
46+
public final void readConfigurationFileWithAmIConfig() throws IOException {
47+
final String monitoringConfig = configDirPath.resolve(CONFIG_FILE_NAME).toString();
48+
49+
final AmIMonitoringConfiguration amiConfiguration = new AmIMonitoringConfiguration();
50+
amiConfiguration.setId("TEST_PES");
51+
amiConfiguration.setServiceConfiguration(readFile(monitoringConfig));
52+
53+
final MonitoringConfiguration config = MonitoringConfiguration.getInstance(amiConfiguration);
54+
this.commonTests(config);
55+
}
56+
57+
@Test
58+
public final void readConfigurationFileWithGivenFileConfig() {
59+
final MonitoringConfiguration config = MonitoringConfiguration.getInstance(CONFIG_FILE_NAME, configDirPath.toString());
60+
this.commonTests(config);
61+
}
62+
63+
private void commonTests(MonitoringConfiguration config) {
64+
assertThat(config, is(notNullValue()));
65+
66+
assertThat(config.getDataSources(), is(notNullValue()));
67+
final List<Monitor> monitors = config.getMonitors();
68+
assertFalse(monitors.isEmpty());
69+
70+
final List<Index> indexes = config.getIndexes();
71+
assertFalse(indexes.isEmpty());
72+
73+
final List<Interpreter> interpreters = config.getInterpreters();
74+
assertFalse(interpreters.isEmpty());
75+
76+
for (Monitor monitor : config.getMonitors()) {
77+
Assert.assertEquals(EXPECTED_MONITOR_ID, monitor.getId());
78+
79+
DataSource ds = config.getDataSource(monitor.getDataSourceId());
80+
Assert.assertEquals(EXPECTED_DATASOURCE_ID, ds.getId());
81+
82+
Interpreter interpreter = config.getInterpreter(monitor.getInterpreterId());
83+
Assert.assertEquals(EXPECTED_INTERPRETER_ID, interpreter.getId());
84+
85+
Index index = config.getIndex(monitor.getIndexId());
86+
Assert.assertEquals(EXPECTED_INDEX_ID, index.getId());
87+
}
88+
}
89+
90+
private static String readFile(String filename) throws IOException {
91+
File f = new File(filename);
92+
byte[] bytes = Files.readAllBytes(f.toPath());
93+
return new String(bytes, StandardCharsets.UTF_8);
94+
}
95+
}

context-monitoring/src/test/java/org/eclipse/opensmartclide/context/monitoring/config/TestMonitoringConfiguration.java

+11-15
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
package org.eclipse.opensmartclide.context.monitoring.config;
22

3-
import static org.junit.Assert.assertTrue;
4-
5-
import java.nio.file.Path;
6-
import java.util.List;
7-
8-
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.DatabaseDataSource;
9-
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.FilePairSystemDataSource;
10-
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.FileSystemDataSource;
11-
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.FileTripletSystemDataSource;
12-
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.WebServiceDataSource;
3+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
134
import org.eclipse.opensmartclide.context.monitoring.config.models.DataSource;
14-
import org.junit.BeforeClass;
15-
import org.junit.Test;
16-
175
import org.eclipse.opensmartclide.context.monitoring.config.models.DataSourceType;
186
import org.eclipse.opensmartclide.context.monitoring.config.models.Interpreter;
197
import org.eclipse.opensmartclide.context.monitoring.config.models.Monitor;
8+
import org.eclipse.opensmartclide.context.monitoring.config.models.datasources.*;
9+
import org.junit.BeforeClass;
10+
import org.junit.Test;
11+
12+
import java.nio.file.Path;
13+
import java.util.List;
14+
15+
import static org.junit.Assert.assertTrue;
2016

2117
/**
2218
* TestMonitoringConfiguration
@@ -34,8 +30,8 @@ public class TestMonitoringConfiguration {
3430

3531
@BeforeClass
3632
public static void beforeClass() {
37-
String absolutefilePath = Path.of("src", "test", "resources").toAbsolutePath().toString();
38-
settings = MonitoringConfiguration.getInstance("monitoring-config.xml", absolutefilePath);
33+
final Path configDirPath = ContextPathUtils.getConfigDirPath();
34+
settings = MonitoringConfiguration.getInstance("monitoring-config.xml", configDirPath.toString());
3935
dataSources = settings.getDataSources();
4036
monitors = settings.getMonitors();
4137
interpreters = settings.getInterpreters();

context-monitoring/src/test/java/org/eclipse/opensmartclide/context/monitoring/monitors/file/TestFilePairSystemMonitor.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.nio.file.Path;
44

5+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
56
import org.eclipse.opensmartclide.context.common.exceptions.ConfigurationException;
67
import org.eclipse.opensmartclide.context.monitoring.MetaMonitor;
78
import org.eclipse.opensmartclide.context.monitoring.config.MonitoringConfiguration;
@@ -39,10 +40,9 @@ public class TestFilePairSystemMonitor {
3940

4041
@BeforeClass
4142
public static void beforeClass() throws ConfigurationException {
42-
String absoluteFilePath =
43-
Path.of("src", "test", "resources", "filepairmonitor").toAbsolutePath().toString();
43+
final Path configDirPath = ContextPathUtils.getConfigDirPath();
4444

45-
config = MonitoringConfiguration.getInstance("monitoring-config.xml", absoluteFilePath);
45+
config = MonitoringConfiguration.getInstance("monitoring-config.xml", configDirPath.toString());
4646

4747
monitor = config.getMonitor("monitor-dummy");
4848
Assert.assertTrue("No monitors 'monitor-dummy' specified!", config.getMonitor("monitor-dummy") != null);

context-monitoring/src/test/java/org/eclipse/opensmartclide/context/services/TestDataRetrieval.java

+8-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.eclipse.opensmartclide.context.services;
22

3+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
34
import org.eclipse.opensmartclide.context.monitoring.models.IMonitoringDataModel;
45
import org.eclipse.opensmartclide.context.services.wrapper.AmIMonitoringDataRepositoryServiceWrapper;
56
import org.eclipse.opensmartclide.context.services.faults.ContextFault;
@@ -36,13 +37,13 @@ public class TestDataRetrieval {
3637
private static IAmIMonitoringDataRepositoryService<IMonitoringDataModel<?, ?>> reposService;
3738

3839
@BeforeClass
39-
public static void beforeClass() {
40+
public static void beforeClass() throws IOException {
4041
Properties props = System.getProperties();
4142
props.setProperty("org.apache.cxf.stax.allowInsecureParser", "true");
4243

43-
final Path configDir = Path.of("src", "test", "resources").toAbsolutePath();
44-
final String monitoringConfig = configDir.resolve("monitoring-config.xml").toString();
45-
final String serviceConfig = configDir.resolve("services-config.xml").toString();
44+
final Path configDirPath = ContextPathUtils.getConfigDirPath();
45+
final String monitoringConfig = configDirPath.resolve("monitoring-config.xml").toString();
46+
final String serviceConfig = configDirPath.resolve("services-config.xml").toString();
4647

4748
AmIMonitoringConfiguration amionfig = new AmIMonitoringConfiguration();
4849
amionfig.setId("TEST_PES");
@@ -66,15 +67,10 @@ public static void beforeClass() {
6667
service.configureService(amionfig);
6768
}
6869

69-
private static String readFile(String filename) {
70+
private static String readFile(String filename) throws IOException {
7071
File f = new File(filename);
71-
try {
72-
byte[] bytes = Files.readAllBytes(f.toPath());
73-
return new String(bytes, StandardCharsets.UTF_8);
74-
} catch (IOException e) {
75-
logger.error(e.getMessage(), e);
76-
}
77-
return "";
72+
byte[] bytes = Files.readAllBytes(f.toPath());
73+
return new String(bytes, StandardCharsets.UTF_8);
7874
}
7975

8076
@Test

context-monitoring/src/test/java/org/eclipse/opensmartclide/context/services/TestMonitoringDataRepositoryService.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.eclipse.opensmartclide.context.services;
22

3+
import org.eclipse.opensmartclide.context.common.ContextPathUtils;
34
import org.eclipse.opensmartclide.context.common.util.ApplicationScenario;
45
import org.eclipse.opensmartclide.context.common.util.BusinessCase;
56
import org.eclipse.opensmartclide.context.common.util.TimeFrame;
@@ -19,7 +20,7 @@
1920
import org.slf4j.Logger;
2021
import org.slf4j.LoggerFactory;
2122

22-
import java.io.File;
23+
import java.nio.file.Path;
2324
import java.util.ArrayList;
2425
import java.util.Calendar;
2526
import java.util.Date;
@@ -40,8 +41,6 @@ public class TestMonitoringDataRepositoryService {
4041
private static IAmIMonitoringDataRepositoryService<DummyMonitoringDataModel> service;
4142
private static final String postId = "myPostProcessorId";
4243
private static final String preId = "myPreProcessorId";
43-
private static File configFile;
44-
4544
private static final Logger logger = LoggerFactory
4645
.getLogger(TestMonitoringDataRepositoryService.class);
4746

@@ -50,12 +49,9 @@ public static void beforeClass() {
5049
Properties props = System.getProperties();
5150
props.setProperty("org.apache.cxf.stax.allowInsecureParser", "true");
5251

53-
String absolutefilePath = new File("").getAbsolutePath();
54-
configFile = new File(
55-
absolutefilePath.concat(File.separator + "src" + File.separator + "test" + File.separator + "resources"+ File.separator + "services-config.xml"));
56-
String filepath = configFile.getPath();
52+
final Path configFilePath = ContextPathUtils.getConfigDirPath().resolve("services-config.xml");
5753
SWServiceContainer serviceContainer = new SWServiceContainer(
58-
"AmI-repository", filepath);
54+
"AmI-repository", configFilePath.toString());
5955
server = ServiceManager.registerWebservice(serviceContainer);
6056
service = ServiceManager.getWebservice(serviceContainer);
6157
}

0 commit comments

Comments
 (0)