Skip to content

Commit 5c8cd82

Browse files
committed
[test] Expand QuerySessionTest to also cover local XML:DB API
1 parent fc89914 commit 5c8cd82

File tree

1 file changed

+58
-46
lines changed

1 file changed

+58
-46
lines changed

exist-core/src/test/java/org/exist/xmlrpc/QuerySessionTest.java

Lines changed: 58 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import org.exist.TestUtils;
5252
import org.exist.test.ExistWebServer;
5353
import org.junit.*;
54+
import org.junit.runner.RunWith;
55+
import org.junit.runners.Parameterized;
5456
import org.xml.sax.SAXException;
5557
import org.xmldb.api.DatabaseManager;
5658
import org.xmldb.api.base.*;
@@ -59,20 +61,38 @@
5961
import org.xmldb.api.modules.XQueryService;
6062

6163
import java.nio.file.Path;
64+
import java.util.Arrays;
6265
import java.util.Random;
6366
import java.util.concurrent.ExecutorService;
6467
import java.util.concurrent.Executors;
6568
import java.util.concurrent.TimeUnit;
6669

67-
import static org.junit.Assert.assertEquals;
68-
import static org.junit.Assert.fail;
70+
import static org.junit.Assert.*;
6971

72+
@RunWith(Parameterized.class)
7073
public class QuerySessionTest {
7174

75+
@Parameterized.Parameters(name = "{0}")
76+
public static java.util.Collection<Object[]> data() {
77+
return Arrays.asList(new Object[][] {
78+
{ "local", "xmldb:exist://" },
79+
{ "remote", "xmldb:exist://localhost:" + PORT_PLACEHOLDER + "/xmlrpc" }
80+
});
81+
}
82+
83+
@Parameterized.Parameter
84+
public String apiName;
85+
86+
@Parameterized.Parameter(value = 1)
87+
public String baseUri;
88+
89+
private boolean storedTestData = false;
90+
7291
private static final Logger LOG = LogManager.getLogger(QuerySessionTest.class);
7392

7493
@ClassRule
7594
public final static ExistWebServer existWebServer = new ExistWebServer(true, false, true, true);
95+
private static final String PORT_PLACEHOLDER = "${PORT}";
7696

7797
private final static String generateXQ =
7898
"declare function local:random-sequence($length as xs:integer, $G as map(xs:string, item())) {\n"
@@ -101,8 +121,8 @@ public class QuerySessionTest {
101121
"declare variable $n external;" +
102122
"//chapter[@xml:id eq $n]";
103123

104-
private static String getBaseUri() {
105-
return "xmldb:exist://localhost:" + existWebServer.getPort() + "/xmlrpc";
124+
private String getBaseUri() {
125+
return baseUri.replace(PORT_PLACEHOLDER, Integer.toString(existWebServer.getPort()));
106126
}
107127

108128
private final static int N_THREADS = 10;
@@ -111,19 +131,25 @@ private static String getBaseUri() {
111131

112132
private Random random = new Random();
113133

114-
@Test (expected=XMLDBException.class)
134+
@Test
115135
public void manualRelease() throws XMLDBException {
116136
Collection test = DatabaseManager.getCollection(getBaseUri() + "/db/rpctest", TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
117137
XQueryService service = test.getService(XQueryService.class);
118138
ResourceSet result = service.query("//chapter[@xml:id eq 'chapter1']");
119-
assertEquals(1, result.getSize());
139+
assertTrue(result.getSize() > 0);
120140

121-
// clear should release the query result on the server
122-
result.clear();
141+
if (!"local".equals(apiName)) {
142+
// clear should release the query result on the server
143+
result.clear();
123144

124-
// the result has been cleared already. we should get an exception here
125-
Resource members = result.getMembersAsResource();
126-
members.getContent();
145+
// As the result has been cleared already, we should get an exception below
146+
try {
147+
result.getMembersAsResource();
148+
fail("Expected XMLDBException from calling Resource#getMembersAsResource() after ResourceSet#clear() when using the Remote XML:DB API");
149+
} catch (final XMLDBException e) {
150+
assertEquals("Failed to invoke method retrieveAllFirstChunk in class org.exist.xmlrpc.RpcConnection: result set unknown or timed out", e.getMessage());
151+
}
152+
}
127153
}
128154

129155
@Test
@@ -167,42 +193,28 @@ public void run() {
167193
}
168194
}
169195

170-
@BeforeClass
171-
public static void startServer() throws ClassNotFoundException, IllegalAccessException, InstantiationException, XMLDBException, SAXException {
172-
// initialize XML:DB driver
173-
Class<?> cl = Class.forName("org.exist.xmldb.DatabaseImpl");
174-
Database database = (Database) cl.newInstance();
175-
DatabaseManager.registerDatabase(database);
176-
177-
Collection root = DatabaseManager.getCollection(getBaseUri() + "/db", TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
178-
179-
CollectionManagementService mgmt =
180-
root.getService(CollectionManagementService.class);
181-
Collection test = mgmt.createCollection("rpctest");
182-
183-
final TestDataGenerator generator = new TestDataGenerator("xdb", DOC_COUNT);
184-
try {
185-
final Path[] files = generator.generate(test, generateXQ);
186-
for (int i = 0; i < files.length; i++) {
187-
Resource resource = test.createResource(files[i].getFileName().toString(), XMLResource.class);
188-
resource.setContent(files[i].toFile());
189-
test.storeResource(resource);
196+
@Before
197+
public void storeTestData() throws XMLDBException, SAXException {
198+
if (!storedTestData) {
199+
// NOTE(AR) we only need to store the test data once!
200+
final Collection root = DatabaseManager.getCollection(getBaseUri() + "/db", TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
201+
202+
final CollectionManagementService mgmt = root.getService(CollectionManagementService.class);
203+
final Collection test = mgmt.createCollection("rpctest");
204+
205+
final TestDataGenerator generator = new TestDataGenerator("xdb", DOC_COUNT);
206+
try {
207+
final Path[] files = generator.generate(test, generateXQ);
208+
for (int i = 0; i < files.length; i++) {
209+
final Resource resource = test.createResource(files[i].getFileName().toString(), XMLResource.class);
210+
resource.setContent(files[i].toFile());
211+
test.storeResource(resource);
212+
}
213+
} finally {
214+
generator.releaseAll();
190215
}
191-
} finally {
192-
generator.releaseAll();
193-
}
194-
}
195216

196-
@AfterClass
197-
public static void stopServer() throws XMLDBException {
198-
Collection root = DatabaseManager.getCollection(getBaseUri() + "/db", TestUtils.ADMIN_DB_USER, TestUtils.ADMIN_DB_PWD);
199-
CollectionManagementService mgmt =
200-
root.getService(CollectionManagementService.class);
201-
mgmt.removeCollection("rpctest");
202-
203-
Collection config = DatabaseManager.getCollection(getBaseUri() + "/db/system/config/db", "admin", "");
204-
mgmt =
205-
config.getService(CollectionManagementService.class);
206-
mgmt.removeCollection("rpctest");
217+
storedTestData = true;
218+
}
207219
}
208220
}

0 commit comments

Comments
 (0)