/* * Copyright 2011-2014 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.services.blitz.test; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jmock.Mock; import org.testng.annotations.BeforeClass; import ome.io.nio.PixelsService; import ome.io.nio.ThumbnailService; import ome.security.ACLVoter; import ome.security.SecuritySystem; import ome.security.auth.PasswordProvider; import ome.security.auth.PasswordUtil; import ome.services.mail.MailUtil; import ome.system.Roles; import ome.tools.hibernate.ExtendedMetadata; import omero.RType; import omero.cmd.ERR; import omero.cmd.HandleI; import omero.cmd.IRequest; import omero.cmd.OK; import omero.cmd.RequestObjectFactoryRegistry; import omero.cmd.Response; import omero.cmd.State; import omero.cmd.Status; import omero.cmd._HandleTie; import omero.cmd.graphs.GraphRequestFactory; import omero.sys.ParametersI; public class AbstractGraphTest extends AbstractServantTest { Mock adapterMock; Ice.Communicator ic; @Override @BeforeClass protected void setUp() throws Exception { super.setUp(); adapterMock = (Mock) user.ctx.getBean("adapterMock"); adapterMock.setDefaultStub(new FakeAdapter()); ic = ctx.getBean("Ice.Communicator", Ice.Communicator.class); // Register ChgrpI, etc. This happens automatically on the server. RequestObjectFactoryRegistry rofr = new RequestObjectFactoryRegistry( user.ctx.getBean(ExtendedMetadata.class), user.ctx.getBean(ACLVoter.class), user.ctx.getBean(Roles.class), user.ctx.getBean("/OMERO/Pixels", PixelsService.class), user.ctx.getBean("/OMERO/Thumbs", ThumbnailService.class), user.ctx.getBean(MailUtil.class), user.ctx.getBean(PasswordUtil.class), user.ctx.getBean(SecuritySystem.class), user.ctx.getBean(PasswordProvider.class), user.ctx.getBean("graphRequestFactory", GraphRequestFactory.class) ); rofr.setApplicationContext(ctx); rofr.setIceCommunicator(ic); } // // Helpers // protected _HandleTie submit(IRequest req) throws Exception { return submit(req, null); } protected _HandleTie submit(IRequest req, long groupID) throws Exception { Map<String, String> callContext = new HashMap<String, String>(); callContext.put("omero.group", ""+groupID); return submit(req, callContext); } protected _HandleTie submit(IRequest req, Map<String, String> callContext) throws Exception { Ice.Identity id = new Ice.Identity("handle", req.toString()); HandleI handle = new HandleI(1000); handle.setSession(user.sf); handle.initialize(id, req, callContext); handle.run(); // Client side this would need a try/finally { handle.close() } return new _HandleTie(handle); } protected void block(_HandleTie handle, int loops, long pause) throws InterruptedException { for (int i = 0; i < loops && null == handle.getResponse(); i++) { Thread.sleep(pause); } } protected Response assertSuccess(_HandleTie handle) { Response rsp = handle.getResponse(); Status status = handle.getStatus(); assertSuccess(rsp); assertFalse(status.flags.contains(State.FAILURE)); return rsp; } protected Response assertSuccess(Response rsp) { assertNotNull(rsp); if (rsp instanceof ERR) { ERR err = (ERR) rsp; fail(printErr(err)); } return rsp; } protected void assertFailure(_HandleTie handle, String...allowedMessages) { final List<String> msgs = Arrays.asList(allowedMessages); final Response rsp = handle.getResponse(); assertNotNull(rsp); if (rsp instanceof OK) { OK ok = (OK) rsp; fail(ok.toString()); } else { ERR err = (ERR) rsp; if (msgs.size() > 0) { assertTrue(String.format("%s not in %s: %s", err.name, msgs, printErr(err)), msgs.contains(err.name)); } } assertFlag(handle, State.FAILURE); } protected void assertFlag(_HandleTie handle, State s) { Status status = handle.getStatus(); assertTrue(String.format("Looking for %s. Found: %s", s, status.flags), status.flags.contains(s)); } protected void assertDoesExist(String table, long id) throws Exception { List<List<RType>> ids = assertProjection( "select x.id from " +table+" x where x.id = :id", new ParametersI().addId(id)); assertEquals(1, ids.size()); } protected void assertDoesNotExist(String table, long id) throws Exception { List<List<RType>> ids = assertProjection( "select x.id from " +table+" x where x.id = :id", new ParametersI().addId(id)); assertEquals(0, ids.size()); } private String printErr(ERR err) { StringBuilder sb = new StringBuilder(); sb.append(err.toString()); sb.append("\n"); sb.append("==========================================\n"); sb.append("category="); sb.append(err.category); sb.append("\n"); sb.append("name="); sb.append(err.name); sb.append("\n"); sb.append("params="); sb.append(err.parameters); sb.append("\n"); sb.append("==========================================\n"); return sb.toString(); } }