Dont use inspect-dar to discover main package-id in test. (#5372)

changelog_begin
changelog_end
This commit is contained in:
nickchapman-da 2020-04-02 14:12:21 +01:00 committed by GitHub
parent e3a0ec9dcf
commit 38c019ca5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 18 deletions

View File

@ -105,6 +105,7 @@ da_haskell_test(
"aeson", "aeson",
"async", "async",
"base", "base",
"bytestring",
"containers", "containers",
"extra", "extra",
"filepath", "filepath",
@ -115,12 +116,16 @@ da_haskell_test(
"tasty", "tasty",
"tasty-hunit", "tasty-hunit",
"text", "text",
"zip-archive",
], ],
main_function = "DA.Daml.Helper.Test.Deployment.main", main_function = "DA.Daml.Helper.Test.Deployment.main",
src_strip_prefix = "test", src_strip_prefix = "test",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//:sdk-version-hs-lib", "//:sdk-version-hs-lib",
"//compiler/daml-lf-ast",
"//compiler/daml-lf-proto",
"//compiler/daml-lf-reader",
"//libs-haskell/bazel-runfiles", "//libs-haskell/bazel-runfiles",
"//libs-haskell/test-utils", "//libs-haskell/test-utils",
], ],

View File

@ -3,22 +3,26 @@
module DA.Daml.Helper.Test.Deployment (main) where module DA.Daml.Helper.Test.Deployment (main) where
import Data.List.Extra (isInfixOf,splitOn)
import System.Directory.Extra (withCurrentDirectory) import System.Directory.Extra (withCurrentDirectory)
import System.Environment.Blank (setEnv) import System.Environment.Blank (setEnv)
import System.FilePath ((</>)) import System.FilePath ((</>))
import System.IO.Extra (withTempDir,writeFileUTF8) import System.IO.Extra (withTempDir,writeFileUTF8)
import Test.Tasty (TestTree,defaultMain,testGroup) import Test.Tasty (TestTree,defaultMain,testGroup)
import Test.Tasty.HUnit (testCaseSteps) import Test.Tasty.HUnit (testCaseSteps)
import qualified "zip-archive" Codec.Archive.Zip as Zip
import qualified Data.Aeson as Aeson import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Map as Map import qualified Data.Map as Map
import qualified Data.Text as T import qualified Data.Text as T
import qualified Web.JWT as JWT import qualified Web.JWT as JWT
import DA.Bazel.Runfiles (mainWorkspace,locateRunfiles,exe) import DA.Bazel.Runfiles (mainWorkspace,locateRunfiles,exe)
import DA.Daml.LF.Reader (Dalfs(..),readDalfs)
import DA.Test.Process (callProcessSilent)
import DA.Test.Sandbox (mbSharedSecret,withSandbox,defaultSandboxConf) import DA.Test.Sandbox (mbSharedSecret,withSandbox,defaultSandboxConf)
import DA.Test.Process (callProcessSilent,callProcessForStdout)
import SdkVersion (sdkVersion) import SdkVersion (sdkVersion)
import qualified DA.Daml.LF.Ast as LF
import qualified DA.Daml.LF.Proto3.Archive as LFArchive
data Tools = Tools { damlc :: FilePath, damlHelper :: FilePath } data Tools = Tools { damlc :: FilePath, damlHelper :: FilePath }
@ -69,7 +73,7 @@ makeSignedJwt sharedSecret = do
-- | Test `daml ledger fetch-dar` -- | Test `daml ledger fetch-dar`
fetchTest :: Tools -> TestTree fetchTest :: Tools -> TestTree
fetchTest tools@Tools{..} = do fetchTest Tools{..} = do
withSandbox defaultSandboxConf $ \getSandboxPort -> withSandbox defaultSandboxConf $ \getSandboxPort ->
testCaseSteps "fetchTest" $ \step -> do testCaseSteps "fetchTest" $ \step -> do
port <- getSandboxPort port <- getSandboxPort
@ -84,7 +88,7 @@ fetchTest tools@Tools{..} = do
, "--host", "localhost" , "--port" , show port , "--host", "localhost" , "--port" , show port
, origDar , origDar
] ]
pid <- getMainPidByInspecingDar tools origDar "proj1" pid <- getMainPidOfDar origDar
step "fetch/validate" step "fetch/validate"
let fetchedDar = "fetched.dar" let fetchedDar = "fetched.dar"
callProcessSilent damlHelper callProcessSilent damlHelper
@ -95,20 +99,13 @@ fetchTest tools@Tools{..} = do
] ]
callProcessSilent damlc ["validate-dar", fetchedDar] callProcessSilent damlc ["validate-dar", fetchedDar]
-- | Using `daml inspect-dar`, discover the main package-identifier of a dar. -- | Discover the main package-identifier of a dar.
getMainPidByInspecingDar :: Tools -> FilePath -> String -> IO String getMainPidOfDar :: FilePath -> IO String
getMainPidByInspecingDar Tools{damlc} dar projName = do getMainPidOfDar fp = do
stdout <- callProcessForStdout damlc ["inspect-dar", dar] archive <- Zip.toArchive <$> BSL.readFile fp
[grepped] <- pure $ Dalfs mainDalf _ <- either fail pure $ readDalfs archive
[ line Right pkgId <- pure $ LFArchive.decodeArchivePackageId $ BSL.toStrict mainDalf
| line <- lines stdout return $ T.unpack $ LF.unPackageId pkgId
-- expect a single line containing double quotes and the projName
, "\"" `isInfixOf` line
, projName `isInfixOf` line
]
-- and the main pid is found between the 1st and 2nd double-quotes
[_,pid,_] <- pure $ splitOn "\"" grepped
return pid
-- | Write `daml.yaml` and `Main.daml` files in the current directory. -- | Write `daml.yaml` and `Main.daml` files in the current directory.
writeMinimalProject :: IO () writeMinimalProject :: IO ()