add tests for ASN.1 message encoding and decoding
This commit is contained in:
parent
89cc51af52
commit
e4d350b8fb
|
@ -8,9 +8,12 @@ import Data.Maybe (fromJust)
|
||||||
import qualified Data.Map.Strict as Map
|
import qualified Data.Map.Strict as Map
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
|
import Data.ASN1.Parse (runParseASN1)
|
||||||
|
import Data.Time.Clock.POSIX
|
||||||
|
|
||||||
import Hash2Pub.FediChord
|
import Hash2Pub.FediChord
|
||||||
import Hash2Pub.DHTProtocol
|
import Hash2Pub.DHTProtocol
|
||||||
|
import Hash2Pub.ASN1Coding
|
||||||
|
|
||||||
spec :: Spec
|
spec :: Spec
|
||||||
spec = do
|
spec = do
|
||||||
|
@ -150,6 +153,82 @@ spec = do
|
||||||
let (FORWARD nodeset) = incomingQuery exampleLocalNode nC 3 (toNodeID 11)
|
let (FORWARD nodeset) = incomingQuery exampleLocalNode nC 3 (toNodeID 11)
|
||||||
Set.map (nid . cacheGetNodeStateUnvalidated ) nodeset `shouldBe` Set.fromList [nid4, nid2, nid3]
|
Set.map (nid . cacheGetNodeStateUnvalidated ) nodeset `shouldBe` Set.fromList [nid4, nid2, nid3]
|
||||||
|
|
||||||
|
describe "Messages can be encoded to and decoded from ASN.1" $ do
|
||||||
|
-- define test messages
|
||||||
|
let
|
||||||
|
someNodeIDs = map fromInteger [3..12]
|
||||||
|
qidReqPayload = QueryIDRequestPayload {
|
||||||
|
queryTargetID = nid exampleNodeState
|
||||||
|
, queryLBestNodes = 3
|
||||||
|
}
|
||||||
|
jReqPayload = JoinRequestPayload
|
||||||
|
lReqPayload = LeaveRequestPayload {
|
||||||
|
leaveSuccessors = someNodeIDs
|
||||||
|
, leavePredecessors = someNodeIDs
|
||||||
|
}
|
||||||
|
stabReqPayload = StabiliseRequestPayload
|
||||||
|
pingReqPayload = PingRequestPayload
|
||||||
|
qidResPayload1 = QueryIDResponsePayload {
|
||||||
|
queryResult = FOUND $ exampleNodeState
|
||||||
|
}
|
||||||
|
qidResPayload2 = QueryIDResponsePayload {
|
||||||
|
queryResult = FORWARD $ Set.fromList [
|
||||||
|
NodeEntry False exampleNodeState (toEnum 23420001)
|
||||||
|
, NodeEntry True (exampleNodeState {nid = fromInteger (-5)}) (toEnum 0)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
jResPayload = JoinResponsePayload {
|
||||||
|
joinSuccessors = someNodeIDs
|
||||||
|
, joinPredecessors = someNodeIDs
|
||||||
|
, joinCache = [
|
||||||
|
NodeEntry False exampleNodeState (toEnum 23420001)
|
||||||
|
, NodeEntry True (exampleNodeState {nid = fromInteger (-5)}) (toEnum 0)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
lResPayload = LeaveResponsePayload
|
||||||
|
stabResPayload = StabiliseResponsePayload {
|
||||||
|
stabiliseSuccessors = someNodeIDs
|
||||||
|
, stabilisePredecessors = []
|
||||||
|
}
|
||||||
|
pingResPayload = PingResponsePayload {
|
||||||
|
pingNodeStates = [
|
||||||
|
exampleNodeState
|
||||||
|
, exampleNodeState {nid = fromInteger (-5)}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
requestTemplate = Request {
|
||||||
|
requestID = 2342
|
||||||
|
, sender = exampleNodeState
|
||||||
|
, parts = 1
|
||||||
|
, part = 0
|
||||||
|
, action = undefined
|
||||||
|
, payload = undefined
|
||||||
|
}
|
||||||
|
responseTemplate = Response {
|
||||||
|
responseTo = 2342
|
||||||
|
, senderID = nid exampleNodeState
|
||||||
|
, parts = 1
|
||||||
|
, part = 0
|
||||||
|
, action = undefined
|
||||||
|
, payload = undefined
|
||||||
|
}
|
||||||
|
requestWith a pa = requestTemplate {action = a, payload = pa}
|
||||||
|
responseWith a pa = responseTemplate {action = a, payload = pa}
|
||||||
|
|
||||||
|
encodeDecodeAndCheck msg = runParseASN1 parseMessage (encodeMessage msg) `shouldBe` pure msg
|
||||||
|
it "messages are encoded and decoded correctly from and to ASN1" $ do
|
||||||
|
encodeDecodeAndCheck $ requestWith QueryID qidReqPayload
|
||||||
|
encodeDecodeAndCheck $ requestWith Join jReqPayload
|
||||||
|
encodeDecodeAndCheck $ requestWith Leave lReqPayload
|
||||||
|
encodeDecodeAndCheck $ requestWith Stabilise stabReqPayload
|
||||||
|
encodeDecodeAndCheck $ requestWith Ping pingReqPayload
|
||||||
|
encodeDecodeAndCheck $ responseWith QueryID qidResPayload1
|
||||||
|
encodeDecodeAndCheck $ responseWith QueryID qidResPayload2
|
||||||
|
encodeDecodeAndCheck $ responseWith Join jResPayload
|
||||||
|
encodeDecodeAndCheck $ responseWith Leave lResPayload
|
||||||
|
encodeDecodeAndCheck $ responseWith Stabilise stabResPayload
|
||||||
|
encodeDecodeAndCheck $ responseWith Ping pingResPayload
|
||||||
|
|
||||||
|
|
||||||
-- some example data
|
-- some example data
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue