48 lines
1.5 KiB
Haskell
48 lines
1.5 KiB
Haskell
module Main where
|
|
|
|
import MiniValidation.Manifest
|
|
( Environment (Production)
|
|
, MaintenanceWindow (MaintenanceWindow)
|
|
, ReleaseManifest (ReleaseManifest)
|
|
, RolloutStrategy (Canary)
|
|
, Validation (Failure, Success)
|
|
, readRawManifest
|
|
, renderManifest
|
|
, validateManifest
|
|
)
|
|
import System.Exit (die)
|
|
|
|
main :: IO ()
|
|
main =
|
|
case
|
|
( readRawManifest
|
|
[ "service=api-gateway"
|
|
, "env=production"
|
|
, "owners=platform,security"
|
|
, "replicas=3"
|
|
, "strategy=canary:20"
|
|
, "window=22-24"
|
|
]
|
|
, readRawManifest
|
|
[ "service=API"
|
|
, "env=prod"
|
|
, "owners=platform,platform"
|
|
, "replicas=1"
|
|
, "strategy=canary:75"
|
|
, "window=24-20"
|
|
]
|
|
) of
|
|
( Right validRawManifest
|
|
, Right invalidRawManifest
|
|
) ->
|
|
case (validateManifest validRawManifest, validateManifest invalidRawManifest) of
|
|
( Success (ReleaseManifest "api-gateway" Production ["platform", "security"] 3 (Canary 20) (MaintenanceWindow 22 24))
|
|
, Failure validationErrors
|
|
) | renderManifest
|
|
(ReleaseManifest "api-gateway" Production ["platform", "security"] 3 (Canary 20) (MaintenanceWindow 22 24))
|
|
== "service api-gateway, env production, owners platform/security, replicas 3, strategy canary 20%, window 22-24"
|
|
&& length validationErrors == 6 ->
|
|
putStrLn "test passed"
|
|
_ -> die "unexpected validation result"
|
|
_ -> die "unexpected manifest parse result"
|