1+ using System ;
2+ using System . Buffers ;
3+ using System . IO . Pipelines ;
4+ using System . Threading . Tasks ;
15using Microsoft . VisualStudio . TestTools . UnitTesting ;
26
37namespace RSocket . Tests
48{
59 [ TestClass ]
610 public class ProtocolTests
711 {
12+ Pipe Pipe = new Pipe ( ) ;
13+ ReadOnlySequence < byte > Encode ( string value ) => new ReadOnlySequence < byte > ( System . Text . Encoding . UTF8 . GetBytes ( value ) ) ;
14+ string Decode ( ReadOnlySequence < byte > value ) => System . Text . Encoding . UTF8 . GetString ( value . ToArray ( ) ) ;
15+ void AssertReaderEmpty ( ) => Assert . IsFalse ( Pipe . Reader . TryRead ( out var readresult ) , "Reader not empty!" ) ;
16+
17+
818 [ TestMethod ]
919 public void SimpleInvariantsTest ( )
1020 {
1121 Assert . AreEqual ( 0 , RSocketProtocol . Header . DEFAULT_STREAM , "Default Stream should always be zero." ) ;
12-
1322 Assert . AreEqual ( 1 , RSocketProtocol . MAJOR_VERSION , nameof ( RSocketProtocol . MAJOR_VERSION ) ) ;
1423 Assert . AreEqual ( 0 , RSocketProtocol . MINOR_VERSION , nameof ( RSocketProtocol . MINOR_VERSION ) ) ;
15- }
16-
17- [ TestMethod ]
18- public void StateMachineBasicTest ( )
19- {
20- }
21-
22-
23- [ TestMethod ]
24- public void SetupValidationTest ( )
25- {
24+ AssertReaderEmpty ( ) ;
2625 }
2726
2827 [ TestMethod ]
@@ -84,5 +83,79 @@ public void ExtensionValidationTest()
8483 {
8584 }
8685
86+ [ TestMethod ]
87+ public void SetupValidationTest ( )
88+ {
89+ var message = Write ( new RSocketProtocol . Setup ( 123 , 456 , nameof ( RSocketProtocol . Setup . MetadataMimeType ) , nameof ( RSocketProtocol . Setup . DataMimeType ) ) ) ;
90+ var actual = ReadSetup ( ) ;
91+ Assert . AreEqual ( message . MajorVersion , actual . MajorVersion , nameof ( message . MajorVersion ) ) ;
92+ Assert . AreEqual ( message . MinorVersion , actual . MinorVersion , nameof ( message . MinorVersion ) ) ;
93+ Assert . AreEqual ( message . KeepAlive , actual . KeepAlive , nameof ( message . KeepAlive ) ) ;
94+ Assert . AreEqual ( message . Lifetime , actual . Lifetime , nameof ( message . Lifetime ) ) ;
95+ CollectionAssert . AreEqual ( ( message . ResumeToken ?? new byte [ 0 ] ) , actual . ResumeToken , nameof ( message . ResumeToken ) ) ;
96+ Assert . AreEqual ( message . MetadataMimeType , actual . MetadataMimeType , nameof ( message . MetadataMimeType ) ) ;
97+ Assert . AreEqual ( message . DataMimeType , actual . DataMimeType , nameof ( message . DataMimeType ) ) ;
98+ AssertReaderEmpty ( ) ;
99+ }
100+
101+ [ TestMethod ]
102+ public void SetupWithDataMetadataTest ( )
103+ {
104+ var test = ( metadata : Encode ( "Test Metadata" ) , data : Encode ( "Test Data" ) ) ;
105+
106+ Write ( new RSocketProtocol . Setup ( 123 , 456 , nameof ( RSocketProtocol . Setup . MetadataMimeType ) , nameof ( RSocketProtocol . Setup . DataMimeType ) ) ) ;
107+ var Neither = ReadSetup ( out var metadata , out var data ) ;
108+ Assert . AreEqual ( string . Empty , Decode ( metadata ) , $ "{ nameof ( Neither ) } { nameof ( metadata ) } mismatch!") ;
109+ Assert . AreEqual ( string . Empty , Decode ( data ) , $ "{ nameof ( Neither ) } { nameof ( data ) } mismatch") ;
110+ AssertReaderEmpty ( ) ;
111+
112+ Write ( new RSocketProtocol . Setup ( 123 , 456 , nameof ( RSocketProtocol . Setup . MetadataMimeType ) , nameof ( RSocketProtocol . Setup . DataMimeType ) , data : test . data ) , data : test . data ) ;
113+ var DataOnly = ReadSetup ( out metadata , out data ) ;
114+ Assert . AreEqual ( string . Empty , Decode ( metadata ) , $ "{ nameof ( DataOnly ) } { nameof ( metadata ) } mismatch!") ;
115+ Assert . AreEqual ( Decode ( test . data ) , Decode ( data ) , $ "{ nameof ( DataOnly ) } { nameof ( data ) } mismatch") ;
116+ AssertReaderEmpty ( ) ;
117+
118+ Write ( new RSocketProtocol . Setup ( 123 , 456 , nameof ( RSocketProtocol . Setup . MetadataMimeType ) , nameof ( RSocketProtocol . Setup . DataMimeType ) , metadata : test . metadata ) , metadata : test . metadata ) ;
119+ var MetadataOnly = ReadSetup ( out metadata , out data ) ;
120+ Assert . AreEqual ( Decode ( test . metadata ) , Decode ( metadata ) , $ "{ nameof ( MetadataOnly ) } { nameof ( metadata ) } mismatch!") ;
121+ Assert . AreEqual ( string . Empty , Decode ( data ) , $ "{ nameof ( MetadataOnly ) } { nameof ( data ) } mismatch") ;
122+ AssertReaderEmpty ( ) ;
123+
124+ Write ( new RSocketProtocol . Setup ( 123 , 456 , nameof ( RSocketProtocol . Setup . MetadataMimeType ) , nameof ( RSocketProtocol . Setup . DataMimeType ) , metadata : test . metadata , data : test . data ) , metadata : test . metadata , data : test . data ) ;
125+ var Both = ReadSetup ( out metadata , out data ) ;
126+ Assert . AreEqual ( Decode ( test . metadata ) , Decode ( metadata ) , $ "{ nameof ( Both ) } { nameof ( metadata ) } mismatch!") ;
127+ Assert . AreEqual ( Decode ( test . data ) , Decode ( data ) , $ "{ nameof ( Both ) } { nameof ( data ) } mismatch") ;
128+ AssertReaderEmpty ( ) ;
129+ }
130+
131+
132+ #region Read/Write Helpers
133+ RSocketProtocol . Setup ReadSetup ( ) => ReadSetup ( out var metadata , out var data ) ;
134+ RSocketProtocol . Setup ReadSetup ( out ReadOnlySequence < byte > metadata , out ReadOnlySequence < byte > data ) { var result = new RSocketProtocol . Setup ( Read ( out var reader , RSocketProtocol . Types . Setup ) , ref reader ) ; result . Read ( ref reader , out metadata , out data ) ; Pipe . Reader . AdvanceTo ( reader . Position ) ; return result ; }
135+
136+ RSocketProtocol . Header Read ( out SequenceReader < byte > reader , RSocketProtocol . Types type )
137+ {
138+ Assert . IsTrue ( Pipe . Reader . TryRead ( out var result ) , "Failed to read Pipe." ) ;
139+ var ( Length , IsEndOfMessage ) = RSocketProtocol . MessageFramePeek ( result . Buffer ) ;
140+ reader = new SequenceReader < byte > ( result . Buffer . Slice ( RSocketProtocol . MESSAGEFRAMESIZE , Length ) ) ;
141+ var header = new RSocketProtocol . Header ( ref reader , Length ) ;
142+ Assert . AreEqual ( type , header . Type , "Incorrect Message Type" ) ;
143+ return header ;
144+ }
145+
146+ RSocketProtocol . Setup Write ( RSocketProtocol . Setup message , ReadOnlySequence < byte > data = default , ReadOnlySequence < byte > metadata = default ) { message . WriteFlush ( Pipe . Writer , data : data , metadata : metadata ) . Wait ( ) ; return message ; }
147+ //void Write(RSocketProtocol.Lease message) => message.WriteFlush(Writer).Wait();
148+ //void Write(RSocketProtocol.KeepAlive message) => message.WriteFlush(Writer).Wait();
149+ //void Write(RSocketProtocol.RequestResponse message) => message.WriteFlush(Writer).Wait();
150+ //void Write(RSocketProtocol.RequestFireAndForget message) => message.WriteFlush(Writer).Wait();
151+ //void Write(RSocketProtocol.RequestStream message) => message.WriteFlush(Writer).Wait();
152+ //void Write(RSocketProtocol.RequestChannel message) => message.WriteFlush(Writer).Wait();
153+ //void Write(RSocketProtocol.RequestN message) => message.WriteFlush(Writer).Wait();
154+ //void Write(RSocketProtocol.Cancel message) => message.WriteFlush(Writer).Wait();
155+ void Write ( RSocketProtocol . Payload message ) => message . WriteFlush ( Pipe . Writer ) . Wait ( ) ;
156+ //void Write(RSocketProtocol.Error message) => message.WriteFlush(Writer).Wait();
157+ //void Write(RSocketProtocol.MetadataPush message) => message.WriteFlush(Writer).Wait();
158+ //void Write(RSocketProtocol.Extension message) => message.WriteFlush(Writer).Wait();
159+ #endregion
87160 }
88- }
161+ }
0 commit comments