kademlia-1.1.0.0: test/Test.hs
{-|
Module : Tests
Description : Tests for the modules
A few tests using QuickCheck and Tasty to make sure everything works
the way it's supposed to.
-}
module Main where
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Test.Tasty.HUnit as HU
import Types
import Protocol
import Networking
import Tree
import Instance
import ReplyQueue
import Implementation
main = defaultMain tests
tests :: TestTree
tests = testGroup "Tests" [quickCheckTests, hUnitTests]
quickCheckTests = testGroup "QuickCheck" [
typeChecks
, protocolChecks
, networkingChecks
, treeChecks
, instanceChecks
, replyQueueChecks
, implementationChecks
]
typeChecks = testGroup "Network.Kademlia.Types" [
QC.testProperty "ByteString to ByteStruct conversion works"
toByteStructCheck
, QC.testProperty "ByteStruct to ByteString conversion works"
fromByteStructCheck
]
protocolChecks = testGroup "Network.Kademlia.Protocol" [
QC.testProperty "Protocol Serializing and Parsing works"
parseCheck
, QC.testProperty "Protocol messages are within the max UDP packet size"
lengthCheck
]
networkingChecks = testGroup "Network.Kademlia.Networking" [
QC.testProperty "Sending and Receiving works"
sendCheck
, QC.testProperty "Expecting works the way it's supposed to"
expectCheck
]
treeChecks = testGroup "Network.Kademlia.Tree" [
QC.testProperty "Inserting into the Tree works"
insertCheck
, QC.testProperty "Deleting from the Tree works"
deleteCheck
, QC.testProperty "Splitting works as expected"
splitCheck
, QC.testProperty "Buckets are within the size limit"
bucketSizeCheck
, QC.testProperty "Refreshing works as expected"
refreshCheck
, QC.testProperty "Finding closest works"
findClosestCheck
]
instanceChecks = testGroup "Network.Kademlia.Instance" [
QC.testProperty "Storing and Retrieving values works"
storeAndFindValueCheck
, QC.testProperty "Peers are put into the tree on first encounter"
trackingKnownPeersCheck
]
replyQueueChecks = testGroup "Network.Kademlia.ReplyQueue" [
QC.testProperty "Registering replies works"
repliesCheck
, QC.testProperty "Registrations are removed after being dispatched"
removedCheck
]
implementationChecks = testGroup "Network.Kademlia.Implementation" [
QC.testProperty "Joining the Network works"
joinCheck
, QC.testProperty "ID clashes are detected"
idClashCheck
, QC.testProperty "Storing and looking up values works"
storeAndLookupCheck
, QC.testProperty "Looking up Nodes works"
lookupNodesCheck
]
hUnitTests = testGroup "HUnit" [
instanceCases
, implementationCases
]
instanceCases = testGroup "Network.Kademlia.Instance" [
HU.testCase "PINGs are automaticly handled"
handlesPingCheck
]
implementationCases = testGroup "Network.Kademlia.Implementation" [
HU.testCase "Trying to join over an offline Node is detected"
nodeDownCheck
]