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"]