From 3588b01e13b737417a1d3e38d34876a65b1bbcb6 Mon Sep 17 00:00:00 2001 From: LoveIsGrief Date: Sun, 20 Aug 2023 15:22:40 +0200 Subject: [PATCH] test: Add tests for using build.context These are simple tests to make sure that the generated docker-compose.json looks like it should. This means has a build.context and does NOT have an image defined - the image is built when starting the service. --- src/haskell/test/Arion/NixSpec.hs | 41 +++++++++++++------ src/haskell/test/Spec.hs | 1 + .../Arion/NixSpec/arion-context-compose.json | 41 +++++++++++++++++++ .../Arion/NixSpec/arion-context-compose.nix | 9 ++++ .../Arion/NixSpec/build-context/Dockerfile | 4 ++ 5 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 src/haskell/testdata/Arion/NixSpec/arion-context-compose.json create mode 100644 src/haskell/testdata/Arion/NixSpec/arion-context-compose.nix create mode 100644 src/haskell/testdata/Arion/NixSpec/build-context/Dockerfile diff --git a/src/haskell/test/Arion/NixSpec.hs b/src/haskell/test/Arion/NixSpec.hs index e20bebf..8f0c25e 100644 --- a/src/haskell/test/Arion/NixSpec.hs +++ b/src/haskell/test/Arion/NixSpec.hs @@ -13,19 +13,34 @@ import qualified Data.Text as T import qualified Data.Text.IO as T spec :: Spec -spec = describe "evaluateComposition" $ it "matches an example" $ do - x <- Arion.Nix.evaluateComposition EvaluationArgs - { evalUid = 123 - , evalModules = NEL.fromList - ["src/haskell/testdata/Arion/NixSpec/arion-compose.nix"] - , evalPkgs = "import { system = \"x86_64-linux\"; }" - , evalWorkDir = Nothing - , evalMode = ReadOnly - , evalUserArgs = ["--show-trace"] - } - let actual = pretty x - expected <- T.readFile "src/haskell/testdata/Arion/NixSpec/arion-compose.json" - censorPaths actual `shouldBe` censorPaths expected +spec = describe "evaluateComposition" $ do + it "matches an example" $ do + x <- Arion.Nix.evaluateComposition EvaluationArgs + { evalUid = 123 + , evalModules = NEL.fromList + ["src/haskell/testdata/Arion/NixSpec/arion-compose.nix"] + , evalPkgs = "import { system = \"x86_64-linux\"; }" + , evalWorkDir = Nothing + , evalMode = ReadOnly + , evalUserArgs = ["--show-trace"] + } + let actual = pretty x + expected <- T.readFile "src/haskell/testdata/Arion/NixSpec/arion-compose.json" + censorPaths actual `shouldBe` censorPaths expected + + it "matches an build.context example" $ do + x <- Arion.Nix.evaluateComposition EvaluationArgs + { evalUid = 1234 + , evalModules = NEL.fromList + ["src/haskell/testdata/Arion/NixSpec/arion-context-compose.nix"] + , evalPkgs = "import { system = \"x86_64-linux\"; }" + , evalWorkDir = Nothing + , evalMode = ReadOnly + , evalUserArgs = ["--show-trace"] + } + let actual = pretty x + expected <- T.readFile "src/haskell/testdata/Arion/NixSpec/arion-context-compose.json" + censorPaths actual `shouldBe` censorPaths expected censorPaths :: Text -> Text censorPaths = censorImages . censorStorePaths diff --git a/src/haskell/test/Spec.hs b/src/haskell/test/Spec.hs index d2da234..06d3acc 100644 --- a/src/haskell/test/Spec.hs +++ b/src/haskell/test/Spec.hs @@ -9,3 +9,4 @@ import qualified Arion.NixSpec spec :: Spec spec = do describe "Arion.Nix" Arion.NixSpec.spec + diff --git a/src/haskell/testdata/Arion/NixSpec/arion-context-compose.json b/src/haskell/testdata/Arion/NixSpec/arion-context-compose.json new file mode 100644 index 0000000..ae67f53 --- /dev/null +++ b/src/haskell/testdata/Arion/NixSpec/arion-context-compose.json @@ -0,0 +1,41 @@ +{ + "networks": { + "default": { + "name": "unit-test-data" + } + }, + "services": { + "webserver": { + "build": { + "context": "" + }, + "environment": {}, + "ports": [ + "8080:80" + ], + "sysctls": {}, + "volumes": [] + } + }, + "version": "3.4", + "volumes": {}, + "x-arion": { + "images": [ + { + "imageExe": "", + "imageName": "localhost/webserver", + "imageTag": "" + } + ], + "project": { + "name": "unit-test-data" + }, + "serviceInfo": { + "webserver": { + "defaultExec": [ + "/bin/sh" + ] + } + } + } +} diff --git a/src/haskell/testdata/Arion/NixSpec/arion-context-compose.nix b/src/haskell/testdata/Arion/NixSpec/arion-context-compose.nix new file mode 100644 index 0000000..a4c5b7c --- /dev/null +++ b/src/haskell/testdata/Arion/NixSpec/arion-context-compose.nix @@ -0,0 +1,9 @@ +{ + project.name = "unit-test-data"; + services.webserver.service = { + build.context = "${./build-context}"; + ports = [ + "8080:80" + ]; + }; +} diff --git a/src/haskell/testdata/Arion/NixSpec/build-context/Dockerfile b/src/haskell/testdata/Arion/NixSpec/build-context/Dockerfile new file mode 100644 index 0000000..d2ba487 --- /dev/null +++ b/src/haskell/testdata/Arion/NixSpec/build-context/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx + +RUN echo this is a dockerfile to be built +