runtime: count only trigger event frames and harden metrics tests
This commit is contained in:
+20
-19
@@ -4,7 +4,6 @@ module MetricsSpec (spec) where
|
||||
|
||||
import Data.HashMap.Strict (HashMap)
|
||||
import qualified Data.HashMap.Strict as HM
|
||||
import Data.Int (Int64)
|
||||
import Data.List (isPrefixOf)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
@@ -18,7 +17,6 @@ import HomeAssistant.Runtime.Metrics
|
||||
, buildUpdateArgs
|
||||
, ensureRrd
|
||||
, sampleAndUpdate
|
||||
, metricsAction
|
||||
, parseInfoDs
|
||||
, schemaMatches
|
||||
, AppMetrics (..)
|
||||
@@ -26,7 +24,7 @@ import HomeAssistant.Runtime.Metrics
|
||||
)
|
||||
import qualified System.Metrics as M (Value (..))
|
||||
import Test.Hspec
|
||||
import Control.Exception (try, SomeException)
|
||||
import Control.Exception (try, SomeException, finally)
|
||||
import Control.Monad (forM_)
|
||||
import System.Directory (findExecutable, getTemporaryDirectory, listDirectory, removeFile)
|
||||
import System.Exit (ExitCode (ExitSuccess))
|
||||
@@ -171,9 +169,10 @@ spec = do
|
||||
store <- Metrics.newStore
|
||||
m <- registerAppMetrics store
|
||||
Counter.inc (amTriggersIn m)
|
||||
Counter.inc (amServicesOut m)
|
||||
sample <- Metrics.sampleAll store
|
||||
HM.lookup "hass.trigger.in" sample `shouldBe` Just (M.Counter 1)
|
||||
HM.lookup "hass.service.out" sample `shouldBe` Just (M.Counter 0)
|
||||
HM.lookup "hass.service.out" sample `shouldBe` Just (M.Counter 1)
|
||||
|
||||
describe "end-to-end (rrdtool-gated)" $ do
|
||||
it "creates an rrd, samples, and updates it" $ do
|
||||
@@ -208,18 +207,20 @@ spec = do
|
||||
bakPrefix = "hass-controller-schema-change-test.rrd.bak-"
|
||||
base = [ DsSpec "a" "a" Derive, DsSpec "b" "b" Gauge ]
|
||||
expanded = base ++ [ DsSpec "c" "c" Derive ]
|
||||
_ <- try (removeFile rrdPath) :: IO (Either SomeException ())
|
||||
ensureRrd rrdtool rrdPath base
|
||||
ensureRrd rrdtool rrdPath base
|
||||
noBackups <- filter (isPrefixOf bakPrefix) <$> listDirectory tmp
|
||||
noBackups `shouldBe` []
|
||||
ensureRrd rrdtool rrdPath expanded
|
||||
backups <- filter (isPrefixOf bakPrefix) <$> listDirectory tmp
|
||||
length backups `shouldBe` 1
|
||||
(rc, out, _) <- readProcessWithExitCode rrdtool ["info", rrdPath] ""
|
||||
rc `shouldBe` ExitSuccess
|
||||
out `shouldContain` "ds[c].type"
|
||||
_ <- try (removeFile rrdPath) :: IO (Either SomeException ())
|
||||
forM_ backups $ \f -> do
|
||||
_ <- try (removeFile (tmp ++ "/" ++ f)) :: IO (Either SomeException ())
|
||||
pure ()
|
||||
clean = do
|
||||
stale <- filter (isPrefixOf bakPrefix) <$> listDirectory tmp
|
||||
forM_ (rrdPath : map (\f -> tmp ++ "/" ++ f) stale) $ \f ->
|
||||
try (removeFile f) :: IO (Either SomeException ())
|
||||
clean
|
||||
( do
|
||||
ensureRrd rrdtool rrdPath base
|
||||
ensureRrd rrdtool rrdPath base
|
||||
noBackups <- filter (isPrefixOf bakPrefix) <$> listDirectory tmp
|
||||
noBackups `shouldBe` []
|
||||
ensureRrd rrdtool rrdPath expanded
|
||||
backups <- filter (isPrefixOf bakPrefix) <$> listDirectory tmp
|
||||
length backups `shouldBe` 1
|
||||
(rc, out, _) <- readProcessWithExitCode rrdtool ["info", rrdPath] ""
|
||||
rc `shouldBe` ExitSuccess
|
||||
out `shouldContain` "ds[c].type"
|
||||
) `finally` clean
|
||||
|
||||
Reference in New Issue
Block a user