X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fregression%2Fbugs%2FIssue3420Test1.java;fp=tests%2Forg.simantics.db.tests%2Fsrc%2Forg%2Fsimantics%2Fdb%2Ftests%2Fregression%2Fbugs%2FIssue3420Test1.java;h=f81aa256bee44eb2ecf2b8f9752cd0b3f1d2b1d8;hb=67fd62f9c742337ec80eef658192db198a0efaac;hp=0000000000000000000000000000000000000000;hpb=cde82ba81327d5515fdca362f7f4c70f5103ae80;p=simantics%2Fplatform.git diff --git a/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/Issue3420Test1.java b/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/Issue3420Test1.java new file mode 100644 index 000000000..f81aa256b --- /dev/null +++ b/tests/org.simantics.db.tests/src/org/simantics/db/tests/regression/bugs/Issue3420Test1.java @@ -0,0 +1,187 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.db.tests.regression.bugs; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.Vector; + +import org.junit.Test; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.WriteGraph; +import org.simantics.db.WriteOnlyGraph; +import org.simantics.db.common.request.DelayedWriteRequest; +import org.simantics.db.common.request.ReadRequest; +import org.simantics.db.common.request.WriteOnlyRequest; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.ClusterSetExistException; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.service.ClusteringSupport; +import org.simantics.db.service.XSupport; +import org.simantics.db.testing.base.ExistingDatabaseTest; +import org.simantics.layer0.Layer0; + +/** + * Tests that cluster set can be used to explicitly control clustering. + */ +public class Issue3420Test1 extends ExistingDatabaseTest { + private final boolean DEBUG = false; + private final Vector clusterSets = new Vector(); + private final Vector resources = new Vector(); + @Test + public void test() throws DatabaseException { + Session session = getSession(); + init(); + session.syncRequest(new Init()); + session.syncRequest(new InitW()); + session.syncRequest(new Check()); + init(); + session.syncRequest(new InitWO()); + session.syncRequest(new Check()); + init(); + session.syncRequest(new InitWD()); + initDWKraaKraa(session); + session.syncRequest(new Check()); + session.syncRequest(new InitWD2()); + initDWKraaKraa(session); + session.syncRequest(new Check()); + } + private void init() { + resources.clear(); + clusterSets.clear(); + resources.setSize(1<<17); + clusterSets.setSize(14); + if (DEBUG) + System.out.println("Resource count=" + resources.size() + " cluster sets=" + clusterSets.size()); + } + class Init extends WriteRequest { + @Override + public void perform(WriteGraph g) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(g); + try { + g.newClusterSet(l0.InstanceOf); + } catch (ClusterSetExistException e) { + // Cluster set exist already. No problem. + } + } + } + class InitW extends WriteRequest { + @Override + public void perform(WriteGraph g) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(g); + Resource oldDefault = g.setClusterSet4NewResource(l0.InstanceOf); + assertTrue(null == oldDefault); + for (int i=0; i clusters = new HashMap(); + for (int i=0; i sortedKeys = new TreeSet(); + for (Map.Entry i : clusters.entrySet()) + sortedKeys.add(i.getKey()); + long sum = 0; + for (long key : sortedKeys) { + int count = clusters.get(key); + if (DEBUG) + System.out.println("cluster=" + key + " count=" + count); + sum += count; + } + if (resources.size() != sum) { + String msg = "Resource count mismatch. expected=" + resources.size() + " realized=" + sum; + if (DEBUG) + System.out.println(msg); + fail(msg); + } + } + } +}