packages feed

hocker-1.0.0: test/Tests/Data/Docker/Image.hs

{-# LANGUAGE LambdaCase        #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards   #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Docker.Image
-- Copyright   :  (C) 2016 Awake Networks
-- License     :  Apache-2.0
-- Maintainer  :  Awake Networks <opensource@awakenetworks.com>
-- Stability   :  stable
----------------------------------------------------------------------------

module Tests.Data.Docker.Image where

import           Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as C8L
import           Data.Docker.Image.Types
import           Data.HashMap.Strict        as H
import           Test.Tasty
import           Test.Tasty.HUnit

import           Hocker.Lib

-----------------------------------------------------------------------------
--
unitTests = testGroup "V1.2 Image Tests"
  [ testCase "ImageManifest golden encoding"      testImageManifestGoldenEncoding
  , testCase "ImageManifest two-way encoding"     testImageManifestTwoWayEncoding
  , testCase "ImageRepositories golden encoding"  testImageRepositoriesGoldenEncoding
  , testCase "ImageRepositories two-way encoding" testImageRepositoriesTwoWayEncoding
  ]

-----------------------------------------------------------------------------
-- TESTS

testImageManifestGoldenEncoding =
  let goldenStr = "[{\"Config\":\"3e83c23dba6a16cd936a3dc044df71b26706c5a4c28181bc3ca4a4af9f5f38ee.json\",\"Layers\":[\"10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9/layer.tar\"],\"RepoTags\":[\"library/debian:jessie\"]}]"
      imgManifest = [ImageManifest
                      "3e83c23dba6a16cd936a3dc044df71b26706c5a4c28181bc3ca4a4af9f5f38ee.json"
                      [ "library/debian:jessie" ]
                      [ "10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9/layer.tar" ]
                    ]
  in (Hocker.Lib.encodeCanonical imgManifest) @?= (C8L.pack goldenStr)

testImageManifestTwoWayEncoding =
  let imgManifest = [ImageManifest
                      "3e83c23dba6a16cd936a3dc044df71b26706c5a4c28181bc3ca4a4af9f5f38ee.json"
                      [ "library/debian:jessie" ]
                      [ "10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9/layer.tar" ]
                    ]
      encoded     = Hocker.Lib.encodeCanonical imgManifest
  in decode encoded @?= (Just imgManifest)

testImageRepositoriesGoldenEncoding =
  let goldenStr   = "{\"library/debian\":{\"jessie\":\"10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9\"}}"
      imgRepos    = ImageRepositories
                     [ImageRepo
                        "library/debian"
                        (H.singleton
                           "jessie"
                           "10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9")]

  in (Hocker.Lib.encodeCanonical imgRepos) @?= (C8L.pack goldenStr)

testImageRepositoriesTwoWayEncoding =
  let imgRepos = ImageRepositories
                  [ImageRepo
                     "library/debian"
                     (H.singleton
                        "jessie"
                        "10a267c67f423630f3afe5e04bbbc93d578861ddcc54283526222f3ad5e895b9")]
      encoded  = Hocker.Lib.encodeCanonical imgRepos
  in decode encoded @?= (Just imgRepos)