1818 */
1919
2020using System ;
21+ using Droog . Beanstalk . Client . Protocol ;
2122using NUnit . Framework ;
2223using System . Linq ;
2324
@@ -40,6 +41,101 @@ public void Dispose_disconnects_from_server() {
4041 Assert . AreEqual ( 1 , _mockSocket . CloseCalled ) ;
4142 }
4243
44+ [ Test ]
45+ public void Socket_disconnection_disposes_client ( ) {
46+ Assert . IsFalse ( _client . IsDisposed ) ;
47+ _mockSocket . Connected = false ;
48+ Assert . IsTrue ( _client . IsDisposed ) ;
49+ }
50+
51+ [ Test ]
52+ public void Network_operation_on_disposed_client_throws ( ) {
53+ _mockSocket . Connected = false ;
54+ try {
55+ _client . CurrentTube = "bob" ;
56+ Assert . Fail ( "didn't throw" ) ;
57+ } catch ( ObjectDisposedException ) {
58+ return ;
59+ } catch ( Exception e ) {
60+ Assert . Fail ( string . Format ( "threw '{0}' instead of ObjectDisposedException" , e ) ) ;
61+ }
62+ }
63+
64+ [ Test ]
65+ public void Out_of_memory_response_throws ( ) {
66+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "OUT_OF_MEMORY\r \n " ) ;
67+ var data = "foo" . AsStream ( ) ;
68+ try {
69+ _client . Put ( 0 , TimeSpan . Zero , TimeSpan . Zero , data , data . Length ) ;
70+ Assert . Fail ( "didn't throw" ) ;
71+ } catch ( InvalidStatusException e ) {
72+ Assert . AreEqual ( ResponseStatus . OutOfMemory , e . Status ) ;
73+ return ;
74+ } catch ( Exception e ) {
75+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
76+ }
77+ }
78+
79+ [ Test ]
80+ public void Internal_error_response_throws ( ) {
81+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "INTERNAL_ERROR\r \n " ) ;
82+ var data = "foo" . AsStream ( ) ;
83+ try {
84+ _client . Put ( 0 , TimeSpan . Zero , TimeSpan . Zero , data , data . Length ) ;
85+ Assert . Fail ( "didn't throw" ) ;
86+ } catch ( InvalidStatusException e ) {
87+ Assert . AreEqual ( ResponseStatus . InternalError , e . Status ) ;
88+ return ;
89+ } catch ( Exception e ) {
90+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
91+ }
92+ }
93+
94+ [ Test ]
95+ public void Draining_response_throws ( ) {
96+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "DRAINING\r \n " ) ;
97+ var data = "foo" . AsStream ( ) ;
98+ try {
99+ _client . Put ( 0 , TimeSpan . Zero , TimeSpan . Zero , data , data . Length ) ;
100+ Assert . Fail ( "didn't throw" ) ;
101+ } catch ( InvalidStatusException e ) {
102+ Assert . AreEqual ( ResponseStatus . Draining , e . Status ) ;
103+ return ;
104+ } catch ( Exception e ) {
105+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
106+ }
107+ }
108+
109+ [ Test ]
110+ public void Bad_format_response_throws ( ) {
111+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "BAD_FORMAT\r \n " ) ;
112+ var data = "foo" . AsStream ( ) ;
113+ try {
114+ _client . Put ( 0 , TimeSpan . Zero , TimeSpan . Zero , data , data . Length ) ;
115+ Assert . Fail ( "didn't throw" ) ;
116+ } catch ( InvalidStatusException e ) {
117+ Assert . AreEqual ( ResponseStatus . BadFormat , e . Status ) ;
118+ return ;
119+ } catch ( Exception e ) {
120+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
121+ }
122+ }
123+
124+ [ Test ]
125+ public void Unknown_command_response_throws ( ) {
126+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "UNKNOWN_COMMAND\r \n " ) ;
127+ var data = "foo" . AsStream ( ) ;
128+ try {
129+ _client . Put ( 0 , TimeSpan . Zero , TimeSpan . Zero , data , data . Length ) ;
130+ Assert . Fail ( "didn't throw" ) ;
131+ } catch ( InvalidStatusException e ) {
132+ Assert . AreEqual ( ResponseStatus . UnknownCommand , e . Status ) ;
133+ return ;
134+ } catch ( Exception e ) {
135+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
136+ }
137+ }
138+
43139 [ Test ]
44140 public void Can_put_data ( ) {
45141 _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "INSERTED 456\r \n " ) ;
@@ -60,6 +156,36 @@ public void Can_put_data_buried() {
60156 Assert . IsTrue ( response . Buried ) ;
61157 }
62158
159+ [ Test ]
160+ public void Put_throws_on_too_much_data ( ) {
161+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "JOB_TOO_BIG\r \n " ) ;
162+ var data = "foo" . AsStream ( ) ;
163+ try {
164+ _client . Put ( 123 , TimeSpan . Zero , TimeSpan . FromSeconds ( 60 ) , data , data . Length ) ;
165+ Assert . Fail ( "didn't throw" ) ;
166+ } catch ( PutFailedException e ) {
167+ Assert . AreEqual ( ResponseStatus . JobTooBig , e . Status ) ;
168+ return ;
169+ } catch ( Exception e ) {
170+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
171+ }
172+ }
173+
174+ [ Test ]
175+ public void Put_throws_on_expected_crlf ( ) {
176+ _mockSocket . Expect ( "put 123 0 60 3\r \n foo\r \n " , "EXPECTED_CRLF\r \n " ) ;
177+ var data = "foo" . AsStream ( ) ;
178+ try {
179+ _client . Put ( 123 , TimeSpan . Zero , TimeSpan . FromSeconds ( 60 ) , data , data . Length ) ;
180+ Assert . Fail ( "didn't throw" ) ;
181+ } catch ( PutFailedException e ) {
182+ Assert . AreEqual ( ResponseStatus . ExpectedCrlf , e . Status ) ;
183+ return ;
184+ } catch ( Exception e ) {
185+ Assert . Fail ( string . Format ( "threw '{0}' instead of InvalidStatusException" , e ) ) ;
186+ }
187+ }
188+
63189 [ Test ]
64190 public void Can_set_tube ( ) {
65191 _mockSocket . Expect ( "use bob\r \n " , "USING bob\r \n " ) ;
@@ -143,7 +269,7 @@ public void Can_TryReserve_with_timeout_timing_out() {
143269 }
144270
145271 [ Test ]
146- public void Can_TryReserve_with_timeout_throwing_deadline_soon ( ) {
272+ public void Can_TryReserve_with_timeout_returning_deadline_soon ( ) {
147273 _mockSocket . Expect ( "reserve-with-timeout 10\r \n " , "DEADLINE_SOON\r \n " ) ;
148274 Job job ;
149275 Assert . AreEqual ( ReservationStatus . DeadlineSoon , _client . TryReserve ( TimeSpan . FromSeconds ( 10 ) , out job ) ) ;
@@ -305,5 +431,63 @@ public void Can_PeekBuried_not_found() {
305431 _mockSocket . Verify ( ) ;
306432 }
307433
434+ [ Test ]
435+ public void Can_Kick ( ) {
436+ _mockSocket . Expect ( "kick 10\r \n " , "KICKED 5\r \n " ) ;
437+ var kicked = _client . Kick ( 10 ) ;
438+ _mockSocket . Verify ( ) ;
439+ Assert . AreEqual ( 5 , kicked ) ;
440+ }
441+
442+ [ Test ]
443+ public void Can_get_job_stats ( ) {
444+ _mockSocket . Expect ( "stats-job 10\r \n " , "OK 21\r \n ---\r \n id: 10\r \n foo: bar\r \n " ) ;
445+ var jobStats = _client . GetJobStats ( 10 ) ;
446+ _mockSocket . Verify ( ) ;
447+ Assert . AreEqual ( "10" , jobStats [ "id" ] ) ;
448+ Assert . AreEqual ( "bar" , jobStats [ "foo" ] ) ;
449+ }
450+
451+ [ Test ]
452+ public void Can_get_job_stats_not_found ( ) {
453+ _mockSocket . Expect ( "stats-job 10\r \n " , "NOT_FOUND\r \n " ) ;
454+ var jobStats = _client . GetJobStats ( 10 ) ;
455+ _mockSocket . Verify ( ) ;
456+ Assert . IsNull ( jobStats ) ;
457+ }
458+
459+ [ Test ]
460+ public void Can_get_tube_stats ( ) {
461+ _mockSocket . Expect ( "stats-tube bob\r \n " , "OK 24\r \n ---\r \n name: bob\r \n foo: bar\r \n " ) ;
462+ var tubeStats = _client . GetTubeStats ( "bob" ) ;
463+ _mockSocket . Verify ( ) ;
464+ Assert . AreEqual ( "bob" , tubeStats [ "name" ] ) ;
465+ Assert . AreEqual ( "bar" , tubeStats [ "foo" ] ) ;
466+ }
467+
468+ [ Test ]
469+ public void Can_get_tube_stats_not_found ( ) {
470+ _mockSocket . Expect ( "stats-tube bob\r \n " , "NOT_FOUND\r \n " ) ;
471+ var tubeStats = _client . GetTubeStats ( "bob" ) ;
472+ _mockSocket . Verify ( ) ;
473+ Assert . IsNull ( tubeStats ) ;
474+ }
475+
476+ [ Test ]
477+ public void Can_get_server_stats ( ) {
478+ _mockSocket . Expect ( "stats\r \n " , "OK 24\r \n ---\r \n name: bob\r \n foo: bar\r \n " ) ;
479+ var serverStats = _client . GetServerStats ( ) ;
480+ _mockSocket . Verify ( ) ;
481+ Assert . AreEqual ( "bob" , serverStats [ "name" ] ) ;
482+ Assert . AreEqual ( "bar" , serverStats [ "foo" ] ) ;
483+ }
484+
485+ [ Test ]
486+ public void Can_list_tubes ( ) {
487+ _mockSocket . Expect ( "list-tubes\r \n " , "OK 23\r \n ---\r \n - default\r \n - other\r \n " ) ;
488+ var tubes = _client . GetTubes ( ) ;
489+ _mockSocket . Verify ( ) ;
490+ Assert . AreEqual ( new [ ] { "default" , "other" } , tubes . OrderBy ( x => x ) . ToArray ( ) ) ;
491+ }
308492 }
309493}
0 commit comments