quic-0.1.9: test/RecoverySpec.hs
{-# LANGUAGE OverloadedStrings #-}
module RecoverySpec where
import Data.ByteString.Short ()
import qualified Data.Sequence as Seq
import Data.UnixTime
import Test.Hspec
import Network.QUIC.Internal
spec :: Spec
spec = do
describe "persistent congestion" $ do
it "does not find a pair" $ do
findDuration (Seq.fromList [sp0]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp1]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp1, sp2]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp2, sp2, sp3]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp2, sp2, sp3, sp4]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp2, sp2, sp3, sp5]) 0 `shouldBe` Nothing
findDuration (Seq.fromList [sp0, sp2, sp2, sp3, sp4, sp5]) 2 `shouldBe` Nothing
it "finds a pair" $ do
findDuration (Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5]) 0
`shouldBe` Just (UnixDiffTime 4 0)
findDuration (Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6]) 0
`shouldBe` Just (UnixDiffTime 4 0)
findDuration (Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7]) 0
`shouldBe` Just (UnixDiffTime 6 0)
findDuration (Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7]) 3
`shouldBe` Just (UnixDiffTime 2 0)
findDuration
(Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7, sp8, sp9, sp10])
2
`shouldBe` Just (UnixDiffTime 5 0)
findDuration (Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7, sp8, sp9]) 0
`shouldBe` Just (UnixDiffTime 6 0)
findDuration
(Seq.fromList [sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7, sp8, sp9, sp10])
0
`shouldBe` Just (UnixDiffTime 9 0)
findDuration
( Seq.fromList
[sp0, sp1, sp2, sp3, sp4, sp5, sp6, sp7, sp8, sp9, sp10, sp20, sp21]
)
0
`shouldBe` Just (UnixDiffTime 22 0)
findDuration
( Seq.fromList
[ sp0
, sp1
, sp2
, sp3
, sp4
, sp5
, sp6
, sp7
, sp8
, sp9
, sp10
, sp20
, sp21
, sp30
, sp31
, sp32
, sp33
]
)
0
`shouldBe` Just (UnixDiffTime 29 0)
sp0
, sp1
, sp2
, sp3
, sp4
, sp5
, sp6
, sp7
, sp8
, sp9
, sp10
, sp20
, sp21
, sp30
, sp31
, sp32
, sp33
:: SentPacket
sp0 = sp 0 False $ UnixTime 0 0
sp1 = sp 1 True $ UnixTime 1 0
sp2 = sp 2 False $ UnixTime 2 0
sp3 = sp 3 False $ UnixTime 3 0
sp4 = sp 4 False $ UnixTime 4 0
sp5 = sp 5 True $ UnixTime 5 0
sp6 = sp 6 False $ UnixTime 6 0
sp7 = sp 7 True $ UnixTime 7 0
sp8 = sp 8 False $ UnixTime 8 0
sp9 = sp 9 False $ UnixTime 9 0
sp10 = sp 10 True $ UnixTime 10 0
sp20 = sp 20 True $ UnixTime 22 0
sp21 = sp 21 True $ UnixTime 44 0
sp30 = sp 30 False $ UnixTime 50 0
sp31 = sp 31 True $ UnixTime 51 0
sp32 = sp 32 False $ UnixTime 55 0
sp33 = sp 33 True $ UnixTime 80 0
sp :: PacketNumber -> Bool -> TimeMicrosecond -> SentPacket
sp mypn ackeli tm = spkt{spTimeSent = tm}
where
ppkt = PlainPacket (Short $ toCID "") (Plain (Flags 0) 0 [] 0)
spkt = mkSentPacket mypn InitialLevel ppkt emptyPeerPacketNumbers ackeli