@@ -283,6 +283,104 @@ public void PrepareUdpPortAsync_AlreadyListening(int port, SkStackUdpPortHandle
283283 ) ;
284284 }
285285
286+ [ Test ]
287+ public void PrepareUdpPortAsync_EchonetLite ( )
288+ {
289+ using var stream = new PseudoSkStackStream ( ) ;
290+ using var client = new SkStackClient ( stream , logger : CreateLoggerForTestCase ( ) ) ;
291+
292+ Assert . That (
293+ async ( ) => await client . SendUdpEchonetLiteAsync ( buffer : new byte [ ] { 0x00 } ) ,
294+ Throws
295+ . InvalidOperationException
296+ . With
297+ . Property ( nameof ( InvalidOperationException . Message ) )
298+ . Contains ( "not listening" )
299+ ) ;
300+
301+ const SkStackUdpPortHandle PortHandle = SkStackUdpPortHandle . Handle1 ;
302+
303+ // SKTABLE E
304+ stream . ResponseWriter . WriteLine ( "EPORT" ) ;
305+ stream . ResponseWriter . WriteLine ( "0" ) ; // #1
306+ stream . ResponseWriter . WriteLine ( "0" ) ; // #2
307+ stream . ResponseWriter . WriteLine ( "0" ) ; // #3
308+ stream . ResponseWriter . WriteLine ( "0" ) ; // #4
309+ stream . ResponseWriter . WriteLine ( "0" ) ; // #5
310+ stream . ResponseWriter . WriteLine ( "0" ) ; // #6
311+ stream . ResponseWriter . WriteLine ( "OK" ) ;
312+ // SKUDPPORT
313+ stream . ResponseWriter . WriteLine ( "OK" ) ;
314+
315+ SkStackUdpPort preparedPort = default ;
316+
317+ Assert . DoesNotThrowAsync (
318+ async ( ) => preparedPort = await client . PrepareUdpPortAsync ( SkStackKnownPortNumbers . EchonetLite )
319+ ) ;
320+
321+ Assert . That ( preparedPort . IsUnused , Is . False ) ;
322+ Assert . That ( preparedPort . Handle , Is . EqualTo ( PortHandle ) , nameof ( preparedPort . Handle ) ) ;
323+ Assert . That ( preparedPort . Port , Is . EqualTo ( SkStackKnownPortNumbers . EchonetLite ) , nameof ( preparedPort . Port ) ) ;
324+
325+ Assert . That (
326+ async ( ) => await client . SendUdpEchonetLiteAsync ( buffer : new byte [ ] { 0x00 } ) ,
327+ Throws . InstanceOf < SkStackPanaSessionStateException > ( )
328+ ) ;
329+
330+ Assert . That (
331+ stream . ReadSentData ( ) ,
332+ SequenceIs . EqualTo ( $ "SKTABLE E\r \n SKUDPPORT { ( int ) PortHandle } { SkStackKnownPortNumbers . EchonetLite : X4} \r \n ". ToByteSequence ( ) )
333+ ) ;
334+ }
335+
336+ [ Test ]
337+ public void PrepareUdpPortAsync_EchonetLite_AlreadyListening ( )
338+ {
339+ using var stream = new PseudoSkStackStream ( ) ;
340+ using var client = new SkStackClient ( stream , logger : CreateLoggerForTestCase ( ) ) ;
341+
342+ Assert . That (
343+ async ( ) => await client . SendUdpEchonetLiteAsync ( buffer : new byte [ ] { 0x00 } ) ,
344+ Throws
345+ . InvalidOperationException
346+ . With
347+ . Property ( nameof ( InvalidOperationException . Message ) )
348+ . Contains ( "not listening" )
349+ ) ;
350+
351+ const SkStackUdpPortHandle PortHandle = SkStackUdpPortHandle . Handle3 ;
352+
353+ // SKTABLE E
354+ stream . ResponseWriter . WriteLine ( "EPORT" ) ;
355+ stream . ResponseWriter . WriteLine ( "0" ) ; // #1
356+ stream . ResponseWriter . WriteLine ( "0" ) ; // #2
357+ stream . ResponseWriter . WriteLine ( $ "{ SkStackKnownPortNumbers . EchonetLite : D} ") ; // #3
358+ stream . ResponseWriter . WriteLine ( "0" ) ; // #4
359+ stream . ResponseWriter . WriteLine ( "0" ) ; // #5
360+ stream . ResponseWriter . WriteLine ( "0" ) ; // #6
361+ stream . ResponseWriter . WriteLine ( "OK" ) ;
362+
363+ SkStackUdpPort preparedPort = default ;
364+
365+ Assert . DoesNotThrowAsync (
366+ async ( ) => preparedPort = await client . PrepareUdpPortAsync ( SkStackKnownPortNumbers . EchonetLite )
367+ ) ;
368+
369+ Assert . That ( preparedPort . IsUnused , Is . False ) ;
370+ Assert . That ( preparedPort . Handle , Is . EqualTo ( PortHandle ) , nameof ( preparedPort . Handle ) ) ;
371+ Assert . That ( preparedPort . Port , Is . EqualTo ( SkStackKnownPortNumbers . EchonetLite ) , nameof ( preparedPort . Port ) ) ;
372+
373+ Assert . That (
374+ async ( ) => await client . SendUdpEchonetLiteAsync ( buffer : new byte [ ] { 0x00 } ) ,
375+ Throws . InstanceOf < SkStackPanaSessionStateException > ( )
376+ ) ;
377+
378+ Assert . That (
379+ stream . ReadSentData ( ) ,
380+ SequenceIs . EqualTo ( "SKTABLE E\r \n " . ToByteSequence ( ) )
381+ ) ;
382+ }
383+
286384 [ Test ]
287385 public void PrepareUdpPortAsync_NoUnusedPorts ( )
288386 {
0 commit comments