forked from schmittlauch/Hash2Pub
safe responsibility recognisation, tests for responsibility lookup
This commit is contained in:
parent
bba14f6be3
commit
449fcb93bb
|
@ -37,8 +37,7 @@ data QueryResponse = FORWARD (Set.Set CacheEntry) -- ^return closest nodes from
|
||||||
incomingQuery :: NodeState -> NodeCache -> Int -> NodeID -> QueryResponse
|
incomingQuery :: NodeState -> NodeCache -> Int -> NodeID -> QueryResponse
|
||||||
incomingQuery ownState nCache lBestNodes targetID
|
incomingQuery ownState nCache lBestNodes targetID
|
||||||
-- as target ID falls between own ID and first predecessor, it is handled by this node
|
-- as target ID falls between own ID and first predecessor, it is handled by this node
|
||||||
-- TODO: this fails with an empty predecessor list
|
| (targetID `localCompare` ownID) `elem` [LT, EQ] && not (null . predecessors $ ownState) && (targetID `localCompare` (head . predecessors) ownState) == GT = FOUND ownState
|
||||||
| (targetID `localCompare` ownID) `elem` [LT, EQ] && (targetID `localCompare` (head . predecessors) ownState) == GT = FOUND ownState
|
|
||||||
-- my interpretation: the "l best next hops" are the l-1 closest preceding nodes and
|
-- my interpretation: the "l best next hops" are the l-1 closest preceding nodes and
|
||||||
-- the closest succeeding node (like with the p initiated parallel queries
|
-- the closest succeeding node (like with the p initiated parallel queries
|
||||||
| otherwise = trace ("--- Query for " ++ show targetID ++ " wanting " ++ show lBestNodes ++ " results---") $
|
| otherwise = trace ("--- Query for " ++ show targetID ++ " wanting " ++ show lBestNodes ++ " results---") $
|
||||||
|
|
|
@ -118,7 +118,7 @@ spec = do
|
||||||
let
|
let
|
||||||
emptyCache = nodeCache exampleNodeState
|
emptyCache = nodeCache exampleNodeState
|
||||||
nid1 = toNodeID 2^(23::Integer)+1
|
nid1 = toNodeID 2^(23::Integer)+1
|
||||||
node1 = exampleNodeState { nid = nid1}
|
node1 = exampleNodeState { nid = nid1, predecessors = [nid4]}
|
||||||
nid2 = toNodeID 2^(230::Integer)+12
|
nid2 = toNodeID 2^(230::Integer)+12
|
||||||
node2 = exampleNodeState { nid = nid2}
|
node2 = exampleNodeState { nid = nid2}
|
||||||
nid3 = toNodeID 2^(25::Integer)+10
|
nid3 = toNodeID 2^(25::Integer)+10
|
||||||
|
@ -141,6 +141,15 @@ spec = do
|
||||||
(FORWARD nodeset2) = incomingQuery exampleNodeState c4 1 (toNodeID 2^(9::Integer)+5)
|
(FORWARD nodeset2) = incomingQuery exampleNodeState c4 1 (toNodeID 2^(9::Integer)+5)
|
||||||
Set.map (nid . cacheGetNodeStateUnvalidated) nodeset1 `shouldBe` Set.fromList [nid4, nid2, nid3]
|
Set.map (nid . cacheGetNodeStateUnvalidated) nodeset1 `shouldBe` Set.fromList [nid4, nid2, nid3]
|
||||||
Set.map (nid . cacheGetNodeStateUnvalidated) nodeset2 `shouldBe` Set.fromList [nid4]
|
Set.map (nid . cacheGetNodeStateUnvalidated) nodeset2 `shouldBe` Set.fromList [nid4]
|
||||||
|
it "recognises the node's own responsibility" $ do
|
||||||
|
nC <- cacheWith4Entries
|
||||||
|
incomingQuery node1 nC 3 (toNodeID 2^(22::Integer)) `shouldBe` FOUND node1
|
||||||
|
incomingQuery node1 nC 3 nid1 `shouldBe` FOUND node1
|
||||||
|
it "does not fail on nodes without neighbours (initial state)" $ do
|
||||||
|
nC <- cacheWith4Entries
|
||||||
|
let (FORWARD nodeset) = incomingQuery exampleNodeState nC 3 (toNodeID 11)
|
||||||
|
Set.map (nid . cacheGetNodeStateUnvalidated ) nodeset `shouldBe` Set.fromList [nid4, nid2, nid3]
|
||||||
|
|
||||||
|
|
||||||
-- some example data
|
-- some example data
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue