packages feed

Barracuda-1.0.2: Tests/HUnit/RoutingTable.hs

module Tests.HUnit.RoutingTable where

import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.Time (getCurrentTime)
import Barracuda.RoutingTable
import Network.AdHoc.UserID
import Network.AdHoc.Routing
import Network.Socket
import Tests.Data
import Test.HUnit

routingTableLookup = TestCase $ do
	let now = date_malcomX
	let rt = hello now saddr_cia [user_wechner] (empty :: SimpleRT)
	assertEqual "routeSingle"
		(Just saddr_cia)
		(routeSingle user_wechner rt)
	assertEqual "routeSingle with ignores"
		Nothing
		(routeSingle user_wechner (rt, Set.singleton saddr_cia))

routingTableDelete = TestCase $ do
	let now = date_jfk
	let rt  = routing now saddr_penisland [(user_eq, 2), (user_spuall, 1)] $ routing now saddr_fsf [(user_eq, 1), (user_spuall, 2)] $ (empty :: SimpleRT)
	assertEqual "deletion of an optimal host"
		(Just saddr_fsf)
		(routeSingle user_spuall $ delete saddr_penisland rt)
	assertEqual "deletion of a suboptimal host"
		(Just saddr_penisland)
		(routeSingle user_eq $ delete saddr_fsf rt)

routingTableUsersMergeNeighbors = TestCase $ do
	let now = date_mlk
	let rt =  routing now saddr_cia [(user_eq, 1)]
		$ routing now saddr_fsf [(user_wechner, 1)]
		$ routing now saddr_penisland [(user_igel, 1)]
		$ (empty :: SimpleRT)
	assertEqual "complete userlist"
		(Set.fromList [user_eq, user_wechner, user_igel])
		(userList rt)
	assertEqual "merge routes for"
		(Map.fromList [(user_eq, 2), (user_wechner, 2)])
		(mergeRoutesFor saddr_penisland Set.empty rt)
	assertEqual "neighbors"
		(Set.fromList [saddr_cia, saddr_fsf, saddr_penisland])
		(neighbors rt)