annotate gwt-client/src/test/java/test/ModuleRunner.java @ 9127:dbb26bc81843

Testing
author gernotbelger
date Wed, 06 Jun 2018 13:05:57 +0200
parents gwt-client/src/test/java/test/SuperTest.java@efd2de78d158
children af73fdd96920
rev   line source
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
1 package test;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
2
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
3 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
4 * Software engineering by
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
5 * Björnsen Beratende Ingenieure GmbH
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
6 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
7 *
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
8 * This file is Free Software under the GNU AGPL (>=v3)
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
9 * and comes with ABSOLUTELY NO WARRANTY! Check out the
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
10 * documentation coming with Dive4Elements River for details.
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
11 */
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
12
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
13 import java.io.File;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
14 import java.io.FileNotFoundException;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
15 import java.io.FileOutputStream;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
16 import java.io.IOException;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
17 import java.io.InputStream;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
18 import java.io.InputStreamReader;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
19 import java.net.URL;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
20 import java.util.ArrayList;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
21 import java.util.HashMap;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
22 import java.util.List;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
23
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
24 import org.apache.commons.io.FileUtils;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
25 import org.apache.commons.io.IOUtils;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
26 import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
27 import org.dive4elements.artifacts.common.utils.ClientProtocolUtils;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
28 import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
29 import org.dive4elements.artifacts.httpclient.http.HttpClient;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
30 import org.dive4elements.artifacts.httpclient.http.HttpClientImpl;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
31 import org.dive4elements.artifacts.httpclient.http.response.DocumentResponseHandler;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
32 import org.dive4elements.artifacts.httpclient.utils.XMLUtils;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
33 import org.dive4elements.river.client.client.ui.NilDatacageTwinPanelInfo;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
34 import org.dive4elements.river.client.client.ui.RecommandationUtils;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
35 import org.dive4elements.river.client.server.AdvanceServiceImpl;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
36 import org.dive4elements.river.client.server.ArtifactHelper;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
37 import org.dive4elements.river.client.server.CollectionHelper;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
38 import org.dive4elements.river.client.server.CreateCollectionServiceImpl;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
39 import org.dive4elements.river.client.server.FLYSArtifactCreator;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
40 import org.dive4elements.river.client.server.FeedServiceImpl;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
41 import org.dive4elements.river.client.server.LoadArtifactServiceImpl;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
42 import org.dive4elements.river.client.server.auth.DefaultUser;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
43 import org.dive4elements.river.client.server.auth.User;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
44 import org.dive4elements.river.client.server.auth.UserClient;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
45 import org.dive4elements.river.client.shared.exceptions.ServerException;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
46 import org.dive4elements.river.client.shared.model.Artifact;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
47 import org.dive4elements.river.client.shared.model.Collection;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
48 import org.dive4elements.river.client.shared.model.Data;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
49 import org.dive4elements.river.client.shared.model.DataItem;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
50 import org.dive4elements.river.client.shared.model.DefaultCollection;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
51 import org.dive4elements.river.client.shared.model.DefaultDataItem;
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
52 import org.dive4elements.river.client.shared.model.OutputMode;
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
53 import org.dive4elements.river.client.shared.model.Recommendation;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
54 import org.dive4elements.river.client.shared.model.StringOptionsData;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
55 import org.junit.Assert;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
56 import org.w3c.dom.Document;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
57 import org.w3c.dom.Element;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
58
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
59 import test.BerechnungsartenTester.CalcMode;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
60 import test.BerechnungsartenTester.FilenameMapper;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
61 import test.BerechnungsartenTester.River;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
62
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
63 /**
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
64 * @author Domenico Nardi Tironi
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
65 *
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
66 */
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
67 public abstract class ModuleRunner {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
68
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
69 public enum Infotype {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
70 sinfo
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
71 }
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
72
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
73 private final String serverUrl = "http://localhost:8181";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
74 private final String locale = "de";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
75 private final HttpClient client;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
76
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
77 private static final String exportFileDir = "D:" + File.separator;
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
78 private static final String IGNORE_ERSTELLDATUM = "# Datum der Erstellung";
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
79 private static final String IGNORE_FLYS_VERSION = "# FLYS-Version:";
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
80 private static final String IGNORE_BEARBEITER = "# Bearbeiter:";
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
81
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
82 private final String username;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
83 private final String password;
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
84 private final Infotype infotype;
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
85 private final String userUuid;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
86 private Collection collection;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
87 private Artifact artifact;
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
88 private final FilenameMapper fileName;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
89
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
90 // common attributes
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
91 private final CalcMode calcMode;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
92 private final double from;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
93 private final double to;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
94 private final River river;
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
95
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
96 private final List<String> pairIds = new ArrayList<String>();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
97
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
98 public ModuleRunner(final String username, final String password, final Infotype infotype, final CalcMode sinfoCalcFlowDepth,
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
99 final FilenameMapper helloWorldFile, final double from, final double to, final River beispielfluss) throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
100 // common attributes (evtl. doch in subklassen, evtl. Zwischenhierarchiestufe einführen
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
101
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
102 this.calcMode = sinfoCalcFlowDepth;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
103 this.river = beispielfluss;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
104 this.from = from;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
105 this.to = to;
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
106
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
107 this.username = username;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
108 this.password = password;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
109 this.infotype = infotype;
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
110 this.fileName = helloWorldFile;
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
111
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
112 // init
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
113 this.client = new HttpClientImpl(this.serverUrl, this.locale);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
114 this.userUuid = makeUserUuid();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
115 this.collection = getCollection();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
116 this.artifact = getArtifact();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
117 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
118
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
119 private String makeUserUuid() throws ConnectionException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
120 final User user = new DefaultUser(this.username, this.password, null, false, new ArrayList<String>(), new ArrayList<String>());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
121 final UserClient userClient = new UserClient(this.serverUrl);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
122 Element userElement;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
123
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
124 userElement = userClient.findUser(user);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
125 return userElement.getAttributeNS(ArtifactNamespaceContext.NAMESPACE_URI, "uuid");
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
126
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
127 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
128
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
129 protected final Artifact getArtifact() throws ServerException, ConnectionException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
130 if (this.artifact == null) {
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
131 this.artifact = ArtifactHelper.createArtifact(this.serverUrl, this.locale, this.infotype.name(), null);
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
132 setCollection(CollectionHelper.addArtifact(getCollection(), this.artifact, this.serverUrl, this.locale)); // wichtig; sorgt für Persistenz
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
133 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
134 return this.artifact;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
135 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
136
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
137 private Collection getCollection() throws ConnectionException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
138
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
139 if (this.collection == null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
140 // lazy-Loading
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
141 final Document create = ClientProtocolUtils.newCreateCollectionDocument(null);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
142 final Document doc = (Document) this.client.createCollection(create, this.userUuid, new DocumentResponseHandler());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
143 final String uuid = XMLUtils.xpathString(doc, CreateCollectionServiceImpl.XPATH_COLLECTION_UUID, ArtifactNamespaceContext.INSTANCE);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
144 final String ttlStr = XMLUtils.xpathString(doc, CreateCollectionServiceImpl.XPATH_COLLECTION_TTL, ArtifactNamespaceContext.INSTANCE);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
145 this.collection = new DefaultCollection(uuid, Long.valueOf(ttlStr), uuid);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
146 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
147 return this.collection;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
148
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
149 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
150
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
151 private final void setCollection(final Collection collection) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
152 this.collection = collection;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
153 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
154
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
155 private final void setArtifact(final Artifact artifact) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
156 this.artifact = artifact;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
157 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
158
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
159 public abstract void runTest(final boolean exportToFile) throws ConnectionException, ServerException, IOException;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
160
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
161 protected final void describeCollection() throws ConnectionException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
162
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
163 final String uuid = getCollection().identifier();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
164 final Document describe = ClientProtocolUtils.newDescribeCollectionDocument(uuid);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
165 final Document response = (Document) this.client.doCollectionAction(describe, uuid, new DocumentResponseHandler());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
166 final Collection c = CollectionHelper.parseCollection(response);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
167 setCollection(c);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
168
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
169 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
170
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
171 protected final void feedAndGo(final Data[] data, final int reachableStateIndex) throws ConnectionException, ServerException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
172 feed(data);
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
173 advance(getReachableStateByIndex(getArtifact(), reachableStateIndex)); // reachablestate könnte auch String sein.
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
174
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
175 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
176
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
177 private final String getReachableStateByIndex(final Artifact artifact, final int index) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
178
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
179 final String[] states = artifact.getArtifactDescription().getReachableStates();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
180 if (states != null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
181 if (states.length > index) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
182 return states[index];
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
183 } else {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
184 return states[0];
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
185 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
186 } else {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
187 return "";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
188 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
189 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
190
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
191 private final void feed(final Data[] data) throws ServerException, ConnectionException {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
192 final Document feed = ClientProtocolUtils.newFeedDocument(getArtifact().getUuid(), getArtifact().getHash(), createKVP(data));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
193 final Document description = (Document) this.client.feed(
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
194 new org.dive4elements.artifacts.httpclient.objects.Artifact(getArtifact().getUuid(), getArtifact().getHash()), feed,
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
195 new DocumentResponseHandler());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
196
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
197 final String result = XMLUtils.xpathString(description, FeedServiceImpl.XPATH_RESULT, ArtifactNamespaceContext.INSTANCE);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
198
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
199 if (result == null || !result.equals(FeedServiceImpl.OPERATION_FAILURE)) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
200 setArtifact((Artifact) new FLYSArtifactCreator().create(description));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
201 } else if (result != null && result.equals(FeedServiceImpl.OPERATION_FAILURE)) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
202 final String msg = XMLUtils.xpathString(description, FeedServiceImpl.XPATH_RESULT_MSG, ArtifactNamespaceContext.INSTANCE);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
203 throw new ServerException(msg);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
204 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
205 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
206
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
207 private final String[][] createKVP(final Data[] data) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
208 if (data != null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
209 final String[][] kvp = new String[data.length][];
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
210
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
211 int i = 0;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
212
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
213 for (final Data d : data) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
214 // final DataItem[] items = d.getItems();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
215 final String key = d.getLabel();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
216 final String value = d.getStringValue();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
217
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
218 kvp[i++] = new String[] { key, value };
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
219 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
220
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
221 return kvp;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
222 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
223 return null;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
224 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
225
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
226 private final void advance(final String target) throws ConnectionException, ServerException {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
227 final Document advance = ClientProtocolUtils.newAdvanceDocument(getArtifact().getUuid(), getArtifact().getHash(), target);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
228 final Document description = (Document) this.client.advance(
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
229 new org.dive4elements.artifacts.httpclient.objects.Artifact(getArtifact().getUuid(), getArtifact().getHash()), advance,
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
230 new DocumentResponseHandler());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
231
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
232 if (description == null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
233 throw new ServerException(AdvanceServiceImpl.ERROR_ADVANCE_ARTIFACT);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
234 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
235
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
236 final String result = XMLUtils.xpathString(description, AdvanceServiceImpl.XPATH_RESULT, ArtifactNamespaceContext.INSTANCE);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
237
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
238 if (result == null || !result.equals(AdvanceServiceImpl.OPERATION_FAILURE)) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
239 setArtifact((Artifact) new FLYSArtifactCreator().create(description));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
240 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
241 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
242
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
243 protected final Artifact[] loadMany(final Recommendation[] recoms, final String factory) throws ServerException, ConnectionException {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
244 final ArrayList<Artifact> artifacts = new ArrayList<Artifact>();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
245 final HashMap<Recommendation, Artifact> cloneMap = new HashMap<Recommendation, Artifact>();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
246
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
247 for (final Recommendation recom : recoms) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
248
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
249 final Artifact prevClone = cloneMap.get(recom);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
250 if (prevClone != null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
251
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
252 artifacts.add(prevClone);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
253 } else {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
254 // Not already cloned.
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
255 final String realFactory = factory != null ? factory : recom.getFactory();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
256
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
257 final Artifact clone = ArtifactHelper.createArtifact(this.serverUrl, this.locale, realFactory, recom);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
258
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
259 if (clone != null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
260 final Collection c = CollectionHelper.addArtifact(getCollection(), clone, this.serverUrl, this.locale);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
261
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
262 if (c != null) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
263 artifacts.add(clone);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
264 // Remember we cloned a recommendation like this.
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
265 cloneMap.put(recom, clone);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
266 } else {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
267 throw new ServerException(LoadArtifactServiceImpl.ERROR_LOAD_ARTIFACT);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
268 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
269 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
270 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
271 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
272 return artifacts.toArray(new Artifact[artifacts.size()]);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
273
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
274 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
275
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
276 /// ExportServiceImpl
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
277 protected final void doGet(final String mode, final boolean exportToFile) throws IOException {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
278
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
279 final String type = "csv";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
280
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
281 final String enc = "windows-1252";// req.getParameter("encoding");
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
282
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
283 final URL expectedResource = getClass().getResource(this.fileName.getFilename());
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
284 final Document attr = null;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
285 final Document request = ClientProtocolUtils.newOutCollectionDocument(getCollection().identifier(), mode, type, attr);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
286
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
287 final InputStream response = this.client.collectionOut(request, getCollection().identifier(), mode);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
288
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
289 final String actual = deleteErstelldatum(IOUtils.toString(response, "UTF-8"));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
290
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
291 final String expected = deleteErstelldatum(FileUtils.readFileToString(new File(expectedResource.getFile()), enc));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
292
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
293 // if (!actual.equals(expected)) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
294 if (exportToFile) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
295 doGetWriteToDisk(mode); // TODO: WENN der Test negativ ausfällt, Datei abspeichern -> Diskussion
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
296 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
297 Assert.assertEquals(actual, expected);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
298
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
299 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
300
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
301 private final String deleteErstelldatum(final String input) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
302 String result = "";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
303 final String[] lines = input.split(System.lineSeparator());
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
304 for (final String line : lines) {
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
305 if (!line.contains(ModuleRunner.IGNORE_ERSTELLDATUM) && !line.contains(ModuleRunner.IGNORE_FLYS_VERSION)
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
306 && !line.contains(ModuleRunner.IGNORE_BEARBEITER)) {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
307 result = result + line + System.lineSeparator();
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
308 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
309 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
310 return result;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
311 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
312
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
313 public final void doGetWriteToDisk(final String mode) throws FileNotFoundException, IOException {
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
314
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
315 final String name = mode;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
316 final String type = "csv";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
317
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
318 final String fn = name + System.currentTimeMillis() + "." + type;
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
319 final String enc = "windows-1252";
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
320
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
321 final String filepath = exportFileDir + fn;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
322
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
323 final Document attr = null;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
324 final Document request = ClientProtocolUtils.newOutCollectionDocument(getCollection().identifier(), mode, type, attr);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
325
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
326 final InputStream response = this.client.collectionOut(request, getCollection().identifier(), mode);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
327 final InputStreamReader in = new InputStreamReader(response, "UTF-8");
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
328
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
329 IOUtils.copy(in, new FileOutputStream(filepath), enc);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
330
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
331 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
332
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
333 public final void addRecommendationPair(final SimpleRecommendation rec1, final SimpleRecommendation rec2) throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
334 final Recommendation recom1 = new Recommendation(rec1.getFactory(), rec1.getIds(), rec1.getTarget());
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
335 final Recommendation recom2 = new Recommendation(rec2.getFactory(), rec2.getIds(), rec2.getTarget());
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
336 final Artifact[] artifacts = loadMany(new Recommendation[] { recom1, recom2 }, null);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
337 final String rec1String = RecommandationUtils.createDataString(artifacts[0].getUuid(), recom1, new NilDatacageTwinPanelInfo("xxxx"));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
338 final String rec2String = RecommandationUtils.createDataString(artifacts[1].getUuid(), recom2, new NilDatacageTwinPanelInfo("xxxx"));
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
339 final String combinedIdNeu = rec1String + "#" + rec2String;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
340 this.pairIds.add(combinedIdNeu);
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
341 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
342
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
343 protected Data[] getPairData() {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
344 final Data[] data = new Data[this.pairIds.size()];
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
345 int i = 0;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
346 for (final String pairId : this.pairIds) {
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
347 final Data pair = new StringOptionsData("diffids", "diffids", new DataItem[] { new DefaultDataItem(pairId, pairId, pairId) });
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
348 data[i] = pair;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
349 i++;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
350 }
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
351 return data;
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
352 }
9127
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
353
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
354 protected final void selectCalcMode() throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
355
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
356 /* Select CalcMode */
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
357 // final DataList calcModes = getArtifact().getArtifactDescription().getCurrentData(); // AUSWAHL-Möglichkeiten
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
358 // final DataItem minMaxFlowdepth = calcModes.get(0).getItems()[2]; // CalcMode
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
359 final String calcmodeStr = this.calcMode.name();
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
360 final Data dataCalcMode = new StringOptionsData("calculation_mode", "calculation_mode",
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
361 new DataItem[] { new DefaultDataItem(calcmodeStr, calcmodeStr, calcmodeStr) });
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
362 feedAndGo(new Data[] { dataCalcMode }, 0);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
363 }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
364
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
365 protected final void selectRange() throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
366 final String fromStr = String.valueOf(this.from);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
367 final String toStr = String.valueOf(this.to);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
368 final Data dataFrom = new StringOptionsData("ld_from", "ld_from", new DataItem[] { new DefaultDataItem(fromStr, fromStr, fromStr) });
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
369 final Data dataTo = new StringOptionsData("ld_to", "ld_to", new DataItem[] { new DefaultDataItem(toStr, toStr, toStr) });
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
370 final Data[] rangeFromToDetermined = new Data[] { dataFrom, dataTo };
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
371
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
372 feedAndGo(rangeFromToDetermined, 0);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
373 }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
374
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
375 // private final void seletMaxRange() throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
376 // final DataList list = getArtifact().getArtifactDescription().getCurrentData();
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
377 // final Data[] rangeMax = new Data[] { list.get(0), list.get(1) };
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
378 // feedAndGo(rangeMax, 0);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
379 // }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
380
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
381 protected final void selectRiver() throws ConnectionException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
382 final String riverStr = this.river.name();
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
383 final Data data = new StringOptionsData("river", "river", new DataItem[] { new DefaultDataItem(riverStr, riverStr, riverStr) });
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
384 feedAndGo(new Data[] { data }, 0);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
385 }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
386
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
387 protected final void export(final boolean exportToFile) throws IOException, ServerException {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
388 final OutputMode[] modes = getArtifact().getArtifactDescription().getOutputModes(); // TODO: CHECK IF THIS WORKS ALSO FOR FUTURE CALC_MODES
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
389 if (modes != null) {
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
390 final OutputMode mode = modes[1];
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
391 doGet(mode.getName(), exportToFile);
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
392 }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
393 }
dbb26bc81843 Testing
gernotbelger
parents: 9031
diff changeset
394
9031
efd2de78d158 work on unit testing
gernotbelger
parents:
diff changeset
395 }

http://dive4elements.wald.intevation.org