blob: a036248b34f829f8514376848e1dffac8f867a29 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.groovy.jsr223;
import org.junit.Test;
import java.util.Optional;
import static org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinScriptChecker.EMPTY_RESULT;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
public class GremlinScriptCheckerTest {
@Test
public void shouldNotFindAResult() {
final GremlinScriptChecker.Result r = GremlinScriptChecker.parse("g.with(true).V().out('knows')");
assertEquals(Optional.empty(), r.getTimeout());
assertEquals(Optional.empty(), r.getRequestId());
}
@Test
public void shouldReturnEmpty() {
final GremlinScriptChecker.Result r = GremlinScriptChecker.parse("");
assertSame(EMPTY_RESULT, r);
assertEquals(Optional.empty(), r.getTimeout());
assertEquals(Optional.empty(), r.getRequestId());
}
@Test
public void shouldNotFindTimeoutCozWeCommentedItOut() {
assertEquals(Optional.empty(), GremlinScriptChecker.parse("g.\n" +
" // with('evaluationTimeout', 1000L).\n" +
" with(true).V().out('knows')").getTimeout());
}
@Test
public void shouldIdentifyTimeoutWithOddSpacing() {
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout' , 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with('scriptEvaluationTimeout' , 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout',1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyRequestIdWithOddSpacing() {
assertEquals("4F53FB59-CFC9-4984-B477-452073A352FD", GremlinScriptChecker.parse("g.with('requestId' , '4F53FB59-CFC9-4984-B477-452073A352FD').with(true).V().out('knows')").
getRequestId().get());
assertEquals("4F53FB59-CFC9-4984-B477-452073A352FD", GremlinScriptChecker.parse("g.with('requestId' , '4F53FB59-CFC9-4984-B477-452073A352FD').with(true).V().out('knows')").
getRequestId().get());
assertEquals("4F53FB59-CFC9-4984-B477-452073A352FD", GremlinScriptChecker.parse("g.with('requestId','4F53FB59-CFC9-4984-B477-452073A352FD').with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyRequestIdWithEmbeddedQuote() {
assertEquals("te\"st", GremlinScriptChecker.parse("g.with('requestId','te\"st').with(true).V().out('knows')").
getRequestId().get());
assertEquals("te\\\"st", GremlinScriptChecker.parse("g.with('requestId', \"te\\\"st\").with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyTimeoutWithLowerL() {
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout', 1000l).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with('scriptEvaluationTimeout', 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyTimeoutWithNoL() {
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout', 1000).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with('scriptEvaluationTimeout', 1000).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyTimeoutAsStringKeySingleQuoted() {
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout', 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with('scriptEvaluationTimeout', 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyRequestIdAsStringKeySingleQuoted() {
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with('requestId', 'db024fca-ed15-4375-95de-4c6106aef895').with(true).V().out('knows')").
getRequestId().get());
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(\"requestId\", 'db024fca-ed15-4375-95de-4c6106aef895').with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyTimeoutAsStringKeyDoubleQuoted() {
assertEquals(1000, GremlinScriptChecker.parse("g.with(\"evaluationTimeout\", 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with(\"scriptEvaluationTimeout\", 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyRequestIdAsStringKeyDoubleQuoted() {
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(\"requestId\", \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(\"requestId\", \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyTimeoutAsTokenKey() {
assertEquals(1000, GremlinScriptChecker.parse("g.with(Tokens.ARGS_EVAL_TIMEOUT, 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with(Tokens.ARGS_SCRIPT_EVAL_TIMEOUT, 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyRequestIdAsTokenKey() {
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(Tokens.REQUEST_ID, \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(Tokens.REQUEST_ID, \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyTimeoutAsTokenKeyWithoutClassName() {
assertEquals(1000, GremlinScriptChecker.parse("g.with(ARGS_EVAL_TIMEOUT, 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
assertEquals(1000, GremlinScriptChecker.parse("g.with(ARGS_SCRIPT_EVAL_TIMEOUT, 1000L).with(true).V().out('knows')").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyRequestIdAsTokenKeyWithoutClassName() {
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(REQUEST_ID, \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", GremlinScriptChecker.parse("g.with(REQUEST_ID, \"db024fca-ed15-4375-95de-4c6106aef895\").with(true).V().out('knows')").
getRequestId().get());
}
@Test
public void shouldIdentifyMultipleTimeouts() {
assertEquals(6000, GremlinScriptChecker.parse("g.with('evaluationTimeout', 1000L).with(true).V().out('knows');" +
"g.with('evaluationTimeout', 1000L).with(true).V().out('knows');\n" +
" //g.with('evaluationTimeout', 1000L).with(true).V().out('knows');\n" +
" /* g.with('evaluationTimeout', 1000L).with(true).V().out('knows');*/\n" +
" /* \n" +
"g.with('evaluationTimeout', 1000L).with(true).V().out('knows'); \n" +
"*/ \n" +
" g.with('evaluationTimeout', 1000L).with(true).V().out('knows');\n" +
" g.with(Tokens.ARGS_SCRIPT_EVAL_TIMEOUT, 1000L).with(true).V().out('knows');\n" +
" g.with(ARGS_EVAL_TIMEOUT, 1000L).with(true).V().out('knows');\n" +
" g.with('scriptEvaluationTimeout', 1000L).with(true).V().out('knows');").
getTimeout().get().longValue());
}
@Test
public void shouldIdentifyMultipleRequestIds() {
assertEquals("test9", GremlinScriptChecker.parse("g.with('requestId', 'test1').with(true).V().out('knows');" +
"g.with('requestId', 'test2').with(true).V().out('knows');\n" +
" //g.with('requestId', 'test3').with(true).V().out('knows');\n" +
" /* g.with('requestId', 'test4').with(true).V().out('knows');*/\n" +
" /* \n" +
"g.with('requestId', 'test5').with(true).V().out('knows'); \n" +
"*/ \n" +
" g.with('requestId', 'test6').with(true).V().out('knows');\n" +
" g.with(Tokens.REQUEST_ID, 'test7').with(true).V().out('knows');\n" +
" g.with(REQUEST_ID, 'test8').with(true).V().out('knows');\n" +
" g.with('requestId', 'test9').with(true).V().out('knows');").
getRequestId().get());
}
@Test
public void shouldFindAllResults() {
final GremlinScriptChecker.Result r = GremlinScriptChecker.parse(
"g.with('evaluationTimeout', 1000).with(true).with(REQUEST_ID, \"db024fca-ed15-4375-95de-4c6106aef895\").V().out('knows')");
assertEquals(1000, r.getTimeout().get().longValue());
assertEquals("db024fca-ed15-4375-95de-4c6106aef895", r.getRequestId().get());
}
@Test
public void shouldParseLong() {
assertEquals(1000, GremlinScriptChecker.parse("g.with('evaluationTimeout', 1000L).addV().property(id, 'blue').as('b').\n" +
" addV().property(id, 'orange').as('o').\n" +
" addV().property(id, 'red').as('r').\n" +
" addV().property(id, 'green').as('g').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('b').\n" +
" addE('bridge').from('g').to('o').\n" +
" addE('bridge').from('g').to('r').\n" +
" addE('bridge').from('g').to('r').\n" +
" addE('bridge').from('o').to('b').\n" +
" addE('bridge').from('o').to('b').\n" +
" addE('bridge').from('o').to('r').\n" +
" addE('bridge').from('o').to('r').iterate()").
getTimeout().get().longValue());
}
}