packages feed

baserock-schema-0.0.2.0: test/Spec.hs

import           Baserock.Schema.V9
import           Control.Error
import           Data.Yaml
import           RIO
import           RIO.Directory
import qualified RIO.ByteString                as BS
import           Test.Hspec
import           Test.QuickCheck

v9_mock_chunk_instructions_brie_cc = ChunkInstructions
  { _chunkInstructionsName = "brie-cc"
  , _buildSystem           = "autotools"
  , _preConfigureCommands  = ["make configure"]
  , _configureCommands     = []
  , _postConfigureCommands = []
  , _preBuildCommands      = []
  , _buildCommands         = ["make all"]
  , _postBuildCommands     = []
  , _preInstallCommands    = []
  , _installCommands       = []
  , _postInstallCommands   = []
  }

v9_mock_chunk_instructions_linux_api_headers = ChunkInstructions
  { _chunkInstructionsName = "linux-api-headers"
  , _buildSystem           = "autotools"
  , _preConfigureCommands  = ["make configure"]
  , _configureCommands     = []
  , _postConfigureCommands = []
  , _preBuildCommands      = []
  , _buildCommands         = ["make all"]
  , _postBuildCommands     = []
  , _preInstallCommands    = []
  , _installCommands       = []
  , _postInstallCommands   = []
  }

v9_mock_stratum_grilled_essential = Stratum
  { _stratumName        = "grilled-essential"
  , _stratumDescription = Nothing
  , _stratumBDs         = []
  , _chunks             = [ Chunk
                            { _chunkName        = "brie-cc"
                            , _buildMode        = "staging"
                            , _chunkBuildSystem = "manual"
                            , _repo             = "gitlab:brie-cc"
                            , _chunkMorph       = Just
                              "quux/strata/grilled-essential/brie-cc.morph"
                            , _ref              = "foo"
                            , _sha = Just "0c3506aa4f33da7fc2fba0fd6b614bf8e861e3ba"
                            , _chunkBDs         = []
                            }
                          , Chunk
                            { _chunkName        = "linux-api-headers"
                            , _buildMode        = "staging"
                            , _chunkBuildSystem = "manual"
                            , _repo             = "gitlab:kernel/linux-stable"
                            , _chunkMorph       = Just
                              "quux/strata/grilled-essential/linux-api-headers.morph"
                            , _ref              = "bar"
                            , _sha = Just "9db87049dd8b357bf9be97f6394b5251e8606fe2"
                            , _chunkBDs         = ["brie-cc"]
                            }
                          ]
  }

v9_mock_chunk_instructions_ccake = ChunkInstructions
  { _chunkInstructionsName = "ccake"
  , _buildSystem           = "autotools"
  , _preConfigureCommands  = ["make configure"]
  , _configureCommands     = []
  , _postConfigureCommands = []
  , _preBuildCommands      = []
  , _buildCommands         = ["make all"]
  , _postBuildCommands     = []
  , _preInstallCommands    = []
  , _installCommands       = []
  , _postInstallCommands   = []
  }

v9_mock_chunk_instructions_sesame_sed = ChunkInstructions
  { _chunkInstructionsName = "sesame-sed"
  , _buildSystem           = "autotools"
  , _preConfigureCommands  = ["make configure"]
  , _configureCommands     = []
  , _postConfigureCommands = []
  , _preBuildCommands      = []
  , _buildCommands         = ["make all"]
  , _postBuildCommands     = []
  , _preInstallCommands    = []
  , _installCommands       = []
  , _postInstallCommands   = []
  }

v9_mock_stratum_core = Stratum
  { _stratumName        = "core"
  , _stratumDescription = Nothing
  , _stratumBDs         = [ StratumBD
                              { _stratumBDMorph = "quux/strata/grilled-essential.morph"
                              }
                          ]
  , _chunks             = [ Chunk
                            { _chunkName        = "ccake"
                            , _buildMode        = "staging"
                            , _chunkBuildSystem = "manual"
                            , _repo             = "gitlab:upstream/ccake"
                            , _chunkMorph = Just "quux/strata/core/ccake.morph"
                            , _ref              = "master"
                            , _sha = Just "0c3506aa4f33da7fc2fba0fd6b614bf8e861e3ba"
                            , _chunkBDs         = []
                            }
                          , Chunk
                            { _chunkName        = "sesame-sed"
                            , _buildMode        = "staging"
                            , _chunkBuildSystem = "manual"
                            , _repo             = "gitlab:upstream/sesame-sed"
                            , _chunkMorph = Just "quux/strata/core/sesame-sed.morph"
                            , _ref              = "master"
                            , _sha = Just "0c3506aa4f33da7fc2fba0fd6b614bf8e861e3ba"
                            , _chunkBDs         = ["ccake"]
                            }
                          ]
  }

v9_mock_system_quux = System
  { _systemName              = "quux-system-x86_32"
  , _systemDescription       = Nothing
  , _arch                    = "x86_32"
  , _strata                  = [ StratumInclude
                                 { _stratumIncludeName = "grilled-essential"
                                 , _stratumIncludeMorph = "quux/strata/grilled-essential.morph"
                                 }
                               , StratumInclude
                                 { _stratumIncludeName = "core"
                                 , _stratumIncludeMorph = "quux/strata/core.morph"
                                 }
                               ]
  , _configurationExtensions = ["extensions/smooth-and-creamy"]
  }

v9_mock_stratum_grilled_essential_ast =
  ( v9_mock_stratum_grilled_essential
  , [ ( "quux/strata/grilled-essential/brie-cc.morph"
      , v9_mock_chunk_instructions_brie_cc
      )
    , ( "quux/strata/grilled-essential/linux-api-headers.morph"
      , v9_mock_chunk_instructions_linux_api_headers
      )
    ]
  )

v9_mock_stratum_core_ast =
  ( v9_mock_stratum_core
  , [ ("quux/strata/core/ccake.morph", v9_mock_chunk_instructions_ccake)
    , ( "quux/strata/core/sesame-sed.morph"
      , v9_mock_chunk_instructions_sesame_sed
      )
    ]
  )

v9_mock_system_quux_ast =
  ( v9_mock_system_quux
  , [ ( "quux/strata/grilled-essential.morph"
      , v9_mock_stratum_grilled_essential_ast
      )
    , ("quux/strata/core.morph", v9_mock_stratum_core_ast)
    ]
  )

in_mock_definitions_v9 =
  around_ $ withCurrentDirectory "test/mock-definitions-v9"

testDecodeAgainst x y = decodeFileThrow x `shouldReturn` Just y

main :: IO ()
main = hspec $ in_mock_definitions_v9 $ describe "Baserock.Schema.V9" $ do
  describe "ChunkInstructions" $ do
    it "decodes correctly" $ do
      "quux/strata/grilled-essential/brie-cc.morph"
        `testDecodeAgainst` v9_mock_chunk_instructions_brie_cc
      "quux/strata/grilled-essential/linux-api-headers.morph"
        `testDecodeAgainst` v9_mock_chunk_instructions_linux_api_headers
      "quux/strata/core/ccake.morph"
        `testDecodeAgainst` v9_mock_chunk_instructions_ccake
      "quux/strata/core/sesame-sed.morph"
        `testDecodeAgainst` v9_mock_chunk_instructions_sesame_sed
    it "encodes correctly" $ do
      BS.readFile "quux/strata/grilled-essential/brie-cc.morph"
        `shouldReturn` toPrettyYaml v9_mock_chunk_instructions_brie_cc
      BS.readFile "quux/strata/grilled-essential/linux-api-headers.morph"
        `shouldReturn` toPrettyYaml v9_mock_chunk_instructions_linux_api_headers
      BS.readFile "quux/strata/core/ccake.morph"
        `shouldReturn` toPrettyYaml v9_mock_chunk_instructions_ccake
      BS.readFile "quux/strata/core/sesame-sed.morph"
        `shouldReturn` toPrettyYaml v9_mock_chunk_instructions_sesame_sed

  describe "Stratum" $ do
    it "decodes correctly" $ do
      "quux/strata/grilled-essential.morph"
        `testDecodeAgainst` v9_mock_stratum_grilled_essential
      "quux/strata/core.morph" `testDecodeAgainst` v9_mock_stratum_core
    it "encodes correctly" $ do
      BS.readFile "quux/strata/grilled-essential.morph"
        `shouldReturn` toPrettyYaml v9_mock_stratum_grilled_essential
      BS.readFile "quux/strata/core.morph"
        `shouldReturn` toPrettyYaml v9_mock_stratum_core

  describe "System" $ do
    it "decodes correctly"
      $                   "quux/systems/quux-system-x86_32.morph"
      `testDecodeAgainst` v9_mock_system_quux
    it "encodes correctly"
      $              BS.readFile "quux/systems/quux-system-x86_32.morph"
      `shouldReturn` toPrettyYaml v9_mock_system_quux