/******************************************************************************* * 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.client; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.junit.Test; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.ValidationException; import org.simantics.db.service.LifecycleSupport; import org.simantics.db.testing.annotation.Fails; import org.simantics.db.testing.common.TestBase; import org.simantics.db.testing.common.Tests; import org.simantics.db.testing.impl.Configuration; import org.simantics.layer0.Layer0; public class ConnectionTest6 extends TestBase { private static final boolean DEBUG = Configuration.get().debug; private static final String USERNAME = Configuration.get().username; private static final String PASSWORD = Configuration.get().password; private static final int RECONNECT_COUNT = Configuration.get().connectionReconnectCount; private static final int SAVE_COUNT = Configuration.get().connectionSaveCount; private static final boolean SKIP = Configuration.get().skipServerCreation; private static final File WS_DIR = new File(Configuration.get().workspace); private Session session = null; private final String random = "ConnectionTest6" + TestBase.getRandomString(); private final String libraryName = "Library" + random; private final String newInstanceSuffix = "InstanceName" + random; private final String WORK_DIR = "connection6"; @Test @Fails public void test6() throws Exception { if (SKIP) { System.out.println("This test is not valid for remote server."); return; } for (int i=0; i names = new ArrayList(); for (int i=0; i resources = g.getObjects(g.getRootLibrary(), b.ConsistsOf); Resource newResource = null; for (Resource r : resources) { String value = g.getPossibleRelatedValue(r, b.HasName); if (null != value && value.equals(libraryName)) { newResource = r; break; } } if (newResource == null) { throw new ValidationException("Could not find created resource"); } } }); LifecycleSupport ls = session.getService(LifecycleSupport.class); ls.close(); } catch (DatabaseException e) { throw e; } finally { Tests.closeSession(session); } } private Resource getResourceByNameAndRelation(ReadGraph g, Resource parent, Resource relation, String name) throws DatabaseException { Collection resources = g.getObjects(parent, relation); Resource newResource = null; Layer0 b = Layer0.getInstance(g); for (Resource r : resources) { String value = g.getPossibleRelatedValue(r, b.HasName); if (null != value && value.equals(name)) { newResource = r; break; } } return newResource; } private static Resource newResource; String saveTest(final int id) throws Exception { try { session = Tests.getTestHandler().getSession(); final String newInstanceName = "" + id + newInstanceSuffix; final String desc = "" + id; session.syncRequest(new WriteRequest() { @Override public void perform(WriteGraph g) throws DatabaseException { Layer0 b = Layer0.getInstance(g); newResource = g.newResource(); g.claim(newResource, b.InstanceOf, null, b.Type); g.claimLiteral(newResource, b.HasName, newInstanceName); Resource library = getResourceByNameAndRelation(g, g.getRootLibrary(), b.ConsistsOf, libraryName); assertTrue(null != library); g.claim(library, b.ConsistsOf, newResource); g.claimLiteral(newResource, b.HasDescription, desc); } }); LifecycleSupport ls = session.getService(LifecycleSupport.class); session.syncRequest(new ReadRequest() { @Override public void run(ReadGraph g) throws DatabaseException { Layer0 b = Layer0.getInstance(g); Resource library = getResourceByNameAndRelation(g, g.getRootLibrary(), b.ConsistsOf, libraryName); assertTrue(null != library); Resource newResource = getResourceByNameAndRelation(g, library, b.ConsistsOf, newInstanceName); assertTrue(null != newResource); String s = g.getRelatedValue(newResource, b.HasDescription, Bindings.STRING); if (!s.equals(desc)) throw new ValidationException("Value is not correct."); if (!g.isInstanceOf(newResource, b.Type)) throw new ValidationException("Created resource is not an instance of Type"); } }); ls.close(); return newInstanceName; } catch (DatabaseException e) { throw e; } finally { Tests.closeSession(session); } } void checkTest(final List names) throws Exception { try { session = Tests.getTestHandler().getSession(); session.syncRequest(new ReadRequest() { @Override public void run(ReadGraph g) throws DatabaseException { Layer0 b = Layer0.getInstance(g); Resource library = getResourceByNameAndRelation(g, g.getRootLibrary(), b.ConsistsOf, libraryName); assertTrue(null != library); for (String instanceName : names) { Resource instance = getResourceByNameAndRelation(g, library, b.ConsistsOf, instanceName); assertTrue(instance != null); } } }); LifecycleSupport ls = session.getService(LifecycleSupport.class); ls.close(-1, false); if (DEBUG) System.out.println("close done"); } catch (DatabaseException e) { throw e; } finally { Tests.closeSession(session); } } }