module PuppetdbSpec(spec) where
import XPrelude
import qualified Data.Text as Text
import System.IO.Temp as Temp
import Test.Hspec
import PuppetDB
checkPanicE :: Show x => Text -> ExceptT x IO a -> IO a
checkPanicE msg = runExceptT >=> either (panic . ((msg <> " ") <>) . show) return
fqdn = "node.site.com"
spec :: SpecWith ()
spec =
around (Temp.withSystemTempDirectory "puppetdbtest") $ do
describe "PuppetDB" $ do
it "should save facts" $ \tmpfp -> do
let pdbfile = tmpfp <> "/puppetdb.yaml"
-- generate an empty puppetdb
pdb <- loadTestDB pdbfile >>= unwrapError "While loading a test DB"
-- get some dummy facts
facts <- puppetDBFacts fqdn pdb
-- and add a custom fact
let nfacts = facts & at "customfact" ?~ "MyCustomFactValue"
-- save the facts
checkPanicE "replaceFacts" (replaceFacts pdb [(fqdn, nfacts)])
checkPanicE "commitDB" (commitDB pdb)
-- check that our custom fact was indeed saved
dblines <- (fmap Text.strip . Text.lines) <$> readFile pdbfile
dblines `shouldContain` ["customfact: MyCustomFactValue"]
-- initiate a new puppetdbapi
fpdb <- loadTestDB pdbfile >>= unwrapError "loadTestDB"
ffacts <- puppetDBFacts fqdn pdb
ffacts `shouldBe` nfacts
checkPanicE "replaceCatalog" (replaceCatalog fpdb (generateWireCatalog fqdn mempty mempty))
checkPanicE "commit 2" (commitDB fpdb)
-- check our facts again
fdblines <- (fmap (Text.strip) . Text.lines) `fmap` readFile pdbfile
fdblines `shouldContain` ["customfact: MyCustomFactValue"]