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

Sylvain Lebresne resolved CASSANDRA-8728.
-----------------------------------------
    Resolution: Not a Problem

I'm sure no-one will object.

> Unit test support for native protocol
> -------------------------------------
>
>                 Key: CASSANDRA-8728
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8728
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Tests
>            Reporter: Robert Stupp
>            Priority: Minor
>
> Currently we do not have any chance to directly test the native protocol „on 
> the wire“. Especially when coding new protocol features, it’s more a ”blind 
> flight” and basically ”hope” that the code is correct.
> Purpose of this ticket is to provide unit test code that allows testing of 
> native protocol as is. It’s purpose is not to test any CQL stuff as it.
> Since the native protocol is multiplexed and as such is intended to be used 
> concurrently, unit test support should allow concurrent access to a single 
> connection.
> Native protocol test code should work against a single node (for unit testing 
> inside C* source tree) but also be able to handle/emit notifications.
> Test code should be very strict and fail for features/values that are not 
> specified in a specific protocol version.
> Code used in the test classes should be separate to production code to be 
> able to identify possible bugs in production code.
> (Following code should be considered as ”pseudo code”/idea and not as _the_ 
> way to go)
> Establishing a connection:
> {noformat}
> NativeConnection connection = new NativeConnection(host, port, 
> minClientVersion, maxClientVersion);
> connection.setAuthentication(…);
> connection.establish(timeout);
> {noformat}
> (There could be some support to provide host+port in unit tests that start an 
> "embedded" server.)
> Sending (building) frames should be possible using a single class that builds 
> the frame’s byte buffer like this. Additionally it should be able to 
> construct corrupt/invalid frames to check failure-resistance of the server.
> {noformat}
> NativeStream stream = connection.newStream(); // create new stream
> NativeFrame frame = new NativeFrame(version, flags, stream.getId(), opcode);
> frame.addLong(longValue);
> frame.addStringList(str1, str2, …);
> nativeConnection.send(frame);
> {noformat}
> Stream handling:
> Each frame received for a stream goes into the stream’s received-frame-queue 
> and can be polled from it.
> {noformat}
> NativeStream stream = connection.getEventStream();  // or getStream(-1);
> NativeFrame frame = stream.poll(); // get next frame
> {noformat}
> Native protocol events:
> {noformat}
> NativeStream stream = connection.getEventStream();  // or getStream(-1);
> NativeFrame frame = stream.poll(); // get next frame
> // OR
> NativeFrame frame = stream.pollForOpcode(opcode); // get frame with specific 
> opcode
> // OR
> NativeFrame frame = stream.pollForEvent(eventCode); // get frame with 
> specific event code
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to