]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/SimanticsBug1659Test3.java
Added missing org.simantics.db.{tests,testing} plug-ins.
[simantics/platform.git] / tests / org.simantics.db.tests / src / org / simantics / db / tests / regression / bugs / SimanticsBug1659Test3.java
1 package org.simantics.db.tests.regression.bugs;
2
3 import java.util.UUID;
4
5 import org.junit.Test;
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Resource;
8 import org.simantics.db.Session;
9 import org.simantics.db.WriteGraph;
10 import org.simantics.db.WriteOnlyGraph;
11 import org.simantics.db.common.request.ReadRequest;
12 import org.simantics.db.common.request.WriteOnlyRequest;
13 import org.simantics.db.common.request.WriteRequest;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.db.service.ClusterControl;
16 import org.simantics.db.testing.base.ExistingDatabaseTest;
17 import org.simantics.db.testing.common.TestBase;
18 import org.simantics.layer0.Layer0;
19
20 public class SimanticsBug1659Test3 extends ExistingDatabaseTest {
21     static int LOOP_COUNT = 10;
22     static int CLUSTER_COUNT = 20;
23     static int RESOURCE_COUNT = 10000;
24     static boolean DEBUG = false;
25     Session session;
26     Resource testRoot;
27     ClusterControl clusterControl;
28     @Test
29     public void testSimanticsBug1659_3()
30     throws DatabaseException {
31         session = getSession();
32         clusterControl = getSession().getService(ClusterControl.class);
33         session.syncRequest(new Init());
34         session.syncRequest(new CreateWriteOnly());
35         for (int i=0; i<LOOP_COUNT; ++i) {
36             session.syncRequest(new Query());
37         }
38     }
39     class Init extends WriteRequest {
40         @Override
41         public void perform(WriteGraph g) throws DatabaseException {
42             Layer0 l0 = Layer0.getInstance(g);
43             Resource rl = g.getResource(TestBase.ROOT_LIBRARY_URI);
44             testRoot = g.newResource();
45             g.claim(testRoot, l0.InstanceOf, l0.Library);          
46             g.claim(rl, l0.ConsistsOf, testRoot);
47         }
48     }
49     class CreateWriteOnly extends WriteOnlyRequest {
50         @Override
51         public void perform(WriteOnlyGraph g) throws DatabaseException {
52             Layer0 b = Layer0.getInstance(getSession());
53             for (int j=0; j<CLUSTER_COUNT; ++j) {
54                 Resource root = g.newResource();
55                 g.claim(testRoot, b.ConsistsOf, b.PartOf, root);
56                 g.flushCluster();
57                 for(int i=0; i<RESOURCE_COUNT; i++) {
58                     Resource item = g.newResource();
59                     g.claim(item, b.InstanceOf, null, b.String);
60                     g.claimValue(item, UUID.randomUUID().toString());
61                     g.claim(root, b.ConsistsOf, b.PartOf, item);
62                 }
63             }
64         }
65     }
66     class Query extends ReadRequest {
67         @Override
68         public void run(ReadGraph g) throws DatabaseException {
69             Layer0 l0 = Layer0.getInstance(g);
70             for (Resource r : g.getObjects(testRoot, l0.ConsistsOf)) {
71                 if (DEBUG)
72                     System.out.println("Resource " + r);
73                 for (Resource rr : g.getObjects(r, l0.ConsistsOf)) {
74                         if (!g.isInstanceOf(rr, l0.String))
75                                 fail("Resource " + rr + " is not instance of String.");
76                         if (!g.isInstanceOf(rr, l0.Entity))
77                                 fail("Resource " + rr + " is not instance of Entity.");
78                 }
79             }
80         }
81     }
82 }