Package com.tinkerpop.rexster.rexpro

Source Code of com.tinkerpop.rexster.rexpro.AbstractScriptRequestIntegrationTest

package com.tinkerpop.rexster.rexpro;

import com.tinkerpop.rexster.client.RexsterClient;
import com.tinkerpop.rexster.protocol.BitWorks;
import com.tinkerpop.rexster.protocol.msg.ErrorResponseMessage;
import com.tinkerpop.rexster.protocol.msg.RexProMessage;
import com.tinkerpop.rexster.protocol.msg.ScriptRequestMessage;
import com.tinkerpop.rexster.protocol.msg.ScriptResponseMessage;
import com.tinkerpop.rexster.protocol.msg.SessionRequestMessage;
import com.tinkerpop.rexster.protocol.msg.SessionResponseMessage;
import org.junit.Assert;
import org.junit.Test;

import javax.script.SimpleBindings;
import java.util.Map;
import java.util.UUID;

/**
* Tests that the ScriptFilter is behaving as we'd like it to
*
* @author Blake Eggleston (bdeggleston.github.com)
*/
public abstract class AbstractScriptRequestIntegrationTest extends AbstractRexProIntegrationTest {

    @Test
    public void testGraphObjMetaOnSessionlessRequest() throws Exception {
        final RexsterClient client = getClient();

        for (Map.Entry<String, Map<String,String>> entry : getAvailableGraphs(client).entrySet()) {
            final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
            scriptMessage.Script = "graph.addVertex()";
            scriptMessage.LanguageName = "groovy";
            scriptMessage.metaSetInSession(false);
            scriptMessage.metaSetGraphName(entry.getKey());
            scriptMessage.metaSetGraphObjName("graph");
            scriptMessage.setRequestAsUUID(UUID.randomUUID());
            scriptMessage.Session = null;

            RexProMessage inMsg = client.execute(scriptMessage);
            Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
            Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);
        }
    }

    /**
     * Tests that parameterized bindings from one request aren't available in subsequent ones
     */
    @Test
    public void testBindingsDontStickAroundAfterRequests() throws Exception {
        final RexsterClient client = getClient();

        //create a session
        for (Map.Entry<String, Map<String,String>> entry : getAvailableGraphs(client).entrySet()) {
            final SessionRequestMessage outMsg = new SessionRequestMessage();
            outMsg.setRequestAsUUID(UUID.randomUUID());
            outMsg.metaSetGraphName(entry.getKey());

            RexProMessage inMsg = client.execute(outMsg);
            Assert.assertNotNull(inMsg.Session);
            Assert.assertTrue(inMsg instanceof SessionResponseMessage);

            UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

            SimpleBindings b = new SimpleBindings();
            b.put("o", 5);

            final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
            scriptMessage.Script = "o";
            scriptMessage.Bindings.put("o", 5);
            scriptMessage.LanguageName = "groovy";
            scriptMessage.metaSetInSession(true);
            scriptMessage.setRequestAsUUID(UUID.randomUUID());
            scriptMessage.setSessionAsUUID(sessionKey);

            inMsg = client.execute(scriptMessage);
            Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
            Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

            final ScriptRequestMessage scriptMessage2 = new ScriptRequestMessage();
            scriptMessage2.Script = "o";
            scriptMessage2.LanguageName = "groovy";
            scriptMessage2.metaSetInSession(true);
            scriptMessage2.setRequestAsUUID(UUID.randomUUID());
            scriptMessage2.setSessionAsUUID(sessionKey);

            inMsg = client.execute(scriptMessage2);
            Assert.assertNotNull(inMsg.Session);
            Assert.assertTrue(inMsg instanceof ErrorResponseMessage);
            Assert.assertEquals(((ErrorResponseMessage) inMsg).metaGetFlag(), ErrorResponseMessage.SCRIPT_FAILURE_ERROR);
        }
    }

    @Test
    public void testGraphObjMetaOnSessionedRequest() throws Exception {
        final RexsterClient client = getClient();
        RexProMessage inMsg;

        for (Map.Entry<String, Map<String,String>> entry : getAvailableGraphs(client).entrySet()) {
            //create a session
            final SessionRequestMessage outMsg = new SessionRequestMessage();
            outMsg.setRequestAsUUID(UUID.randomUUID());

            inMsg = client.execute(outMsg);
            Assert.assertNotNull(inMsg.Session);
            Assert.assertTrue(inMsg instanceof SessionResponseMessage);

            UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

            //test that it works
            final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
            scriptMessage.Script = "g.addVertex()";
            scriptMessage.LanguageName = "groovy";
            scriptMessage.metaSetInSession(true);
            scriptMessage.metaSetGraphName(entry.getKey());
            scriptMessage.setRequestAsUUID(UUID.randomUUID());
            scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

            inMsg = client.execute(scriptMessage);
            Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
            Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

            // test that it's not available on the next request
            // if the meta flag is not set
            final ScriptRequestMessage scriptMessage2 = new ScriptRequestMessage();
            scriptMessage2.Script = "g.addVertex()";
            scriptMessage2.LanguageName = "groovy";
            scriptMessage2.metaSetInSession(true);
            scriptMessage2.setRequestAsUUID(UUID.randomUUID());
            scriptMessage2.Session = BitWorks.convertUUIDToByteArray(sessionKey);

            inMsg = client.execute(scriptMessage2);
            Assert.assertTrue(inMsg instanceof ErrorResponseMessage);
            Assert.assertEquals(((ErrorResponseMessage) inMsg).metaGetFlag(), ErrorResponseMessage.SCRIPT_FAILURE_ERROR);
        }
    }

    @Test
    public void testGraphObjMetaOnSessionWithExistingGraphObjFails() throws Exception {
        final RexsterClient client = getClient();

        for (Map.Entry<String, Map<String,String>> entry : getAvailableGraphs(client).entrySet()) {
            //create a session
            final SessionRequestMessage outMsg = new SessionRequestMessage();
            outMsg.setRequestAsUUID(UUID.randomUUID());
            outMsg.metaSetGraphName(entry.getKey());

            RexProMessage inMsg = client.execute(outMsg);
            Assert.assertNotNull(inMsg.Session);
            Assert.assertTrue(inMsg instanceof SessionResponseMessage);

            UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

            //try defining a new graph object
            final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
            scriptMessage.Script = "graph.addVertex()";
            scriptMessage.LanguageName = "groovy";
            scriptMessage.metaSetInSession(true);
            scriptMessage.metaSetGraphName("emptygraph");
            scriptMessage.setRequestAsUUID(UUID.randomUUID());
            scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

            inMsg = client.execute(scriptMessage);
            Assert.assertNotNull(inMsg.Session);
            Assert.assertTrue(inMsg instanceof ErrorResponseMessage);
            Assert.assertEquals(ErrorResponseMessage.GRAPH_CONFIG_ERROR, ((ErrorResponseMessage) inMsg).metaGetFlag());
        }
    }

    @Test
    public void testDefiningNonExistentGraphNameFails() throws Exception {
        final RexsterClient client = getClient();

        final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
        scriptMessage.Script = "graph.addVertex()";
        scriptMessage.LanguageName = "groovy";
        scriptMessage.metaSetInSession(false);
        scriptMessage.metaSetGraphName("undefined");
        scriptMessage.metaSetGraphObjName("graph");
        scriptMessage.setRequestAsUUID(UUID.randomUUID());
        scriptMessage.Session = null;

        RexProMessage inMsg = client.execute(scriptMessage);
        Assert.assertTrue(inMsg instanceof ErrorResponseMessage);
        Assert.assertEquals(((ErrorResponseMessage) inMsg).metaGetFlag(), ErrorResponseMessage.GRAPH_CONFIG_ERROR);
    }

    /**
     * Tests that variables introduced in one query are not available in the next
     */
    @Test
    public void testQueryIsolation() throws Exception {
        final RexsterClient client = getClient();
        RexProMessage inMsg;

        //create a session
        final SessionRequestMessage outMsg = new SessionRequestMessage();
        outMsg.setRequestAsUUID(UUID.randomUUID());

        inMsg = client.execute(outMsg);
        Assert.assertNotNull(inMsg.Session);
        Assert.assertTrue(inMsg instanceof SessionResponseMessage);

        UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

        //test that it works
        final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
        scriptMessage.Script = "n = 5\nn";
        scriptMessage.LanguageName = "groovy";
        scriptMessage.metaSetInSession(true);
        scriptMessage.setRequestAsUUID(UUID.randomUUID());
        scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

        // test that 'n' is not available if the isolate meta flag is not set to false
        final ScriptRequestMessage scriptMessage2 = new ScriptRequestMessage();
        scriptMessage2.Script = "m = n + 1";
        scriptMessage2.LanguageName = "groovy";
        scriptMessage2.metaSetInSession(true);
        scriptMessage2.setRequestAsUUID(UUID.randomUUID());
        scriptMessage2.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage2);
        Assert.assertTrue(inMsg instanceof ErrorResponseMessage);
        Assert.assertEquals(((ErrorResponseMessage) inMsg).metaGetFlag(), ErrorResponseMessage.SCRIPT_FAILURE_ERROR);

    }

    @Test
    public void testDisabledQueryIsolation() throws Exception {
        final RexsterClient client = getClient();
        RexProMessage inMsg;

        //create a session
        final SessionRequestMessage outMsg = new SessionRequestMessage();
        outMsg.setRequestAsUUID(UUID.randomUUID());

        inMsg = client.execute(outMsg);
        Assert.assertNotNull(inMsg.Session);
        Assert.assertTrue(inMsg instanceof SessionResponseMessage);

        UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

        //test that it works
        final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
        scriptMessage.Script = "n = 5\nn";
        scriptMessage.LanguageName = "groovy";
        scriptMessage.metaSetInSession(true);
        scriptMessage.metaSetIsolate(false);
        scriptMessage.setRequestAsUUID(UUID.randomUUID());
        scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

        final ScriptRequestMessage scriptMessage2 = new ScriptRequestMessage();
        scriptMessage2.Script = "m = n + 1";
        scriptMessage2.LanguageName = "groovy";
        scriptMessage2.metaSetInSession(true);
        scriptMessage2.setRequestAsUUID(UUID.randomUUID());
        scriptMessage2.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage2);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);
    }

    @Test
    public void testDisabledQueryIsolationInSession() throws Exception {
        final RexsterClient client = getClient();
        RexProMessage inMsg;

        //create a session
        final SessionRequestMessage outMsg = new SessionRequestMessage();
        outMsg.setRequestAsUUID(UUID.randomUUID());

        inMsg = client.execute(outMsg);
        Assert.assertNotNull(inMsg.Session);
        Assert.assertTrue(inMsg instanceof SessionResponseMessage);

        UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

        //test that it works
        final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
        scriptMessage.Script = "n = 5\nn";
        scriptMessage.LanguageName = "groovy";
        scriptMessage.metaSetInSession(true);
        scriptMessage.metaSetIsolate(false);
        scriptMessage.setRequestAsUUID(UUID.randomUUID());
        scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

        // test that 'n' is available if the isolate meta flag is set to false
        final ScriptRequestMessage scriptMessage2 = new ScriptRequestMessage();
        scriptMessage2.Script = "m = n + o";
        scriptMessage2.LanguageName = "groovy";
        scriptMessage2.Bindings.put("o", 5);
        scriptMessage2.metaSetInSession(true);
        scriptMessage2.setRequestAsUUID(UUID.randomUUID());
        scriptMessage2.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage2);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);
    }

    @Test
    public void testTransactionMetaFlagWithoutSession() throws Exception {
        final RexsterClient client = getClient();
        RexProMessage inMsg;

        //create a session
        final SessionRequestMessage outMsg = new SessionRequestMessage();
        outMsg.setRequestAsUUID(UUID.randomUUID());

        inMsg = client.execute(outMsg);
        Assert.assertNotNull(inMsg.Session);
        Assert.assertTrue(inMsg instanceof SessionResponseMessage);

        UUID sessionKey = BitWorks.convertByteArrayToUUID(inMsg.Session);

        //test that it works
        final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
        scriptMessage.Script = "n = 5\nn";
        scriptMessage.LanguageName = "groovy";
        scriptMessage.metaSetInSession(true);
        scriptMessage.metaSetTransaction(true);
        scriptMessage.setRequestAsUUID(UUID.randomUUID());
        scriptMessage.Session = BitWorks.convertUUIDToByteArray(sessionKey);

        inMsg = client.execute(scriptMessage);
        Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
        Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);

    }

    @Test
    public void testTransactionMetaFlagWithSession() throws Exception {
        final RexsterClient client = getClient();

        for (Map.Entry<String, Map<String,String>> entry : getAvailableGraphs(client).entrySet()) {
            final ScriptRequestMessage scriptMessage = new ScriptRequestMessage();
            scriptMessage.Script = "graph.addVertex()";
            scriptMessage.LanguageName = "groovy";
            scriptMessage.metaSetInSession(false);
            scriptMessage.metaSetGraphName(entry.getKey());
            scriptMessage.metaSetGraphObjName("graph");
            scriptMessage.metaSetTransaction(true);
            scriptMessage.setRequestAsUUID(UUID.randomUUID());
            scriptMessage.Session = null;

            RexProMessage inMsg = client.execute(scriptMessage);
            Assert.assertTrue(inMsg instanceof ScriptResponseMessage);
            Assert.assertTrue(((ScriptResponseMessage) inMsg).Results.get() != null);
        }
    }

}
TOP

Related Classes of com.tinkerpop.rexster.rexpro.AbstractScriptRequestIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.