Add explenation on randomisation
[tt2015.git] / a2 / 1cases.tex
index 172ad03..69f8168 100644 (file)
@@ -1,5 +1,4 @@
 \subsection{Preflight checklist}
 \subsection{Preflight checklist}
-
 Before actual certification is commenced we perform a manual test using a 
 checklist.
 If any of the checks fail we immediately reject the product.
 Before actual certification is commenced we perform a manual test using a 
 checklist.
 If any of the checks fail we immediately reject the product.
@@ -8,84 +7,69 @@ are to be run in a terminal. Commands prefixed with a \texttt{\#} should be run
 with root permissions. Commands prefixed with a \texttt{\$} should be run with
 user permissions.
 
 with root permissions. Commands prefixed with a \texttt{\$} should be run with
 user permissions.
 
-\begin{table}[H]
-\begin{tabularx}{\linewidth}{|l|X|}
+\begin{longtable}{|l|rp{.8\linewidth}|}
        \hline
        \hline
-       Check 1 & Get the SUT in a workable state. \\
+       Check 1 & \multicolumn{2}{l|}{Get the SUT in a workable state.}\\
        \hline
        \hline
-       Course of action &
-               \begin{enumerate}
-                       \item Import the VirtualBox image into VirtualBox.
-                       \item Boot the vm.
-                       \item Verify the SUT booted successfully and the network modules
-                               are loaded.
-               \end{enumerate}\\
-       \hline Passed & \textit{Yes/No} \\
+       \multirow{3}{*}{Course of action} 
+               & 1. & Import the VirtualBox image into VirtualBox.\\
+               & 2. & Boot the vm.\\
+               & 3. & Verify the SUT booted successfully and the network modules are
+               loaded.\\
+       \hline
+       Passed & \multicolumn{2}{l|}{\textit{Yes/No}}\\
        \hline\hline
        \hline\hline
-       Check 2 & Verify the SUT is complete. \\\hline
-       Course of action &
-               \begin{enumerate}
-                       \item Boot the SUT as in \emph{Check 1}.
-                       \item Verify the loopback device exists by running
-                               \texttt{\$ ifconfig}.
-                       \item Verify the \emph{echo-server} is present on the system.
-                       \item Verify \emph{Scapy} is present on the system by running
-                               \texttt{\$ scapy}.
-                       \item Verify all scripts used for testing are present on the
-                               system.
-               \end{enumerate}\\
+       Check 2 & \multicolumn{2}{l|}{Verify the SUT is complete.}\\
+       \hline
+       \multirow{5}{*}{Course of action}
+               & 1. & Boot the SUT as in \emph{Check 1}.\\
+               & 2. & Verify the loopback device exists by running 
+                        \texttt{\$ ifconfig}.\\
+               & 3. & Verify the \emph{echo-server} is present on the system by running
+                       \texttt{\$ file code/server/Main.java}\\
+               & 4. & Verify \emph{Scapy} is present on the system by running
+                       \texttt{\$ scapy}.\\
+               & 5. & Verify all scripts used for testing are present on the system.\\
        \hline
        \hline
-       Passed & \textit{Yes/No}\\
-       \hline \hline
-       Check 3 & Initialize the testing environment.\\
+       Passed & \multicolumn{2}{l|}{\textit{Yes/No}}\\
+       \hline\hline
+       Check 3 & \multicolumn{2}{l|}{Initialize the testing environment..}\\
        \hline
        \hline
-       Course of action &
-                       \begin{enumerate}
-                               \item Boot the SUT as in \emph{Check 1}.
-                               \item Setup iptables by executing 
-                                       \texttt{\# code/iptables.sh}~\footnote{ The IPTables script
-                                       ensures that the OS does not drop packets due to an the
-                                       unknown source.}
-                               \item Navigate to the working directory by running
-                                       \texttt{\$ cd /home/student/tt2015}
-                               \item Compile the echo server by running 
-                                       \texttt{\# cd code/server \&\& make \&\& cd -}
-                               \item Start the echo server by running
-                                       \texttt{\# cd code/server \&\& java Main}
-               \end{enumerate}\\
+       \multirow{5}{*}{Course of action}
+               & 1. & Boot the SUT as in \emph{Check 1}.\\
+               & 2. & Setup iptables by executing
+                       \texttt{\# code/iptables.sh}~\footnote{The IPTables script ensures
+                       that the OS does not drop packets due to an the unknown source.}\\
+               & 3. & Navigate to the working directory by running
+                       \texttt{\$ cd /home/student/tt2015}\\
+               & 4. & Compile the echo server by running 
+                       \texttt{\# cd code/server \&\& make \&\& cd -}\\
+               & 5. & Start the echo server by running
+                       \texttt{\# cd code/server \&\& java Main}\\
        \hline
        \hline
-       Passed & \textit{Yes/No}\\
+       Passed & \multicolumn{2}{l|}{\textit{Yes/No}}\\
        \hline\hline
        \hline\hline
-       Check 4 & Test the tool environment.\\
+       Check 4 & \multicolumn{2}{l|}{Test the tool environment.}\\
        \hline
        \hline
-       Course of action &
-               \begin{enumerate}
-                       \item Initialize the SUT as in \emph{Check 3}
-                       \item Execute the test script by running
-                               \texttt{\# code/client/helloworld.py}.
-                       \item Verify the console displays a success message.
-               \end{enumerate}\\
+       \multirow{3}{*}{Course of action}
+               & 1. & Initialize the SUT as in \emph{Check 3}\\
+               & 2. & Execute the test script by running
+                       \texttt{\# code/client/helloworld.py}\\
+               & 3. & Verify the console displays a success message.\\
        \hline
        \hline
-       Passed & \textit{Yes/No}\\
+       Passed & \multicolumn{2}{l|}{\textit{Yes/No}}\\
        \hline\hline
        \hline\hline
-       Check 5 & All test inputs and scripts are present. \\\hline
-       % DIT MOET NOG EVEN ANDERS
-       Course of action & 
-               \begin{enumerate}
-                       \item Boot the SUT as in \emph{Check 1}.
-                       \item Execute the command \texttt{ls scripts/tests}
-                       \item Verify that there is a file named case$X$ for each test case $X$
-                       \item Use \emph{ls packets}
-                       \item Verify that there is a file named \texttt{single.pcap} and
-                       \texttt{multi.pcap}.
-               \end{enumerate}\\
+       Check 5 & \multicolumn{2}{l|}{All test inputs and scripts are present.}\\
        \hline
        \hline
-       Passed & \textit{Yes/No}\\
+       \multirow{2}{*}{Course of action}
+               & 1. & Boot the SUT as in \emph{Check 1}.\\
+               & 2. & Verify that the test generation script is present by running
+                       \texttt{\$ file code/client/test.py}\\
        \hline
        \hline
-\end{tabularx}
-\end{table}
-
-\newpage
+       Passed & \multicolumn{2}{l|}{\textit{Yes/No}}\\
+       \hline
+       \caption{Preflight checklist\label{tbl:preflight}}
+\end{longtable}
 
 \subsection{Testing of SUT}
 The SUT is a series of services for other computer programs with no end-user
 
 \subsection{Testing of SUT}
 The SUT is a series of services for other computer programs with no end-user
@@ -105,28 +89,72 @@ a feasible test suite the tests are divided into equivalence partitions. Below
 these partitions are given.
 
 \begin{enumerate}
 these partitions are given.
 
 \begin{enumerate}
-       \item \emph{Number of packets} in request~\footnote{A request is considered
-               establishing a connection (handshake) and a number of payload packets}
+       \item \emph{Number of segments} in request~\footnote{A request is
+               considered establishing a connection (handshake) and a number of
+               payload segments}
                \begin{enumerate}
                \begin{enumerate}
-                       \item 0 payload packets
-                       \item 1 payload packet
-                       \item n=small payload packets
-                       \item n=big payload packets
+                       \item 0 payload segments
+                       \item 1 payload segments
+                       \item n=small payload segments
+                       \item n=big payload segments
                \end{enumerate}
                \end{enumerate}
-       \item Correct or incorrect \emph{source port}
-       \item Correct or incorrect \emph{destination port}
-       \item Bits flipped in \emph{payload}
+       \item \emph{source port}
+               \begin{enumerate}
+                       \item Correct
+                       \item Incorrect
+               \end{enumerate}
+       \item \emph{destination port}
+               \begin{enumerate}
+                       \item Correct
+                       \item Incorrect
+               \end{enumerate}
+       \item Bit errors in \emph{payload}
                \begin{enumerate}
                        \item Correct payload
                \begin{enumerate}
                        \item Correct payload
-                       \item Payload with even number of bits flipped
-                       \item Payload with odd number of bits flipped
+                       \item Payload with bit flips that do not show in checksum
+                       \item Payload with bit flips that do show in checksum
+               \end{enumerate}
+       \item \emph{checksum}
+               \begin{enumerate}
+                       \item Correct
+                       \item Incorrect
+               \end{enumerate}
+       \item \emph{Packet order}
+               \begin{enumerate}
+                       \item Correct
+                       \item Out of order
+                       \item Missing packets
                \end{enumerate}
                \end{enumerate}
-       \item Correct or Incorrect \emph{checksum}
-       \item Packets received in or out of order, or missing packets
 \end{enumerate}
 
 \end{enumerate}
 
-\textbf{hier iets over waarom deze partities relevant zijn! Waarom odd en 
-even number of bits flipped bijv interessant?}
+These partitions were chosen since they correspond to key parts of the TCP
+specification. 
+
+TCP segments are send over a TCP connection from a \emph{source} to a \emph{destination port}. Therefore segments which are received that have a 
+source or destination port set to an incorrect value should not be regarded
+as segments belonging to the connection by the SUT. 
+
+TCP uses a \emph{checksum} to catch any error introduced in headers, when this
+checksum does not match the actual computed checksum the SUT should
+disregard the received segment.
+
+The TCP checksum is also an inherently weak one, as it is simply the 
+bitwise negation of the addition, in ones complement arithmetic, 
+of all 16 bit words in the header and data of the segment (excluding the
+checksum itself). Therefore any \emph{bit error} where the ones complement value
+of one word
+increases by one, and the value of another decreases by one, is undetected. 
+The SUT should exhibit the same behavior and accept packets where these type
+of bit errors occur.
+
+TCP guarantees that segments are delivered \emph{in order}
+,even when they are received
+out of order and that missing segments are resend. The SUT should
+exhibit the same behavior. If segments are received out of order it should
+either reassemble them when the missing packet has arrived or request them to
+be resend when the  Missing segments should be re-requested (by ACK-ing
+the correct sequence number).  
+
 \bigskip
 
 Partitions 2 to 6 are tested using pairwise testing to keep the number of test
 \bigskip
 
 Partitions 2 to 6 are tested using pairwise testing to keep the number of test
@@ -135,20 +163,29 @@ to do so) tested with the different request sizes of partition 1.
 
 This is expressed in Table~\ref{table:testpairs}.
 
 
 This is expressed in Table~\ref{table:testpairs}.
 
-\begin{table}
-% DIT MAAK IK NOG EVEN MOOI
-       \begin{tabularx}{\linewidth}{p{2cm} | l | p{2cm} | l | p{1cm} || c | c | p{1.3cm} | p{1.3cm}}
-       \textbf{Payload}      & \textbf{checksum}  & \textbf{destination port} & \textbf{order}         & \textbf{source port} & \textbf{payload 0} & \textbf{payload 1} & \textbf{payload small} & \textbf{payload big} \\  \hline \hline
-       Correct               & Correct   & Correct          & In order       & Correct     & \checkmark & \checkmark & \checkmark & \checkmark \\  \hline
-       Correct               & Incorrect & Incorrect        & Missing packet & Incorrect   & \xmark & \xmark & \checkmark & \checkmark \\  \hline
-       odd\# of bits flipped  & Correct   & Incorrect        & Out of order   & Incorrect   & \xmark & \xmark & \checkmark & \checkmark \\  \hline
-       odd\# of bits flipped  & Incorrect & Correct          & Missing packet & Correct     & \xmark & \xmark & \checkmark & \checkmark \\  \hline
-       even\# of bits flipped & Correct   & Incorrect        & Missing packet & Correct     & \xmark & \xmark & \checkmark & \checkmark \\  \hline
-       even\# of bits flipped & Incorrect & Correct          & Out of order   & Incorrect   & \xmark & \xmark & \checkmark & \checkmark \\  \hline
-       odd\# of bits flipped  & Incorrect & Incorrect        & In order       & Incorrect   & \checkmark & \checkmark & \checkmark & \checkmark \\  \hline
-       even\# of bits flipped & Incorrect & Incorrect        & In order       & Incorrect   & \checkmark & \checkmark & \checkmark & \checkmark \\  \hline
-       Correct               & Incorrect & Incorrect        & Out of order   & Correct     & \xmark & \xmark & \checkmark & \checkmark \\  
-\end{tabularx}
+\newcounter{TCC}
+\setcounter{TCC}{1}
+\newcommand{\doTCC}{\theTCC \stepcounter{TCC}}
+\begin{table}[H]
+       \centering
+       \begin{tabular}{|l|l|l|l|l|l|l|l|l|l|l|}
+               \hline
+               & \multicolumn{10}{c|}{\textbf{Partition}}\\
+               \hline
+               & \# & 4 & 5 & 3 & 6 & 2 & 1a & 1b & 1c & 1d\\
+               \hline\hline
+               \multirow{9}{*}{Instance} 
+               & 1 & a & a & a & a & a & \doTCC & \doTCC & \doTCC & \doTCC\\
+               & 2 & a & b & b & c & b & \xmark & \xmark & \doTCC & \doTCC\\
+               & 3 & c & a & b & a & b & \xmark & \xmark & \doTCC & \doTCC\\
+               & 4 & c & b & a & c & a & \xmark & \xmark & \doTCC & \doTCC\\
+               & 5 & b & a & b & c & a & \xmark & \xmark & \doTCC & \doTCC\\
+               & 6 & b & b & a & b & b & \xmark & \xmark & \doTCC & \doTCC\\
+               & 7 & c & b & b & a & b & \xmark & \doTCC & \doTCC & \doTCC\\
+               & 8 & b & b & b & a & b & \xmark & \doTCC & \doTCC & \doTCC\\
+               & 9 & a & b & b & b & a & \xmark & \xmark & \doTCC & \doTCC\\
+               \hline
+\end{tabular}
 \caption{Combinations of test cases}
 \label{table:testpairs}
 \end{table}
 \caption{Combinations of test cases}
 \label{table:testpairs}
 \end{table}
@@ -177,7 +214,14 @@ test suite can be clearly assessed.
 
 As always, $100\%$ completeness is not feasible, therefore test cases are
 carefully selected to cover the most interesting parts of the TCP specification
 
 As always, $100\%$ completeness is not feasible, therefore test cases are
 carefully selected to cover the most interesting parts of the TCP specification
-to ensure a test suite.
+to ensure a complete but feasible test suite.
+
+To further increase the coverage of the test suites tests are randomized. The
+tests which test the handling of \emph{bit errors}, changes in the \emph{packet
+order} and \emph{dropped packets} randomize where they introduce an error. The
+test suite runs these tests multiple times to increase the likelihood that they
+discover a fault which is only present when an error occurs in a certain
+position. 
 
 To further decrease the number of tests needed test cases are divided into
 equivalence partitions and the combination of cases as described in 
 
 To further decrease the number of tests needed test cases are divided into
 equivalence partitions and the combination of cases as described in 
@@ -231,5 +275,3 @@ covered and the number of individual tests is still feasible.
 %      \end{enumerate} \\\hline
 %\end{tabularx}
 %\end{table}
 %      \end{enumerate} \\\hline
 %\end{tabularx}
 %\end{table}
-
-\newpage