merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.remoting / src / test / java / eu / etaxonomy / taxeditor / httpinvoker / CdmPersistentRemoteSourceTest.java
1 /**
2 * Copyright (C) 2014 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.httpinvoker;
10
11
12 import static org.hamcrest.CoreMatchers.containsString;
13
14 import java.util.Map;
15
16 import org.apache.log4j.Level;
17 import org.apache.log4j.Logger;
18 import org.junit.Assert;
19 import org.junit.BeforeClass;
20 import org.junit.Test;
21
22 import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils;
23 import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties;
24 import eu.etaxonomy.cdm.config.CdmSourceException;
25 import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;
26 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
27 import eu.etaxonomy.cdm.remote.CdmPersistentRemoteSource;
28 import eu.etaxonomy.cdm.remote.CdmRemoteSource;
29 import eu.etaxonomy.cdm.remote.CdmRemoteSourceException;
30 import eu.etaxonomy.cdm.remote.ICdmRemoteSource;
31
32 /**
33 * Class to test the cdm persistent source functionality, including
34 * initialising / saving / updating and deleting
35 *
36 * Corresponding test sources settings can be found at
37 * /src/text/resources/eu.etaxonomy.cdm/cdm.datasources.xml
38 *
39 */
40 public class CdmPersistentRemoteSourceTest extends BaseRemotingTest {
41 private static final Logger logger = Logger.getLogger(CdmPersistentRemoteSourceTest.class);
42
43 private CdmPersistentRemoteSource remotePersistentSource;
44
45 @BeforeClass
46 public static void initialize() {
47 Logger.getRootLogger().setLevel(Level.INFO);
48 }
49
50 @Test
51 public void whenLoadingExistingCompleteRemoteSourceThenLoadIsSuccessful() {
52
53 remotePersistentSource = getCdmPersistentRemoteSource();
54
55 String expectedServer = "127.0.0.1";
56 String expectedPort = "9090";
57 String expectedContextPath = "";
58 logger.info("Default remote source server : " + remotePersistentSource.getServer());
59 Assert.assertTrue("Default server should be " + expectedServer,
60 expectedServer.equals(remotePersistentSource.getServer()));
61
62 logger.info("Default remote source port : " + remotePersistentSource.getPort());
63 Assert.assertTrue("Default port should be 9090",
64 expectedPort.equals(String.valueOf(remotePersistentSource.getPort())));
65
66 logger.info("Default remote source context path : " + remotePersistentSource.getContextPath());
67 Assert.assertTrue("Default remote source context path should be " + expectedContextPath,
68 expectedContextPath.equals(remotePersistentSource.getContextPath()));
69
70 logger.info("Default remote source nomenclatural code : " + remotePersistentSource.getNomenclaturalCode().toString());
71 Assert.assertTrue("Default NomenclaturalCode should be ICNAFP",
72 NomenclaturalCode.ICNAFP.equals(remotePersistentSource.getNomenclaturalCode()));
73 }
74
75
76
77
78 @Test
79 public void whenConnectingToAnActiveServerThenConnectSuccessfully() {
80 // check if active server throws the right exception
81
82 remotePersistentSource = getCdmPersistentRemoteSource();
83
84 String dbSchemaVersion = "";
85 try {
86 dbSchemaVersion = remotePersistentSource.getDbSchemaVersion();
87 } catch (CdmSourceException e) {
88 Assert.fail("getDbSchemaVersion() on active cdm server should not have thrown CdmSourceException");
89 }
90 logger.info("dbSchemaVersion is " + dbSchemaVersion);
91
92
93 boolean isDbEmpty = false;
94 try {
95 isDbEmpty = remotePersistentSource.isDbEmpty();
96 } catch (CdmSourceException e) {
97 Assert.fail("isDbEmpty() on active cdm server should not have thrown CdmSourceException");
98 }
99 Assert.assertFalse(isDbEmpty);
100
101
102 boolean check = false;
103 try {
104 check = remotePersistentSource.checkConnection();
105 } catch (CdmSourceException e) {
106 Assert.fail("checkConnection() on active cdm server should not have thrown CdmSourceException");
107 }
108 Assert.assertTrue(check);
109
110
111 }
112
113 @Test
114 public void whenRequestingMetadatFromRemoteSourceThenMetaDataIsRetrieved() {
115 try {
116 remotePersistentSource = getCdmPersistentRemoteSource();
117 Map<MetaDataPropertyName, String> cdmMetaDataMap = remotePersistentSource.getMetaDataMap();
118 for(MetaDataPropertyName mdpn : cdmMetaDataMap.keySet()) {
119 String value = cdmMetaDataMap.get(mdpn);
120 logger.info("MetaData Property " + mdpn.name() + " has value " + value);
121 Assert.assertNotNull("Meta Data Value for property for " + mdpn.name() + " should not be null", value);
122 }
123 } catch (CdmSourceException e) {
124 // TODO Auto-generated catch block
125 e.printStackTrace();
126 }
127 }
128
129 @Test
130 public void whenLoadingNonExistingRemoteSourceThenThrowException() {
131 try {
132 remotePersistentSource = CdmPersistentRemoteSource.NewInstance("nonExistingSource");
133 Assert.fail("Initialising a non-existing remote source should throw an exception");
134 } catch (CdmRemoteSourceException e) {
135 logger.info(e.getMessage());
136 }
137 }
138
139 @Test
140 public void whenLoadingExistingIncompleteRemoteSourceThenThrowException() {
141 try {
142 remotePersistentSource = CdmPersistentRemoteSource.NewInstance("incomplete");
143 Assert.fail("Initialising an incomplete remote source should throw an exception");
144 } catch (CdmRemoteSourceException e) {
145 Assert.assertThat(e.getMessage(), containsString("Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"));
146 }
147 }
148
149 @Test
150 public void whenSavingUpdatingDeletingNewCompleteRemoteSourceThenSaveUpdateDeleteIsSuccessful() {
151 String strRemoteSource = "local";
152 Assert.assertFalse("New remote source '" + strRemoteSource + "' should not yet exist in source settings file",
153 CdmPersistentRemoteSource.exists(strRemoteSource));
154 try {
155 ICdmRemoteSource remoteSource =
156 CdmRemoteSource.NewInstance(strRemoteSource,
157 "127.0.0.1",
158 8080,
159 "col",
160 NomenclaturalCode.ICNAFP);
161 remotePersistentSource = CdmPersistentRemoteSource.save(strRemoteSource,remoteSource);
162
163 logger.info("Server : " + remotePersistentSource.getServer());
164 Assert.assertTrue("Server value should be equal",
165 remoteSource.getServer().equals(remotePersistentSource.getServer()));
166
167 logger.info("Port : " + remotePersistentSource.getPort());
168 Assert.assertTrue("Port value should be equal",
169 remoteSource.getPort() == remotePersistentSource.getPort());
170
171 logger.info("Context Path : " + remotePersistentSource.getContextPath());
172 Assert.assertTrue("Context Path value should be equal",
173 remoteSource.getContextPath().equals(remotePersistentSource.getContextPath()));
174
175 logger.info("Nomenclatural Code : " + remotePersistentSource.getNomenclaturalCode().name());
176 Assert.assertTrue("Nomenclatural Code value should be equal",
177 remoteSource.getNomenclaturalCode().name().equals(remotePersistentSource.getNomenclaturalCode().name()));
178
179 Assert.assertTrue("New remote source '" + strRemoteSource + "' should be saved in source settings file",
180 CdmPersistentRemoteSource.exists(strRemoteSource));
181
182 remoteSource = CdmRemoteSource.NewInstance(strRemoteSource,
183 "127.0.0.55",
184 9090,
185 "cyprus",
186 NomenclaturalCode.ICNB);
187 remotePersistentSource = CdmPersistentRemoteSource.update(strRemoteSource,remoteSource);
188
189 logger.info("Server : " + remotePersistentSource.getServer());
190 Assert.assertTrue("Server value should be equal",
191 remoteSource.getServer().equals(remotePersistentSource.getServer()));
192
193 logger.info("Port : " + remotePersistentSource.getPort());
194 Assert.assertTrue("Port value should be equal",
195 remoteSource.getPort() == remotePersistentSource.getPort());
196
197 logger.info("Context Path : " + remotePersistentSource.getContextPath());
198 Assert.assertTrue("Context Path value should be equal",
199 remoteSource.getContextPath().equals(remotePersistentSource.getContextPath()));
200
201 logger.info("Nomenclatural Code : " + remotePersistentSource.getNomenclaturalCode().name());
202 Assert.assertTrue("Nomenclatural Code value should be equal",
203 remoteSource.getNomenclaturalCode().name().equals(remotePersistentSource.getNomenclaturalCode().name()));
204
205 Assert.assertTrue("New remote source '" + strRemoteSource + "' should be saved in source settings file",
206 CdmPersistentRemoteSource.exists(strRemoteSource));
207
208 CdmPersistentSourceUtils.delete(remotePersistentSource);
209
210 Assert.assertFalse("New remote source '" + strRemoteSource + "' should no longer exist in source settings file",
211 CdmPersistentRemoteSource.exists(strRemoteSource));
212
213 } catch (CdmRemoteSourceException e) {
214 Assert.fail("Saving a new complete remote source should not throw an exception");
215 logger.info(e.getMessage());
216 }
217 }
218
219
220
221 }