mirror of https://github.com/voidlizard/hbs2
59 lines
1.3 KiB
Haskell
59 lines
1.3 KiB
Haskell
{-# LANGUAGE NumericUnderscores #-}
|
|
module TestCompactStorage where
|
|
|
|
import HBS2.Prelude.Plated
|
|
import HBS2.Merkle
|
|
import HBS2.OrDie
|
|
import HBS2.Hash
|
|
import HBS2.Clock
|
|
import HBS2.Data.Types.Refs
|
|
import HBS2.Storage
|
|
import HBS2.Storage.Compact
|
|
import HBS2.Data.Bundle
|
|
|
|
import Control.Monad.Except
|
|
import Control.Monad
|
|
import Control.Concurrent.Async
|
|
import Control.Concurrent
|
|
import Data.ByteString.Lazy qualified as LBS
|
|
import Data.Maybe
|
|
import Data.Word
|
|
import Lens.Micro.Platform
|
|
import Prettyprinter
|
|
import System.Directory
|
|
import System.FilePath.Posix
|
|
import System.IO.Temp
|
|
import Test.QuickCheck
|
|
import System.TimeIt
|
|
import System.IO
|
|
|
|
import Streaming.Prelude qualified as S
|
|
|
|
import Test.Tasty.HUnit
|
|
|
|
|
|
testCompactStorageBasic :: IO ()
|
|
testCompactStorageBasic = do
|
|
|
|
let elems = [ 0 .. 10_000 :: Int ]
|
|
|
|
let pt = toPTree (MaxSize 1000) (MaxNum 256) elems
|
|
|
|
withSystemTempDirectory "simpleStorageTest1" $ \dir -> do
|
|
let db = "storage"
|
|
sto <- compactStorageOpen @HbSync mempty db
|
|
|
|
root <- makeMerkle 0 pt $ \(_,_,bss) -> do
|
|
void $ putBlock sto bss
|
|
|
|
compactStorageClose sto
|
|
|
|
sto2 <- compactStorageOpen @HbSync mempty db
|
|
|
|
elems2 <- S.toList_ $ walkMerkle @[Int] root ( getBlock sto2 ) $ \case
|
|
Left{} -> error "missed block"
|
|
Right xs -> mapM_ S.yield xs
|
|
|
|
assertEqual "elems-read-from-storage" elems elems2
|
|
|