2 * Copyright (c) 1995-2015, Index Data
4 * See the file LICENSE for details.
8 import org.junit.After;
9 import org.junit.AfterClass;
10 import org.junit.Before;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13 import static org.junit.Assert.*;
14 import org.yaz4j.exception.ZoomException;
16 import static java.lang.System.out;
22 public class AsyncConnectionsTest {
38 void setItem(T item) {
43 public AsyncConnectionsTest() {
47 public static void setUpClass() {
51 public static void tearDownClass() {
59 public void tearDown() {
63 * Test async ZOOM operation.
66 public void testBadDatabaseTarget() {
67 out.println("Trying bad async connection...");
68 AsyncConnection conn = new AsyncConnection("z3950.indexdata.dk:210/doesnotexist", 0);
69 conn.option("count", "100");
70 AsyncConnections conns = new AsyncConnections();
72 final Box<Boolean> hadError = new Box<Boolean>(false);
74 conn.setSyntax("sutrs");
76 conn.search(new PrefixQuery("@attr 1=4 utah"));
78 .onError(new AsyncConnection.ErrorHandler() {
80 public void handle(ZoomException e) {
81 out.println("There was an error "+e.getMessage());
82 hadError.setItem(true);
86 } catch (ZoomException ex) {
87 fail(ex.getMessage());
90 assertTrue(hadError.item);
94 * Test async ZOOM operation.
97 public void testBadTarget() {
98 out.println("Trying bad target async connection...");
99 AsyncConnection conn = new AsyncConnection("z3950.indexdata.dk:70000/doesnotexist", 0);
100 conn.option("count", "100");
101 AsyncConnections conns = new AsyncConnections();
103 final Box<Boolean> hadError = new Box<Boolean>(false);
105 conn.setSyntax("sutrs");
107 conn.search(new PrefixQuery("@attr 1=4 utah"));
109 .onError(new AsyncConnection.ErrorHandler() {
111 public void handle(ZoomException e) {
112 out.println("There was an error "+e.getMessage());
113 hadError.setItem(true);
117 } catch (ZoomException ex) {
118 fail(ex.getMessage());
121 assertTrue(hadError.item);
125 * Test async ZOOM operation.
128 public void testSingleTarget() {
129 out.println("Trying async connection...");
130 AsyncConnection conn = new AsyncConnection("z3950.indexdata.dk:210/gils", 0);
131 conn.option("count", "100");
132 AsyncConnections conns = new AsyncConnections();
134 int expectedHitCount = 9;
135 final Box<Long> actualHitCount = new Box<Long>();
136 final Box<Integer> actualRecordCounter = new Box<Integer>(0);
138 conn.setSyntax("sutrs");
140 conn.search(new PrefixQuery("@attr 1=4 utah"));
142 .onSearch(new AsyncConnection.SearchHandler() {
143 public void handle(ResultSet rs) {
144 out.println("Received search, hit count "+rs.getHitCount());
145 actualHitCount.setItem(rs.getHitCount());
148 .onRecord(new AsyncConnection.RecordHandler() {
149 public void handle(Record r) {
150 out.println("Received a record of type "+r.getSyntax());
151 actualRecordCounter.setItem(actualRecordCounter.getItem()+1);
155 } catch (ZoomException ex) {
156 fail(ex.getMessage());
159 assertEquals(expectedHitCount, actualHitCount.item);
160 assertEquals(expectedHitCount, actualRecordCounter.item);
166 * Test async ZOOM operation.
169 public void testMulitTarget() {
170 out.println("Trying async with multile connections...");
171 AsyncConnections conns = new AsyncConnections();
172 AsyncConnection conn = new AsyncConnection("z3950.indexdata.dk:210/gils", 0);
173 conn.option("count", "100");
175 AsyncConnection conn2 = new AsyncConnection("z3950.indexdata.dk:210/marc", 0);
176 conn2.option("count", "100");
178 int expectedHitCount = 19; //for both
179 final Box<Long> actualHitCount = new Box<Long>(0L);
180 final Box<Integer> actualRecordCounter = new Box<Integer>(0);
182 //we need to simplify the API for multiple
183 conn.setSyntax("sutrs");
185 conn.search(new PrefixQuery("@attr 1=4 utah"));
187 .onSearch(new AsyncConnection.SearchHandler() {
188 public void handle(ResultSet rs) {
189 out.println("Received search, hit count "+rs.getHitCount());
190 actualHitCount.setItem(actualHitCount.getItem() + rs.getHitCount());
193 .onRecord(new AsyncConnection.RecordHandler() {
194 public void handle(Record r) {
195 out.println("Received a record of type "+r.getSyntax());
196 actualRecordCounter.setItem(actualRecordCounter.getItem()+1);
199 conn2.setSyntax("marc21");
201 conn2.search(new PrefixQuery("@attr 1=4 computer"));
203 .onSearch(new AsyncConnection.SearchHandler() {
204 public void handle(ResultSet rs) {
205 out.println("Received search, hit count "+rs.getHitCount());
206 actualHitCount.setItem(actualHitCount.getItem() + rs.getHitCount());
209 .onRecord(new AsyncConnection.RecordHandler() {
210 public void handle(Record r) {
211 out.println("Received a record of type "+r.getSyntax());
212 actualRecordCounter.setItem(actualRecordCounter.getItem()+1);
215 .onError(new AsyncConnection.ErrorHandler() {
217 public void handle(ZoomException e) {
218 out.println("Caught error: "+e.getMessage());
222 } catch (ZoomException ex) {
223 fail(ex.getMessage());
226 assertEquals(expectedHitCount, actualHitCount.item);
227 assertEquals(expectedHitCount, actualRecordCounter.item);