[ 
https://issues.apache.org/jira/browse/TINKERPOP-2819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Cole Greer updated TINKERPOP-2819:
----------------------------------
    Description: 
Currently there is a large gap in the testing capabilities of the java driver 
compared to the other GLV's. Part of this gap is the java driver has 
SimpleSocketServer which provides a useful platform to write tests which 
require specific response behaviour from the server. Having such a tool for all 
of the GLV's would allow for testing of many more potential failure cases as 
well as taking a step towards standardizing the testing approach for all GLV's.

This work can be divided into 2 main parts.

Part One: Decoupling SimpleSocketServer from the java driver. This is the most 
disruptive part of the proposed changes. This has already been discussed 
[here|https://lists.apache.org/thread/vd7w43xjzvc5rr0135gql9mxhdlcltr9] on the 
dev list but I will summarize. To avoid having all the GLV's depending on the 
java driver, SimpleSocketServer and it's related classes should be extracted to 
a new module gremlin-tools/gremlin-socket-server. Unfortunately the socket 
server still relies on the following classes in gremlin driver:
tinkerpop.gremlin.driver.message.*
tinkerpop.gremlin.driver.ser.*
tinkerpop.gremlin.driver.MessageSerializer
tinkerpop.gremlin.driver.Tokens
To avoid a cyclic dependency between gremlin-driver and gremlin-socket-server. 
these classes should be moved to another new module gremlin-util which will 
house any classes which are to be shared between the driver and server. Moving 
these classes to a new module and package will break import lines and will need 
to be left until 3.7. 

The full list of classes moved into gremlin-util is as follows:

 
||Old Name/Location||New Name/Location||
|org.apache.tinkerpop.gremlin.driver.MessageSerializer|org.apache.tinkerpop.gremlin.util.MessageSerializer|
|org.apache.tinkerpop.gremlin.driver.Tokens|org.apache.tinkerpop.gremlin.util.Tokens|
|org.apache.tinkerpop.gremlin.driver.message.RequestMessage|org.apache.tinkerpop.gremlin.util.message.RequestMessage|
|org.apache.tinkerpop.gremlin.driver.message.ResponseMessage|org.apache.tinkerpop.gremlin.util.message.ResponseMessage|
|org.apache.tinkerpop.gremlin.driver.message.ResponseResult|org.apache.tinkerpop.gremlin.util.message.ResponseResult|
|org.apache.tinkerpop.gremlin.driver.message.ResponseStatus|org.apache.tinkerpop.gremlin.util.message.ResponseStatus|
|org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode|org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode|
|org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0|org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV1d0|
|org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV2d0|org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV2d0|
|org.apache.tinkerpop.gremlin.driver.ser.AbstractMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.AbstractMessageSerializer|
|org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1|org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1|
|org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV1d0|
|org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV2d0|
|org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV1d0|
|org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV2d0|
|org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV3d0|
|org.apache.tinkerpop.gremlin.driver.ser.MessageTextSerializer|org.apache.tinkerpop.gremlin.util.ser.MessageTextSerializer|
|org.apache.tinkerpop.gremlin.driver.ser.NettyBuffer|org.apache.tinkerpop.gremlin.util.ser.NettyBuffer|
|org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory|org.apache.tinkerpop.gremlin.util.ser.NettyBufferFactory|
|org.apache.tinkerpop.gremlin.driver.ser.RequestMessageGryoSerializer|org.apache.tinkerpop.gremlin.util.ser.RequestMessageGryoSerializer|
|org.apache.tinkerpop.gremlin.driver.ser.ResponseMessageGryoSerializer|org.apache.tinkerpop.gremlin.util.ser.ResponseMessageGryoSerializer|
|org.apache.tinkerpop.gremlin.driver.ser.SerTokens|org.apache.tinkerpop.gremlin.util.ser.SerTokens|
|org.apache.tinkerpop.gremlin.driver.ser.SerializationException|org.apache.tinkerpop.gremlin.util.ser.SerializationException|
|org.apache.tinkerpop.gremlin.driver.ser.Serializers|org.apache.tinkerpop.gremlin.util.ser.Serializers|
|org.apache.tinkerpop.gremlin.driver.ser.binary.RequestMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.binary.RequestMessageSerializer|
|org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.binary.ResponseMessageSerializer|

 

 

The second part of this refactor is to reconfigure the newly extracted 
gremlin-socket-server to be usable by all of the GLV's. This will be done by 
dockerizing the socket server and have the container run during the testing 
phase of the GLV's. There is still some consideration to be done as to how the 
GLV's should best interact with this server. Currently Junit will start and 
stop the server for each individual test, each test has direct access to the 
server object and can control it as needed. The GLV's will not have the same 
direct control over the server. Any control options or behaviour needed will 
either need to be encoded in the server itself as custom behaviour triggered by 
specific request ID's or control through some external wrapper or interface 
around the server. There is still consideration needed as to how this should be 
done. Any comments on desired functionality or behaviour would be greatly 
appreciated.

If at some point in time it is deemed desirable to bring gremlin-socket-server 
to all GLV's in 3.5.x/3.6.x,

  was:
Currently there is a large gap in the testing capabilities of the java driver 
compared to the other GLV's. Part of this gap is the java driver has 
SimpleSocketServer which provides a useful platform to write tests which 
require specific response behaviour from the server. Having such a tool for all 
of the GLV's would allow for testing of many more potential failure cases as 
well as taking a step towards standardizing the testing approach for all GLV's.

This work can be divided into 2 main parts.

Part One: Decoupling SimpleSocketServer from the java driver. This is the most 
disruptive part of the proposed changes. This has already been discussed 
[here|https://lists.apache.org/thread/vd7w43xjzvc5rr0135gql9mxhdlcltr9] on the 
dev list but I will summarize. To avoid having all the GLV's depending on the 
java driver, SimpleSocketServer and it's related classes should be extracted to 
a new module gremlin-tools/gremlin-socket-server. Unfortunately the socket 
server still relies on the following classes in gremlin driver:
tinkerpop.gremlin.driver.message.*
tinkerpop.gremlin.driver.ser.*
tinkerpop.gremlin.driver.MessageSerializer
tinkerpop.gremlin.driver.Tokens
To avoid a cyclic dependency between gremlin-driver and gremlin-socket-server. 
these classes should be moved to another new module gremlin-util which will 
house any classes which are to be shared between the driver and server. Moving 
these classes to a new module and package will break import lines and will need 
to be left until 3.7. If this added testing capability is desired in 3.5 a 
potential solution is to move the classes to the gremlin-util module, but leave 
them in the gremlin.driver package. In initial tests this seems to work without 
issue although it is an unusual way to structure the code and should not be 
considered a long term solution.

The second part of this refactor is to reconfigure the newly extracted 
gremlin-socket-server to be usable by all of the GLV's. My initial thoughts are 
to dockerize the server and have the container run during the testing phase of 
the GLV's. There is still some consideration to be done as to how the GLV's 
should best interact with this server. Currently Junit will start and stop the 
server for each individual test, each test has direct access to the server 
object and can control it as needed. The GLV's will not have the same direct 
control over the server. Any control options or behaviour needed will either 
need to be encoded in the server itself as custom behaviour triggered by 
specific request ID's or control through some external wrapper or interface 
around the server. There is still consideration needed as to how this should be 
done. Any comments on desired functionality or behaviour would be greatly 
appreciated.


> Refactor SimpleSocketServer to be accessible to all GLV's
> ---------------------------------------------------------
>
>                 Key: TINKERPOP-2819
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2819
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: driver
>            Reporter: Cole Greer
>            Priority: Major
>
> Currently there is a large gap in the testing capabilities of the java driver 
> compared to the other GLV's. Part of this gap is the java driver has 
> SimpleSocketServer which provides a useful platform to write tests which 
> require specific response behaviour from the server. Having such a tool for 
> all of the GLV's would allow for testing of many more potential failure cases 
> as well as taking a step towards standardizing the testing approach for all 
> GLV's.
> This work can be divided into 2 main parts.
> Part One: Decoupling SimpleSocketServer from the java driver. This is the 
> most disruptive part of the proposed changes. This has already been discussed 
> [here|https://lists.apache.org/thread/vd7w43xjzvc5rr0135gql9mxhdlcltr9] on 
> the dev list but I will summarize. To avoid having all the GLV's depending on 
> the java driver, SimpleSocketServer and it's related classes should be 
> extracted to a new module gremlin-tools/gremlin-socket-server. Unfortunately 
> the socket server still relies on the following classes in gremlin driver:
> tinkerpop.gremlin.driver.message.*
> tinkerpop.gremlin.driver.ser.*
> tinkerpop.gremlin.driver.MessageSerializer
> tinkerpop.gremlin.driver.Tokens
> To avoid a cyclic dependency between gremlin-driver and 
> gremlin-socket-server. these classes should be moved to another new module 
> gremlin-util which will house any classes which are to be shared between the 
> driver and server. Moving these classes to a new module and package will 
> break import lines and will need to be left until 3.7. 
> The full list of classes moved into gremlin-util is as follows:
>  
> ||Old Name/Location||New Name/Location||
> |org.apache.tinkerpop.gremlin.driver.MessageSerializer|org.apache.tinkerpop.gremlin.util.MessageSerializer|
> |org.apache.tinkerpop.gremlin.driver.Tokens|org.apache.tinkerpop.gremlin.util.Tokens|
> |org.apache.tinkerpop.gremlin.driver.message.RequestMessage|org.apache.tinkerpop.gremlin.util.message.RequestMessage|
> |org.apache.tinkerpop.gremlin.driver.message.ResponseMessage|org.apache.tinkerpop.gremlin.util.message.ResponseMessage|
> |org.apache.tinkerpop.gremlin.driver.message.ResponseResult|org.apache.tinkerpop.gremlin.util.message.ResponseResult|
> |org.apache.tinkerpop.gremlin.driver.message.ResponseStatus|org.apache.tinkerpop.gremlin.util.message.ResponseStatus|
> |org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode|org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode|
> |org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0|org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV1d0|
> |org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV2d0|org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV2d0|
> |org.apache.tinkerpop.gremlin.driver.ser.AbstractMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.AbstractMessageSerializer|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1|org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV1d0|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV2d0|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV1d0|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV2d0|
> |org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0|org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV3d0|
> |org.apache.tinkerpop.gremlin.driver.ser.MessageTextSerializer|org.apache.tinkerpop.gremlin.util.ser.MessageTextSerializer|
> |org.apache.tinkerpop.gremlin.driver.ser.NettyBuffer|org.apache.tinkerpop.gremlin.util.ser.NettyBuffer|
> |org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory|org.apache.tinkerpop.gremlin.util.ser.NettyBufferFactory|
> |org.apache.tinkerpop.gremlin.driver.ser.RequestMessageGryoSerializer|org.apache.tinkerpop.gremlin.util.ser.RequestMessageGryoSerializer|
> |org.apache.tinkerpop.gremlin.driver.ser.ResponseMessageGryoSerializer|org.apache.tinkerpop.gremlin.util.ser.ResponseMessageGryoSerializer|
> |org.apache.tinkerpop.gremlin.driver.ser.SerTokens|org.apache.tinkerpop.gremlin.util.ser.SerTokens|
> |org.apache.tinkerpop.gremlin.driver.ser.SerializationException|org.apache.tinkerpop.gremlin.util.ser.SerializationException|
> |org.apache.tinkerpop.gremlin.driver.ser.Serializers|org.apache.tinkerpop.gremlin.util.ser.Serializers|
> |org.apache.tinkerpop.gremlin.driver.ser.binary.RequestMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.binary.RequestMessageSerializer|
> |org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer|org.apache.tinkerpop.gremlin.util.ser.binary.ResponseMessageSerializer|
>  
>  
> The second part of this refactor is to reconfigure the newly extracted 
> gremlin-socket-server to be usable by all of the GLV's. This will be done by 
> dockerizing the socket server and have the container run during the testing 
> phase of the GLV's. There is still some consideration to be done as to how 
> the GLV's should best interact with this server. Currently Junit will start 
> and stop the server for each individual test, each test has direct access to 
> the server object and can control it as needed. The GLV's will not have the 
> same direct control over the server. Any control options or behaviour needed 
> will either need to be encoded in the server itself as custom behaviour 
> triggered by specific request ID's or control through some external wrapper 
> or interface around the server. There is still consideration needed as to how 
> this should be done. Any comments on desired functionality or behaviour would 
> be greatly appreciated.
> If at some point in time it is deemed desirable to bring 
> gremlin-socket-server to all GLV's in 3.5.x/3.6.x,



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to