Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.80 KB | None | 0 0
  1. public class EncuentroTest extends TestCase
  2. {
  3. // -----------------------------------------------------------------
  4. // Atributos
  5. // -----------------------------------------------------------------
  6.  
  7. /**
  8. * El socket usado para comunicarse por el jugador 1
  9. */
  10. protected Socket socketJugador1;
  11.  
  12. /**
  13. * El socket usado para comunicarse por el jugador 2
  14. */
  15. protected Socket socketJugador2;
  16.  
  17. /**
  18. * El stream que envía los datos del jugador 1 al encuentro
  19. */
  20. private PrintWriter out1;
  21.  
  22. /**
  23. * Es el stream de donde se leen los datos que llegan por el socket del jugador 1
  24. */
  25. private BufferedReader in1;
  26.  
  27. /**
  28. * El stream que envía los datos del jugador 2 al encuentro
  29. */
  30. private PrintWriter out2;
  31.  
  32. /**
  33. * Es el stream de donde se leen los datos que llegan por el socket del jugador 2
  34. */
  35. private BufferedReader in2;
  36.  
  37. /**
  38. * El administrador de resultados usado por las pruebas
  39. */
  40. private AdministradorResultados adminResultados;
  41.  
  42. /**
  43. * El encuentro sobre el que se realizan las pruebas
  44. */
  45. private Encuentro encuentro;
  46.  
  47. // -----------------------------------------------------------------
  48. // Métodos
  49. // -----------------------------------------------------------------
  50.  
  51. /**
  52. * Construye un escenario en el cual un par de sockets se conectan a un encuentro y simulan ser clientes
  53. */
  54. private void setupEscenario1( )
  55. {
  56. try
  57. {
  58. // Crear el socket del lado del servidor, que espera una conexión
  59. AyudantePruebasEncuentro ayudante1 = new AyudantePruebasEncuentro( );
  60. ayudante1.start( );
  61.  
  62. // Darle tiempo al socket de prepararse
  63. Thread.sleep( 200 );
  64.  
  65. socketJugador1 = new Socket( "localhost", 8888 );
  66. out1 = new PrintWriter( socketJugador1.getOutputStream( ), true );
  67. in1 = new BufferedReader( new InputStreamReader( socketJugador1.getInputStream( ) ) );
  68.  
  69. // Crear el socket del lado del servidor, que espera una conexión
  70. AyudantePruebasEncuentro ayudante2 = new AyudantePruebasEncuentro( );
  71. ayudante2.start( );
  72.  
  73. // Darle tiempo al socket de prepararse
  74. Thread.sleep( 200 );
  75.  
  76. socketJugador2 = new Socket( "localhost", 8888 );
  77. out2 = new PrintWriter( socketJugador2.getOutputStream( ), true );
  78. in2 = new BufferedReader( new InputStreamReader( socketJugador2.getInputStream( ) ) );
  79.  
  80. // Construir el Encuentro
  81. Socket socketEncuentro1 = ayudante1.darSocket( );
  82. Socket socketEncuentro2 = ayudante2.darSocket( );
  83.  
  84. encuentro = new Encuentro( socketEncuentro1, socketEncuentro2, darAdministradorResultados( ) );
  85. encuentro.start( );
  86.  
  87. // Revisar que la fase inicial del encuentro se lleve a cabo correctamente
  88. out1.println( Encuentro.JUGADOR + ":jugador1" );
  89. out2.println( Encuentro.JUGADOR + ":jugador2" );
  90.  
  91. String infoJugador1 = in1.readLine( );
  92. String infoJugador2 = in1.readLine( );
  93.  
  94. assertTrue( "El mensaje enviado no tiene el formato correcto: " + infoJugador1, infoJugador1.startsWith( Encuentro.INFO_JUGADOR + ":jugador1" ) );
  95. assertTrue( "El mensaje enviado no tiene el formato correcto: " + infoJugador2, infoJugador2.startsWith( Encuentro.INFO_JUGADOR + ":jugador2" ) );
  96.  
  97. infoJugador2 = in2.readLine( );
  98. infoJugador1 = in2.readLine( );
  99.  
  100. assertTrue( "El mensaje enviado no tiene el formato correcto: " + infoJugador2, infoJugador2.startsWith( Encuentro.INFO_JUGADOR + ":jugador2" ) );
  101. assertTrue( "El mensaje enviado no tiene el formato correcto: " + infoJugador1, infoJugador1.startsWith( Encuentro.INFO_JUGADOR + ":jugador1" ) );
  102.  
  103. String turno1 = in1.readLine( );
  104. String turno2 = in2.readLine( );
  105.  
  106. assertEquals( "El turno del jugador 1 no es el correcto", Encuentro.PRIMER_TURNO, turno1 );
  107. assertEquals( "El turno del jugador 2 no es el correcto", Encuentro.SEGUNDO_TURNO, turno2 );
  108.  
  109. assertFalse( "El encuentro no debería aparecer como terminado", encuentro.encuentroTerminado( ) );
  110. }
  111. catch( Exception e )
  112. {
  113. e.printStackTrace( );
  114. fail( "Hubo problemas creando el escenario: " + e.getMessage( ) );
  115. }
  116. }
  117.  
  118. /**
  119. * Elimina los objetos y las conexiones construidos para el escenario 1
  120. */
  121. private void terminarEscenario1( )
  122. {
  123. try
  124. {
  125. // Enviar la jugada final
  126. out1.println( Encuentro.JUGADA + ":0,0" );
  127. in2.readLine( );
  128. out2.println( Encuentro.FIN_JUEGO );
  129. in1.readLine( );
  130.  
  131. // Leer el resultado final del encuentro
  132. String resultado1 = in1.readLine( );
  133. String resultado2 = in2.readLine( );
  134.  
  135. assertEquals( "El ganador del encuentro está equivocado", Encuentro.GANADOR + ":jugador1", resultado1 );
  136. assertEquals( "El ganador del encuentro está equivocado", Encuentro.GANADOR + ":jugador1", resultado2 );
  137.  
  138. assertTrue( "El encuentro debería aparecer como terminado", encuentro.encuentroTerminado( ) );
  139.  
  140. out1.close( );
  141. in1.close( );
  142. socketJugador1.close( );
  143.  
  144. out2.close( );
  145. in2.close( );
  146. socketJugador2.close( );
  147.  
  148. adminResultados.desconectarBD( );
  149. }
  150. catch( Exception e )
  151. {
  152. fail( "No se debería lanzar una excepción desconectando: " + e.getMessage( ) );
  153. }
  154. }
  155.  
  156. /**
  157. * Si no existe ya, construye un administrador de resultados y lo retorna. Si ya existía uno, lo retorna.
  158. * @return adminResultados
  159. */
  160. private AdministradorResultados darAdministradorResultados( )
  161. {
  162. if( adminResultados == null )
  163. {
  164. File directorioData = new File( "./test/data" );
  165. System.setProperty( "derby.system.home", directorioData.getAbsolutePath( ) );
  166. Properties configuracion = new Properties( );
  167. configuracion.setProperty( "admin.db.url", "jdbc:derby:testAdmin;create=true" );
  168. configuracion.setProperty( "admin.test.url", "jdbc:derby:testAdmin" );
  169. configuracion.setProperty( "admin.db.driver", "org.apache.derby.jdbc.EmbeddedDriver" );
  170. configuracion.setProperty( "admin.db.shutdown", "jdbc:derby:;shutdown=true" );
  171. configuracion.setProperty( "admin.db.path", "./test/data" );
  172.  
  173. // Construir el administrador
  174. adminResultados = new AdministradorResultados( configuracion );
  175. try
  176. {
  177. adminResultados.conectarABD( );
  178. }
  179. catch( Exception e3 )
  180. {
  181. fail( "No se pudo conectar el administrador a la BD" );
  182. }
  183. }
  184.  
  185. return adminResultados;
  186. }
  187.  
  188. /**
  189. * Verifica que el escenario se construya y se destruya exitosamente
  190. * <b> Métodos a probar: </b> <br>
  191. * setupEscenario1, terminarEscenario1. <br>
  192. * <b> Objetivo: </b> Probar que la preparación y eliminación del escenario de prueba funcionen correctamente. <br>
  193. * <b> Resultados esperados: </b> <br>
  194. * 1. La preparación y eliminación del escenario de prueba debería funcionar sin problema.
  195. */
  196. public void testEncuentro( )
  197. {
  198. setupEscenario1( );
  199.  
  200. terminarEscenario1( );
  201. }
  202.  
  203. /**
  204. * Revisa el comportamiento del encuentro cuando se envían mensajes entre los jugadores. <br>
  205. * <b> Objetivo: </b> Probar que los mensajes entre los participantes del encuentro se envíen correctamente. <br>
  206. * <b> Resultados esperados: </b> <br>
  207. * 1. Al enviar un mensaje por uno de los jugadores, el mensaje que recibe el otro debe ser el mismo.
  208. *
  209. */
  210. public void testEnviarJugada( )
  211. {
  212. setupEscenario1( );
  213.  
  214. try
  215. {
  216. // Enviar el mensaje
  217. String mensajeJugadaEnviado1 = Encuentro.JUGADA + ":1;1";
  218. out1.println( mensajeJugadaEnviado1 );
  219. String mensajeJugadaRecibido1 = in2.readLine( );
  220. assertEquals( "El mensaje fue cambiado por el encuentro", mensajeJugadaEnviado1, mensajeJugadaRecibido1 );
  221.  
  222. // Enviar la respuesta
  223. String mensajeRespuestaEnviada1 = Encuentro.AGUA;
  224. out2.println( mensajeRespuestaEnviada1 );
  225. String mensajeRespuestaRecibida1 = in1.readLine( );
  226. assertEquals( "La respuesta fue cambiado por el encuentro", mensajeRespuestaEnviada1, mensajeRespuestaRecibida1 );
  227.  
  228. // Enviar el mensaje en el otro sentido
  229. String mensajeJugadaEnviado2 = Encuentro.JUGADA + ":1;1";
  230. out2.println( mensajeJugadaEnviado2 );
  231. String mensajeJugadaRecibido2 = in1.readLine( );
  232. assertEquals( "El mensaje fue cambiado por el encuentro", mensajeJugadaEnviado2, mensajeJugadaRecibido2 );
  233.  
  234. // Enviar la respuesta en el otro sentido
  235. String mensajeRespuestaEnviada2 = Encuentro.IMPACTO + ":Galera;false";
  236. out1.println( mensajeRespuestaEnviada2 );
  237. String mensajeRespuestaRecibida2 = in2.readLine( );
  238. assertEquals( "La respuesta fue cambiado por el encuentro", mensajeRespuestaEnviada2, mensajeRespuestaRecibida2 );
  239. }
  240. catch( Exception e3 )
  241. {
  242. fail( "Hubo una falla inesperada: " + e3.getMessage( ) );
  243. }
  244.  
  245. terminarEscenario1( );
  246. }
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement