From 29c4feabe125c1fc94abe03132c8a224b76960f0 Mon Sep 17 00:00:00 2001 From: Davide Pesavento Date: Tue, 4 Mar 2008 01:25:55 +0100 Subject: [PATCH] Small update of PQ_Network.tex --- doc/PdQ/PQ_Network.tex | 327 +++++++++++++++++++++++++- network_test_diagram/129419.diagram | 28 ++- network_test_diagram/network_test_diagram.prj | 40 +++- 3 files changed, 377 insertions(+), 18 deletions(-) diff --git a/doc/PdQ/PQ_Network.tex b/doc/PdQ/PQ_Network.tex index 7017a32..9998792 100644 --- a/doc/PdQ/PQ_Network.tex +++ b/doc/PdQ/PQ_Network.tex @@ -48,7 +48,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \item \texttt{private void changeState() [slot]} \begin{itemize} \item \textbf{Ambiente}: viene invocato il metodo \\\verb!_testedObject->changeState(StreamSocket::Connected)!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_testedObject->_state == StreamSocket::Connected! \item \verb!_testedObject->state() == StreamSocket::Connected! @@ -68,7 +68,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \hline \end{tabular} \\\\Viene invocato il metodo \verb!_testedObject->sendChatMessage(msg)!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForReadyRead() == true! \item \verb!QString(_serverStub->readAll()) == output! @@ -112,7 +112,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \hline \end{tabular} \\\\Si costruisce l'oggetto \verb!Move m(id, Point(x, y, z))! e poi viene invocato il metodo \verb!_testedObject->sendMove(m)!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForReadyRead() == true! \item \verb!QString(_serverStub->readAll()) == output! @@ -141,10 +141,10 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \begin{itemize} \item \textbf{Ambiente}: vengono invocati i metodi: \begin{itemize} - \item \verb!_testedObject->changeState(Connected)!; + \item \verb!_testedObject->changeState(StreamSocket::Connected)!; \item \verb!_testedObject->openStream()!. \end{itemize} - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForReadyRead() == true! \item \verb!QString(_serverStub->readAll()) ==!\\\verb!QString("")! @@ -165,7 +165,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \hline \end{tabular} \\\\Viene invocato il metodo \verb!_serverStub->write(input.toUtf8())!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForBytesWritten(3000) == true! \item \verb!_receivedChatMessageSpy.count() == 1! @@ -193,7 +193,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \hline \end{tabular} \\\\Viene invocato il metodo \verb!_serverStub->write(input.toUtf8())!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForBytesWritten(3000) == true! \item \verb!_receivedMoveSpy.count() == 1! @@ -212,7 +212,7 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \hline \end{tabular} \\\\\texttt{input} è inizializzato a \verb!QString("")!. Viene poi invocato il metodo \verb!_serverStub->write(input.toUtf8())!. - \item \textbf{Controlli}: + \item \textbf{Postcondizioni}: \begin{itemize} \item \verb!_serverStub->waitForBytesWritten(3000) == true! \item \verb!_startGameSpy.count() == 1! @@ -223,6 +223,8 @@ Questa \textit{test suite} è pensata per evidenziare l'eventuale presenza di er \end{itemize} +\medskip + \subsubsection{Classe ClientSocketTest} \subsubsection*{Oggetto del test} @@ -266,3 +268,312 @@ Questa classe serve per testare le funzionalità aggiuntive rese diponibili da \ \smallskip \subsubsection*{Metodi di test} +\begin{itemize} + + \item \texttt{private void joinGame() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + QString & mode \\ + \hline + QString & name \\ + \hline + QString & output \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(StreamSocket::Idle)! + \item \verb!_testedObject->joinGame(mode, name)! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_testedObject->state() == StreamSocket::AwaitingJoinAnswer! + \item \verb!_serverStub->waitForReadyRead() == true! + \item \verb!QString(_serverStub->readAll()) == output! + \end{itemize} + \end{itemize} + + \item \texttt{private void joinGame\_data() [slot]} + \\\\ + \small + \begin{tabular}{*{3}{|c}|p{0.5\textwidth}|} + \hline + \textbf{Nome} & \textbf{mode} & \textbf{name} & \textbf{output} \\ + \hline + \textbf{Tipo} & QString & QString & QString \\ + \hline + J1 & ``player'' & ``Pippo'' & \verb!! \verb!Pippo! \\ + \hline + J2 & ``spectator'' & ``Pluto'' & \verb!! \verb!Pluto! \\ + \hline + \end{tabular} + \normalsize + + \item \texttt{private void cancelJoin() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + StreamSocket::ProtocolState & initialState \\ + \hline + QString & output \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(initialState)! + \item \verb!_testedObject->cancelJoin()! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_testedObject->state() == StreamSocket::Idle! + \item \verb!_serverStub->waitForReadyRead() == true! + \item \verb!QString(_serverStub->readAll()) == output! + \end{itemize} + \end{itemize} + + \item \texttt{private void cancelJoin\_data() [slot]} + \\\\ + \small + \begin{tabular}{*{3}{|c}|} + \hline + \textbf{Nome} & \textbf{initialState} & \textbf{output} \\ + \hline + \textbf{Tipo} & StreamSocket::ProtocolState & QString \\ + \hline + C1 & AwaitingJoinAnswer & \verb!-1! \\ + \hline + C2 & AwaitingGameStart & \verb!-1! \\ + \hline + \end{tabular} + \normalsize + + \item \texttt{private void joinAccepted() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + QString & input \\ + \hline + int & id \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(StreamSocket::AwaitingJoinAnswer)! + \item \verb!_serverStub->write(input.toUtf8())! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_serverStub->waitForBytesWritten(3000) == true! + \item \verb!_testedObject->state() == StreamSocket::AwaitingGameStart! + \item \verb!_joinAcceptedSpy.count() == 1! + \item \verb!_joinAcceptedSpy.at(0).at(0).type() == QVariant::Int! + \item \verb!_joinAcceptedSpy.at(0).at(0).toInt() == id! + \end{itemize} + \end{itemize} + + \item \texttt{private void joinAccepted\_data() [slot]} + \\\\ + \small + \begin{tabular}{*{3}{|c}|} + \hline + \textbf{Nome} & \textbf{input} & \textbf{id} \\ + \hline + \textbf{Tipo} & QString & int \\ + \hline + JA1 & \verb!0! & 0 \\ + \hline + JA2 & \verb!2! & 2 \\ + \hline + \end{tabular} + \normalsize + + \item \texttt{private void joinRefused() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + QString & input \\ + \hline + int & cause \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(StreamSocket::AwaitingJoinAnswer)! + \item \verb!_serverStub->write(input.toUtf8())! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_serverStub->waitForBytesWritten(3000) == true! + \item \verb!_testedObject->state() == StreamSocket::Idle! + \item \verb!_joinRefusedSpy.count() == 1! + \item \verb!_joinRefusedSpy.at(0).at(0).type() == QVariant::Int! + \item \verb!_joinRefusedSpy.at(0).at(0).toInt() == cause! + \end{itemize} + \end{itemize} + + \item \texttt{private void joinRefused\_data() [slot]} + \\\\ + \small + \begin{tabular}{*{3}{|c}|} + \hline + \textbf{Nome} & \textbf{input} & \textbf{cause} \\ + \hline + \textbf{Tipo} & QString & int \\ + \hline + JR1 & \verb!1! & 1 \\ + \hline + JR2 & \verb!2! & 2 \\ + \hline + \end{tabular} + \normalsize + + \item \texttt{private void receivedGameSettings() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + QString & input \\ + \hline + int & d1 \\ + \hline + int & d2 \\ + \hline + int & timer \\ + \hline + bool & playing \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(StreamSocket::FullyOpened)! + \item \verb!_serverStub->write(input.toUtf8())! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_serverStub->waitForBytesWritten(3000) == true! + \item \verb!_testedObject->state() == StreamSocket::Idle! + \item \verb!_receivedGameSettingsSpy.count() == 1! + \item \verb!_receivedGameSettingsSpy.at(0).at(0).type() ==!\\\verb!QVariant::Int! + \item \verb!_receivedGameSettingsSpy.at(0).at(0).toInt() == d1! + \item \verb!_receivedGameSettingsSpy.at(0).at(1).type() ==!\\\verb!QVariant::Int! + \item \verb!_receivedGameSettingsSpy.at(0).at(1).toInt() == d2! + \item \verb!_receivedGameSettingsSpy.at(0).at(2).type() ==!\\\verb!QVariant::Int! + \item \verb!_receivedGameSettingsSpy.at(0).at(2).toInt() == timer! + \item \verb!_receivedGameSettingsSpy.at(0).at(3).type() ==!\\\verb!QVariant::Bool! + \item \verb!_receivedGameSettingsSpy.at(0).at(3).toInt() ==!\\\verb!playing! + \end{itemize} + \end{itemize} + + \item \texttt{private void receivedHistory() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: + \begin{tabular}{|c|c|} + \hline + \textbf{Tipo} & \textbf{Nome} \\ + \hline + QString & input \\ + \hline + QList$<$Move$>$ & history \\ + \hline + \end{tabular} + \\\\Vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(StreamSocket::AwaitingGameStart)! + \item \verb!_serverStub->write(input.toUtf8())! + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_serverStub->waitForBytesWritten(3000) == true! + \item \verb!_testedObject->state() == StreamSocket::AwaitingGameStart! + \item \verb!_receivedHistorySpy.count() == 1! + \item \verb!_receivedHistorySpy.at(0).at(0).type() == QVariant::List! + \item \verb!_receivedHistorySpy.at(0).at(0).toList() == history! + \end{itemize} + \end{itemize} + +\end{itemize} + +\medskip + +\subsubsection{Classe ServerSocketTest} + +\subsubsection*{Oggetto del test} +Questa classe serve per testare le funzionalità aggiuntive rese diponibili da \texttt{ServerSocket} rispetto alla classe base \texttt{StreamSocket}. Saranno oggetto di test il suo costruttore e tutti i metodi propri, nonché la corretta emissione del segnale \texttt{joinRequested()}. +\smallskip + +\subsubsection*{Metodi ausiliari} +\begin{itemize} + \item \texttt{private void initTestCase() [slot]}: effettua le seguenti inizializzazioni: + \begin{itemize} + \item \verb!_listener = new QTcpServer()!; + \item \verb!_listener->listen(QHostAddress::LocalHost, 42000)!; + \item \verb!_clientStub = new QTcpSocket()!; + \item \verb!_clientStub->connectToHost(QHostAddress::LocalHost, 42000)!; + \item \verb!QVERIFY(_listener->waitForNewConnection(10000))!; + \item \verb!QVERIFY(_listener->hasPendingConnections())!; + \item \verb!QTcpSocket *s = _listener->nextPendingConnection()!; + \item \verb!_testedObject = new ServerSocket(s)!; + \item \verb!_joinRequestedSpy = new QSignalSpy(_testedObject,!\\\verb!SIGNAL(joinRequested()))!. + \end{itemize} + Postcondizioni: + \begin{itemize} + \item \verb!_clientStub->state() == QAbstractSocket::ConnectedState! + \item \verb!_testedObject->_socket == s! + \item \verb!_testedObject->_buffer.isEmpty() == true! + \item \verb!_testedObject->state() == StreamSocket::Connected! + \item \verb!_joinRequestedSpy->isValid() == true! + \item \verb!_joinRequestedSpy->count() == 0! + \end{itemize} + \item \texttt{private void cleanupTestCase() [slot]}: dealloca tutti i campi dati. +\end{itemize} +\smallskip + +\subsubsection*{Metodi di test} +\begin{itemize} + + \item \texttt{private void acceptJoin() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(AwaitingJoinRequest)!; + \item \verb!_testedObject->acceptJoin(1)!. + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_testedObject->state() == StreamSocket::AwaitingPlayers! + \item \verb!_clientStub->waitForReadyRead() == true! + \item \verb!_clientStub->readAll() == "1"! + \end{itemize} + \end{itemize} + + \item \texttt{private void refuseJoin() [slot]} + \begin{itemize} + \item \textbf{Ambiente}: vengono invocati in sequenza i seguenti metodi: + \begin{itemize} + \item \verb!_testedObject->changeState(AwaitingJoinRequest)!; + \item \verb!_testedObject->refuseJoin(3)!. + \end{itemize} + \item \textbf{Postcondizioni}: + \begin{itemize} + \item \verb!_testedObject->state() == StreamSocket::AwaitingJoinRequest! + \item \verb!_clientStub->waitForReadyRead() == true! + \item \verb!_clientStub->readAll() == "3"! + \end{itemize} + \end{itemize} + +\end{itemize} diff --git a/network_test_diagram/129419.diagram b/network_test_diagram/129419.diagram index 549b8b9..ce3f6c0 100644 --- a/network_test_diagram/129419.diagram +++ b/network_test_diagram/129419.diagram @@ -2,20 +2,24 @@ format 49 packagecanvas 128011 package_ref 128130 // Network - xyzwh 21 18 1994 993 621 + xyzwh 14 11 1994 993 621 classcanvas 128139 class_ref 129291 // QObject draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 154 84 2005 + xyz 134 75 2005 + end +classcanvas 128173 class_ref 129212 // QTcpServer + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default + xyz 52 387 2009 end classcanvas 128267 class_ref 129296 // ServerSocket draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default hidden_operations operation_ref 131791 // parseData - xyz 515 136 2005 + xyz 495 125 2005 end classcanvas 128395 class_ref 129340 // QTcpSocket draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 329 499 2005 + xyz 297 483 2005 end classcanvas 128523 class_ref 129231 // StreamSocket draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default @@ -40,16 +44,24 @@ classcanvas 128523 class_ref 129231 // StreamSocket operation_ref 130511 // receivedChatMessage operation_ref 130639 // receivedMove operation_ref 130767 // startGame - xyz 693 382 2010 + xyz 673 353 2010 end classcanvas 128907 class_ref 129675 // ServerSocketTest draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 78 192 2005 + xyz 58 164 2005 end classcanvas 129291 class_ref 129419 // QSignalSpy draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default - xyz 333 297 2005 + xyz 343 290 2005 end +relationcanvas 128045 relation_ref 128045 // + from ref 128907 z 2004 to ref 128395 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +relationcanvas 128301 relation_ref 128173 // + from ref 128907 z 2004 to ref 128173 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b relationcanvas 128651 relation_ref 129743 // from ref 128523 z 1999 to ref 128395 no_role_a no_role_b @@ -69,7 +81,7 @@ relationcanvas 129163 relation_ref 130827 // relationcanvas 129547 relation_ref 130955 // from ref 128907 z 2004 to ref 129291 no_role_a no_role_b - multiplicity_a_pos 317 307 3000 no_multiplicity_b + multiplicity_a_pos 326 300 3000 no_multiplicity_b relationcanvas 129675 relation_ref 131083 // from ref 129291 z 2004 to ref 128267 no_role_a no_role_b diff --git a/network_test_diagram/network_test_diagram.prj b/network_test_diagram/network_test_diagram.prj index 03d3c74..8606685 100644 --- a/network_test_diagram/network_test_diagram.prj +++ b/network_test_diagram/network_test_diagram.prj @@ -1,7 +1,7 @@ format 49 "network_test_diagram" - revision 75 - modified_by 11 "davide" + revision 76 + modified_by 45 "davide" @@ -1794,6 +1794,24 @@ ${inlines} b parent class_ref 129419 // QSignalSpy end + attribute 128173 "_listener" + private type class_ref 129212 // QTcpServer + cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; +" + java_decl "" + php_decl "" + idl_decl "" + end + + attribute 128045 "_clientStub" + private type class_ref 129340 // QTcpSocket + cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; +" + java_decl "" + php_decl "" + idl_decl "" + end + attribute 130827 "_testedObject" private type class_ref 129296 // ServerSocket cpp_decl " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; @@ -1811,6 +1829,24 @@ ${inlines} php_decl "" idl_decl "" end + + classrelation 128045 // + relation 128045 *--> + a role_name "" protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; +" + classrelation_ref 128045 // + b parent class_ref 129340 // QTcpSocket + end + + classrelation 128173 // + relation 128173 *--> + a role_name "" protected + cpp default " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value}; +" + classrelation_ref 128173 // + b parent class_ref 129212 // QTcpServer + end end end -- 2.11.4.GIT