]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.db.tests/src/org/simantics/db/tests/api/request/misc/RequestParentTest4.java
Multiple reader thread support for db client
[simantics/platform.git] / tests / org.simantics.db.tests / src / org / simantics / db / tests / api / request / misc / RequestParentTest4.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.db.tests.api.request.misc;
13
14 import java.util.Set;
15
16 import org.junit.Test;
17 import org.simantics.db.AsyncReadGraph;
18 import org.simantics.db.ReadGraph;
19 import org.simantics.db.Session;
20 import org.simantics.db.exception.DatabaseException;
21 import org.simantics.db.impl.query.CacheEntry;
22 import org.simantics.db.impl.service.QueryDebug;
23 import org.simantics.db.procedure.SyncMultiListener;
24 import org.simantics.db.procedure.SyncMultiProcedure;
25 import org.simantics.db.request.MultiRead;
26 import org.simantics.db.testing.annotation.Fails;
27 import org.simantics.db.testing.base.ExistingDatabaseTest;
28
29 public class RequestParentTest4 extends ExistingDatabaseTest {
30         
31         @Test
32         @Fails
33         public void test() throws Exception {
34                 
35                 Session session = getSession();
36                 
37                 QueryDebug debug = session.getService(QueryDebug.class);
38                 
39         class Request implements MultiRead<Object> {
40
41             @Override
42             public void perform(ReadGraph graph, SyncMultiProcedure<Object> callback) throws DatabaseException {
43                 callback.execute(graph, new Object());
44                 callback.finished(graph);
45             }
46             
47         }
48                 
49         final Request request1 = new Request();
50         final Request request2 = new Request();
51         
52         session.syncRequest(request1, new SyncMultiListener<Object>() {
53
54             @Override
55             public void exception(ReadGraph graph, Throwable t) {
56             }
57
58             @Override
59             public void execute(ReadGraph graph, Object result) throws DatabaseException {
60                 graph.syncRequest(request2);
61             }
62
63             @Override
64             public boolean isDisposed() {
65                 return false;
66             }
67
68             @Override
69             public void finished(ReadGraph graph) {
70             }
71
72         });
73                 
74                 Set<CacheEntry> parents = debug.getParents(request2);
75                 for(CacheEntry parent : parents) {
76                     if(parent.getOriginalRequest().equals(request1)) fail("Request1 should not be parent of Request2");
77                 }
78                 if(!parents.isEmpty())fail("Request2 should not have parents");
79                 
80         }
81
82 }