@@ -3863,169 +3863,6 @@ public void HelloAuthErrorTest()
38633863 ClassicAssert . AreEqual ( 2 , ( int ) resultDict [ "proto" ] ) ;
38643864 }
38653865
3866- [ Test ]
3867- public async Task InlineCommandParseTest ( )
3868- {
3869- var clientName = "name" ;
3870- var key = "key" ;
3871- var value = "1" ;
3872-
3873- using var c = TestUtils . GetGarnetClientSession ( rawResult : true , rawSend : true ) ;
3874- c . Connect ( ) ;
3875-
3876- // Test inline command without arguments
3877- var response = await c . ExecuteAsync ( "HELLO" ) ;
3878- ClassicAssert . AreEqual ( '*' , response [ 0 ] ) ;
3879- // Test lowercase
3880- response = await c . ExecuteAsync ( "hello 3" ) ;
3881- ClassicAssert . AreEqual ( '%' , response [ 0 ] ) ;
3882- // Test extranous whitespace
3883- response = await c . ExecuteAsync ( "HELLO 2\t " ) ;
3884- ClassicAssert . AreEqual ( '*' , response [ 0 ] ) ;
3885- // References accept this too
3886- response = await c . ExecuteAsync ( "HElLO 3 SETNAME a SETNAME b" ) ;
3887- ClassicAssert . AreEqual ( '%' , response [ 0 ] ) ;
3888- // Test setting client name inline
3889- response = await c . ExecuteAsync ( $ "HELLO 2 SETNAME { clientName } ") ;
3890- ClassicAssert . AreEqual ( '*' , response [ 0 ] ) ;
3891-
3892- // Should fail due to missing argument. We test such failures to ensure
3893- // readhead is not messed up and commands can be placed afterwards.
3894- response = await c . ExecuteAsync ( "CLIENT" ) ;
3895- ClassicAssert . AreEqual ( '-' , response [ 0 ] ) ;
3896- c . RawResult = false ;
3897- // Test client name was actually set
3898- response = await c . ExecuteAsync ( "CLIENT GETNAME" ) ;
3899- ClassicAssert . AreEqual ( clientName , response ) ;
3900- c . RawResult = true ;
3901-
3902- // Test inline ping
3903- response = await c . ExecuteAsync ( "PING" ) ;
3904- ClassicAssert . AreEqual ( "+PONG\r \n " , response ) ;
3905-
3906- // Test accepting both CRLF and LF as terminating characters.
3907- response = await c . ExecuteAsync ( "PING\n PING" ) ;
3908- ClassicAssert . AreEqual ( "+PONG\r \n +PONG\r \n " , response ) ;
3909- // CR is a valid separator
3910- response = await c . ExecuteAsync ( "PING\r PING" ) ;
3911- ClassicAssert . AreEqual ( "$4\r \n PING\r \n " , response ) ;
3912- // As is TAB
3913- response = await c . ExecuteAsync ( "PING\t PING" ) ;
3914- ClassicAssert . AreEqual ( "$4\r \n PING\r \n " , response ) ;
3915-
3916- // Test command failure
3917- response = await c . ExecuteAsync ( "PIN" ) ;
3918- ClassicAssert . AreEqual ( '-' , response [ 0 ] ) ;
3919-
3920- // Test ordinary commands
3921- response = await c . ExecuteAsync ( $ "SET { key } { value } ") ;
3922- ClassicAssert . AreEqual ( "+OK\r \n " , response ) ;
3923- response = await c . ExecuteAsync ( $ "GET { key } ") ;
3924- ClassicAssert . AreEqual ( $ "${ value . Length } \r \n { value } \r \n ", response ) ;
3925- response = await c . ExecuteAsync ( $ "EXISTS { key } ") ;
3926- ClassicAssert . AreEqual ( ":1\r \n " , response ) ;
3927- response = await c . ExecuteAsync ( $ "DEL { key } ") ;
3928- ClassicAssert . AreEqual ( ":1\r \n " , response ) ;
3929-
3930- // Test command failure in normal RESP doesn't interfere
3931- response = await c . ExecuteAsync ( "*1\r \n $3\r \n PIN" ) ;
3932- ClassicAssert . AreEqual ( '-' , response [ 0 ] ) ;
3933-
3934- // Test quit
3935- response = await c . ExecuteAsync ( "QUIT" ) ;
3936- ClassicAssert . AreEqual ( "+OK\r \n " , response ) ;
3937- }
3938-
3939- [ Test ]
3940- public async Task InlineCommandEscapeTest ( )
3941- {
3942- var key = "key" ;
3943-
3944- using var c = TestUtils . GetGarnetClientSession ( rawResult : true , rawSend : true ) ;
3945- c . Connect ( ) ;
3946-
3947- var response = await c . ExecuteAsync ( "PING \\ t" ) ;
3948- ClassicAssert . AreEqual ( "$2\r \n \\ t\r \n " , response ) ;
3949- // With ' quoting most escapes aren't recognized
3950- response = await c . ExecuteAsync ( "PING '\\ t'" ) ;
3951- ClassicAssert . AreEqual ( "$2\r \n \\ t\r \n " , response ) ;
3952- // Except this one form of escaping
3953- response = await c . ExecuteAsync ( "PING '\' \\ t\' '" ) ;
3954- ClassicAssert . AreEqual ( "$4\r \n '\\ t'\r \n " , response ) ;
3955-
3956- // Test escape
3957- response = await c . ExecuteAsync ( "PING \" \\ t\" " ) ;
3958- ClassicAssert . AreEqual ( "$1\r \n \t \r \n " , response ) ;
3959-
3960- // This should lead to quoting failure
3961- response = await c . ExecuteAsync ( @"PING ""\\\""" ) ;
3962- ClassicAssert . AreEqual ( '-' , response [ 0 ] ) ;
3963- // This should work
3964- response = await c . ExecuteAsync ( @"PING ""\\\\""" ) ;
3965- ClassicAssert . AreEqual ( "$2\r \n \\ \\ \r \n " , response ) ;
3966-
3967- // Incomplete hex escape 1
3968- response = await c . ExecuteAsync ( "PING \" \\ x\" " ) ;
3969- ClassicAssert . AreEqual ( "$1\r \n x\r \n " , response ) ;
3970- // Incomplete hex escape 2
3971- response = await c . ExecuteAsync ( "PING \" \\ x0\" " ) ;
3972- ClassicAssert . AreEqual ( "$2\r \n x0\r \n " , response ) ;
3973- // Invalid hex escape
3974- response = await c . ExecuteAsync ( "PING \" \\ xGG\" " ) ;
3975- ClassicAssert . AreEqual ( "$3\r \n xGG\r \n " , response ) ;
3976- // Complete hex escape
3977- response = await c . ExecuteAsync ( "PING \" \\ x0A\" " ) ;
3978- ClassicAssert . AreEqual ( "$1\r \n \n \r \n " , response ) ;
3979-
3980- // Test escapes in command position
3981- response = await c . ExecuteAsync ( @"""\x50\x49\x4E\x47""" ) ;
3982- ClassicAssert . AreEqual ( "+PONG\r \n " , response ) ;
3983- response = await c . ExecuteAsync ( @"""P\i\x6Eg""" ) ;
3984- ClassicAssert . AreEqual ( "+PONG\r \n " , response ) ;
3985-
3986- // Test value being passed
3987- response = await c . ExecuteAsync ( $ "SET { key } \" a\\ x0Ab\" ") ;
3988- ClassicAssert . AreEqual ( "+OK\r \n " , response ) ;
3989- response = await c . ExecuteAsync ( $ "GET { key } ") ;
3990- ClassicAssert . AreEqual ( "$3\r \n a\n b\r \n " , response ) ;
3991- }
3992-
3993- [ Test ]
3994- public async Task InlineCommandQuoteTest ( )
3995- {
3996- using var c = TestUtils . GetGarnetClientSession ( rawResult : true , rawSend : true ) ;
3997- c . Connect ( ) ;
3998-
3999- // Test quoted argument
4000- var response = await c . ExecuteAsync ( "ping \" hello world\" " ) ;
4001- ClassicAssert . AreEqual ( "$11\r \n hello world\r \n " , response ) ;
4002-
4003- // Test quoting failure
4004- // We need to test failures too to be sure readHead is reset right,
4005- // and that there are no leftovers that would interfere with future commands.
4006- response = await c . ExecuteAsync ( "PING 'unfinished quote" ) ;
4007- ClassicAssert . AreEqual ( '-' , response [ 0 ] ) ;
4008-
4009- // Test empty and short strings
4010- response = await c . ExecuteAsync ( "ECHO ''" ) ;
4011- ClassicAssert . AreEqual ( "$0\r \n \r \n " , response ) ;
4012-
4013- response = await c . ExecuteAsync ( "ECHO 'a'" ) ;
4014- ClassicAssert . AreEqual ( "$1\r \n a\r \n " , response ) ;
4015-
4016- // We can even accept commands formed like this
4017- response = await c . ExecuteAsync ( "\" PING\" \t word " ) ;
4018- ClassicAssert . AreEqual ( "$4\r \n word\r \n " , response ) ;
4019- response = await c . ExecuteAsync ( "PINg \" hello 'world'!\" " ) ;
4020- ClassicAssert . AreEqual ( "$14\r \n hello 'world'!\r \n " , response ) ;
4021- response = await c . ExecuteAsync ( "P'ING' ab" ) ;
4022- ClassicAssert . AreEqual ( "$2\r \n ab\r \n " , response ) ;
4023-
4024- // Extension
4025- response = await c . ExecuteAsync ( "PING '\" '\" ''" ) ;
4026- ClassicAssert . AreEqual ( "$4\r \n \" '\" '\r \n " , response ) ;
4027- }
4028-
40293866 [ Test ]
40303867 [ TestCase ( [ 2 , "$-1\r \n " , "$1\r \n " , "*4" , '*' ] , Description = "RESP2 output" ) ]
40313868 [ TestCase ( [ 3 , "_\r \n " , "," , "%2" , '~' ] , Description = "RESP3 output" ) ]
0 commit comments