hadolint-2.8.0: test/Hadolint/Config/EnvironmentSpec.hs
module Hadolint.Config.EnvironmentSpec (spec) where
import Hadolint
import System.Environment
import Test.Hspec
import qualified Data.Map as Map
import qualified Data.Set as Set
spec :: SpecWith ()
spec = do
describe "Config from Environment" $ do
withoutAll $ do
it "Empty config when nothing is set" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty
withJustEnv "HADOLINT_NOFAIL" "1" $ do
it "parse HADOLINT_NOFAIL=1" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialNoFail = Just True }
withJustEnv "HADOLINT_NOFAIL" "0" $ do
it "parse HADOLINT_NOFAIL=0" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty {partialNoFail = Just False }
withJustEnv "NO_COLOR" "y" $ do
it "parse NO_COLOR=y" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialNoColor = Just True }
withJustEnv "NO_COLOR" "n" $ do
it "parse NO_COLOR=n" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialNoColor = Just False }
withJustEnv "HADOLINT_VERBOSE" "on" $ do
it "parse HADOLINT_VERBOSE=on" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialVerbose = Just True }
withJustEnv "HADOLINT_VERBOSE" "off" $ do
it "parse HADOLINT_VERBOSE=off" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialVerbose = Just False }
withJustEnv "HADOLINT_FORMAT" "json" $ do
it "parse HADOLINT_FORMAT=json" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialFormat = Just Json }
withJustEnv "HADOLINT_FORMAT" "sarif" $ do
it "parse HADOLINT_FORMAT=sarif" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialFormat = Just Sarif }
withJustEnv "HADOLINT_OVERRIDE_ERROR" "DL3010" $ do
it "parse HADOLINT_OVERRIDE_ERROR=DL3010" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialErrorRules = ["DL3010"] }
withJustEnv "HADOLINT_OVERRIDE_ERROR" "DL3010,DL3011" $ do
it "parse HADOLINT_OVERRIDE_ERROR=DL3010,DL3011" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialErrorRules = ["DL3010", "DL3011"] }
withJustEnv "HADOLINT_OVERRIDE_WARNING" "DL3010" $ do
it "parse HADOLINT_OVERRIDE_WARNING=DL3010" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialWarningRules = ["DL3010"] }
withJustEnv "HADOLINT_OVERRIDE_WARNING" "DL3010,DL3011" $ do
it "parse HADOLINT_OVERRIDE_WARNING=DL3010,DL3011" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialWarningRules = ["DL3010", "DL3011"] }
withJustEnv "HADOLINT_OVERRIDE_INFO" "DL3010" $ do
it "parse HADOLINT_OVERRIDE_INFO=DL3010" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialInfoRules = ["DL3010"] }
withJustEnv "HADOLINT_OVERRIDE_INFO" "DL3010,DL3011" $ do
it "parse HADOLINT_OVERRIDE_INFO=DL3010,DL3011" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialInfoRules = ["DL3010", "DL3011"] }
withJustEnv "HADOLINT_OVERRIDE_STYLE" "DL3010" $ do
it "parse HADOLINT_OVERRIDE_STYLE=DL3010" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialStyleRules = ["DL3010"] }
withJustEnv "HADOLINT_OVERRIDE_STYLE" "DL3010,DL3011" $ do
it "parse HADOLINT_OVERRIDE_STYLE=DL3010,DL3011" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialStyleRules = ["DL3010", "DL3011"] }
withJustEnv "HADOLINT_IGNORE" "DL3010" $ do
it "parse HADOLINT_IGNORE=DL3010" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialIgnoreRules = ["DL3010"] }
withJustEnv "HADOLINT_IGNORE" "DL3010,DL3011" $ do
it "parse HADOLINT_IGNORE=DL3010,DL3011" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialIgnoreRules = ["DL3010", "DL3011"] }
withJustEnv "HADOLINT_ALLOWED_REGISTRIES" "foobar.com" $ do
it "parse HADOLINT_ALLOWED_REGISTRIES=foobar.com" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty
{ partialAllowedRegistries =
Set.fromList ["foobar.com"]
}
withJustEnv "HADOLINT_ALLOWED_REGISTRIES" "foobar.com,barfoo.com" $ do
it "parse HADOLINT_ALLOWED_REGISTIRES=foobar.com,barfoo.com" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty
{ partialAllowedRegistries =
Set.fromList ["foobar.com", "barfoo.com"]
}
withJustEnv "HADOLINT_REQUIRE_LABELS" "foo:email" $ do
it "parse HADOLINT_REQUIRE_LABELS=foo:email" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty
{ partialLabelSchema = Map.fromList [("foo", Email)] }
withJustEnv "HADOLINT_REQUIRE_LABELS" "foo:email,bar:text" $ do
it "parse HADOLINT_REQUIRE_LABELS=foo:email,bar:text" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty
{ partialLabelSchema =
Map.fromList [("foo", Email), ("bar", RawText)]
}
withJustEnv "HADOLINT_STRICT_LABELS" "yes" $ do
it "parse HADOLINT_STRICT_LABELS=yes" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialStrictLabels = Just True }
withJustEnv "HADOLINT_STRICT_LABELS" "false" $ do
it "parse HADOLINT_STRICT_LABELS=false" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialStrictLabels = Just False }
withJustEnv "HADOLINT_FAILURE_THRESHOLD" "error" $ do
it "parse HADOLINT_FAILURE_THRESHOLD=error" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialFailureThreshold = Just DLErrorC }
withJustEnv "HADOLINT_FAILURE_THRESHOLD" "style" $ do
it "parse HADOLINT_FAILURE_THRESHOLD=style" $ do
conf <- getConfigFromEnvironment
conf `shouldBe` mempty { partialFailureThreshold = Just DLStyleC }
-- Helper functions for setup and teardown of the environment
withoutAll :: SpecWith () -> SpecWith ()
withoutAll = before unsetAll
withJustEnv :: String -> String -> SpecWith () -> SpecWith ()
withJustEnv name value test =
before_ (setJustEnv name value) $ after_ (unsetEnv name) test
setJustEnv :: String -> String -> IO ()
setJustEnv name value = do
unsetAll
setEnv name value
unsetAll :: IO ()
unsetAll = do
unsetEnv "HADOLINT_NOFAIL"
unsetEnv "NO_COLOR"
unsetEnv "HADOLINT_VERBOSE"
unsetEnv "HADOLINT_FORMAT"
unsetEnv "HADOLINT_OVERRIDE_ERROR"
unsetEnv "HADOLINT_OVERRIDE_WARNING"
unsetEnv "HADOLINT_OVERRIDE_INFO"
unsetEnv "HADOLINT_OVERRIDE_STYLE"
unsetEnv "HADOLINT_IGNORE"
unsetEnv "HADOLINT_ALLOWED_REGISTRIES"
unsetEnv "HADOLINT_REQUIRE_LABELS"
unsetEnv "HADOLINT_STRICT_LABELS"
unsetEnv "HADOLINT_FAILURE_THRESHOLD"