Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
argotest
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Reis
argotest
Commits
f440c7a5
Commit
f440c7a5
authored
Jan 23, 2019
by
Valentin Reis
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'refactor-powerexpe'
parents
53721368
489a6b98
Pipeline
#4993
failed with stage
in 1 minute
Changes
15
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
419 additions
and
151 deletions
+419
-151
argo/argo.cabal
argo/argo.cabal
+16
-1
argo/src/Argo.hs
argo/src/Argo.hs
+9
-1
argo/src/Argo/Args.hs
argo/src/Argo/Args.hs
+28
-18
argo/src/Argo/Stack.hs
argo/src/Argo/Stack.hs
+57
-62
argo/src/Argo/Utils.hs
argo/src/Argo/Utils.hs
+48
-26
argotk/argotk.cabal
argotk/argotk.cabal
+15
-1
argotk/argotk.hs
argotk/argotk.hs
+102
-22
default.nix
default.nix
+21
-12
gitlab/basic.yml
gitlab/basic.yml
+14
-0
manifests/parallel.json
manifests/parallel.json
+39
-0
package.nix
package.nix
+60
-0
pin.json
pin.json
+3
-3
test.nix
test.nix
+3
-1
tests/fulljson/cmd-uuid/containers.json
tests/fulljson/cmd-uuid/containers.json
+2
-2
tests/fulljson/cmd-uuid/nrm.json
tests/fulljson/cmd-uuid/nrm.json
+2
-2
No files found.
argo/argo.cabal
View file @
f440c7a5
...
...
@@ -12,6 +12,21 @@ library
exposed-Modules: Argo.Stack
Argo.Utils
Argo.Args
build-depends: base >=4 && <=8, turtle, data-default, managed, ansi-terminal, unix, system-filepath, async, process, text, optparse-applicative, extra, foldl, conduit,conduit-extra, bytestring, stm, pretty-show
build-depends: base >=4 && <=8, turtle, data-default, managed, ansi-terminal, unix, system-filepath, async, process, text, optparse-applicative, extra, foldl, conduit,conduit-extra, bytestring, stm, pretty-show
, unliftio-core
hs-source-dirs: src
default-language: Haskell2010
ghc-options:
-Wall
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-Wmissing-home-modules
-Widentities
-Wredundant-constraints
-Wcpp-undef
-Wmissing-export-li
-fwarn-tabs
-fwarn-unused-imports
-fwarn-missing-signatures
-fwarn-name-shadowing
-fwarn-incomplete-patternssts
-fprint-potential-instances
argo/src/Argo.hs
View file @
f440c7a5
{-|
Module : Argo
Description : The holt core package
Copyright : (c) Valentin Reis, 2018
License : MIT
Maintainer : fre@freux.fr
-}
module
Argo
(
module
Argo
.
Stack
(
module
Argo
.
Args
,
module
Argo
.
Args
,
module
Argo
.
Utils
)
where
...
...
argo/src/Argo/Args.hs
View file @
f440c7a5
...
...
@@ -11,14 +11,12 @@ import Data.Text as T
import
Turtle
hiding
(
option
)
import
Prelude
hiding
(
FilePath
)
import
System.Process
hiding
(
shell
)
data
OutputFiles
=
OutputFiles
FilePath
FilePath
data
StackArgs
=
StackArgs
{
verbosity
::
Verbosity
,
app
::
AppName
,
args
::
AppArgs
,
args
::
[
AppArg
]
,
containerName
::
ContainerName
,
workingDirectory
::
WorkingDirectory
,
manifestDir
::
ManifestDir
...
...
@@ -27,11 +25,13 @@ data StackArgs = StackArgs
,
cmdrun
::
ProcessBehavior
,
cmdlisten
::
ProcessBehavior
,
cmdlistenprogress
::
ProcessBehavior
,
cmdlistenperformance
::
ProcessBehavior
,
cmdlistenpower
::
ProcessBehavior
}
}
deriving
(
Show
)
{-data OutputFiles = OutputFiles FilePath FilePath-}
data
Verbosity
=
Normal
|
Verbose
deriving
(
Show
,
Read
,
Eq
)
newtype
AppArg
s
=
AppArgs
[
Text
]
deriving
(
Show
,
Read
)
newtype
AppArg
=
AppArg
Text
deriving
(
IsString
,
Show
,
Read
)
newtype
WorkingDirectory
=
WorkingDirectory
FilePath
deriving
(
IsString
,
Show
)
newtype
AppName
=
AppName
Text
deriving
(
IsString
,
Show
,
Read
)
newtype
ContainerName
=
ContainerName
Text
deriving
(
IsString
,
Show
,
Read
)
...
...
@@ -56,7 +56,7 @@ instance Default StackArgs where
def
=
StackArgs
{
verbosity
=
Normal
,
app
=
AppName
"ls"
,
args
=
AppArgs
[]
,
args
=
[]
,
containerName
=
ContainerName
"testContainer"
,
workingDirectory
=
WorkingDirectory
"_output"
,
manifestDir
=
ManifestDir
"manifests"
...
...
@@ -65,83 +65,93 @@ instance Default StackArgs where
,
cmdrun
=
DontRun
,
cmdlisten
=
DontRun
,
cmdlistenprogress
=
DontRun
,
cmdlistenperformance
=
DontRun
,
cmdlistenpower
=
DontRun
}
parseExtendStackArgs
::
StackArgs
->
Parser
StackArgs
parseExtendStackArgs
StackArgs
{
..
}
=
do
parseExtendStackArgs
sa
=
do
verbosity
<-
flag
Normal
Verbose
(
long
"verbose"
<>
short
'v'
<>
help
"Enable verbose mode"
)
app
<-
strOption
(
long
"app
lication
"
(
long
"app"
<>
metavar
"APP"
<>
help
"Target application executable name. PATH is inherited."
<>
showDefault
<>
value
app
<>
value
(
app
sa
)
)
containerName
<-
strOption
(
long
"container_name"
<>
metavar
"ARGO_CONTAINER_UUID"
<>
help
"Container name"
<>
showDefault
<>
value
containerName
<>
value
(
containerName
sa
)
)
workingDirectory
<-
strOption
(
long
"output_dir"
<>
metavar
"DIR"
<>
help
"Working directory."
<>
showDefault
<>
value
workingDirectory
<>
value
(
workingDirectory
sa
)
)
manifestDir
<-
strOption
(
long
"manifest_directory"
<>
metavar
"DIR"
<>
help
"Manifest lookup directory"
<>
showDefault
<>
value
manifestDir
<>
value
(
manifestDir
sa
)
)
manifestName
<-
strOption
(
long
"manifest_name"
<>
metavar
"FILENAME"
<>
help
"Manifest file basename (relative to --manifest_directory)"
<>
showDefault
<>
value
manifestName
<>
value
(
manifestName
sa
)
)
daemon
<-
behaviorOption
(
long
"daemon"
<>
metavar
"BEHAVIOR"
<>
help
"`daemon` behavior"
<>
showDefault
<>
value
daemon
<>
value
(
daemon
sa
)
)
cmdrun
<-
behaviorOption
(
long
"cmd_run"
<>
metavar
"BEHAVIOR"
<>
help
"`cmd run` behavior"
<>
showDefault
<>
value
cmdrun
<>
value
(
cmdrun
sa
)
)
cmdlisten
<-
behaviorOption
(
long
"cmd_listen"
<>
metavar
"BEHAVIOR"
<>
help
"`cmd listen` behavior"
<>
showDefault
<>
value
cmdlisten
<>
value
(
cmdlisten
sa
)
)
cmdlistenperformance
<-
behaviorOption
(
long
"cmd_listen_performance"
<>
metavar
"BEHAVIOR"
<>
help
"`cmd listen --filter performance` behavior"
<>
showDefault
<>
value
(
cmdlistenperformance
sa
)
)
cmdlistenprogress
<-
behaviorOption
(
long
"cmd_listen_progress"
<>
metavar
"BEHAVIOR"
<>
help
"`cmd listen --filter progress` behavior"
<>
showDefault
<>
value
cmdlistenprogress
<>
value
(
cmdlistenprogress
sa
)
)
cmdlistenpower
<-
behaviorOption
(
long
"cmd_listen_power"
<>
metavar
"BEHAVIOR"
<>
help
"`cmd listen --filter power` behavior"
<>
showDefault
<>
value
cmdlistenpower
<>
value
(
cmdlistenpower
sa
)
)
args
<-
some
(
argument
str
(
metavar
"ARGS"
<>
help
"Application arguments."
))
<|>
pure
(
args
sa
)
pure
StackArgs
{
..
}
argo/src/Argo/Stack.hs
View file @
f440c7a5
This diff is collapsed.
Click to expand it.
argo/src/Argo/Utils.hs
View file @
f440c7a5
{-# LANGUAGE LambdaCase, OverloadedStrings, DataKinds,
FlexibleInstances,
TypeOperators, RecordWildCard
s #-}
FlexibleInstances,
ScopedTypeVariables, TypeOperator
s #-}
module
Argo.Utils
where
...
...
@@ -14,15 +14,24 @@ import Data.Conduit
import
Data.Conduit.Process
hiding
(
shell
)
import
Data.ByteString
as
B
hiding
(
empty
)
import
System.IO
(
BufferMode
(
NoBuffering
)
,
hSetBuffering
)
import
Control.Monad.IO.Unlift
(
MonadIO
(
..
)
,
MonadUnliftIO
,
withRunInIO
)
import
Data.Text.Encoding
as
TE
import
Data.Conduit.Combinators
as
CC
import
Control.Exception.Base
import
Data.Typeable
import
Data.Text
as
T
import
qualified
System.IO
as
IO
-- | Miscellaneous printing utilities
colorShell
::
Color
->
Shell
()
->
Shell
()
colorShell
color
s
=
setC
color
*>
s
*>
setC
White
colorShell
color
s
he
=
setC
color
*>
she
*>
setC
White
where
setC
c
=
liftIO
$
setSGR
[
SetColor
Foreground
Dull
c
]
printInfo
::
Text
->
Shell
()
...
...
@@ -33,22 +42,24 @@ printSuccess :: Text -> Shell ()
printTest
::
Text
->
Shell
()
dieRed
::
Text
->
Shell
()
printInfo
=
printf
(
"Info: "
%
s
)
printInfo
=
printf
(
"Info: "
%
s
%
"
\n
"
)
printCommand
=
printf
(
"Running: "
%
s
%
"
\n
"
)
printWarning
=
colorShell
Yellow
.
printf
(
"Warning: "
%
s
)
printError
=
colorShell
Red
.
printf
(
"Error: "
%
s
)
printSuccess
=
colorShell
Green
.
printf
(
"Success: "
%
s
)
printWarning
=
colorShell
Yellow
.
printf
(
"Warning: "
%
s
%
"
\n
"
)
printError
=
colorShell
Red
.
printf
(
"Error: "
%
s
%
"
\n
"
)
printSuccess
=
colorShell
Green
.
printf
(
"Success: "
%
s
%
"
\n
"
)
printTest
=
colorShell
Green
.
printf
(
"RUNNING TEST: "
%
s
%
"
\n
"
)
dieRed
str
=
colorShell
Red
(
printf
(
"Failure: "
%
s
)
str
)
>>
exit
(
ExitFailure
1
)
myWhich
::
FilePath
->
Shell
FilePath
myWhich
str
=
which
str
>>=
\
case
(
Just
p
)
->
printInfo
(
format
(
"Found "
%
fp
%
" at "
%
fp
%
"
\n
"
)
str
p
)
>>
return
p
printInfo
(
format
(
"Found "
%
fp
%
" at "
%
fp
)
str
p
)
>>
return
p
Nothing
->
die
$
format
(
"Argo `"
%
fp
%
"` not in $PATH."
)
str
myWhichMaybe
::
FilePath
->
Shell
(
Maybe
FilePath
)
myWhichMaybe
str
=
which
str
>>=
\
case
(
Just
p
)
->
printInfo
(
format
(
"Found "
%
fp
%
" at "
%
fp
%
"
\n
"
)
str
p
)
(
Just
p
)
->
printInfo
(
format
(
"Found "
%
fp
%
" at "
%
fp
)
str
p
)
>>
return
(
Just
p
)
Nothing
->
return
Nothing
...
...
@@ -56,7 +67,7 @@ sudoRemoveFile :: (Text -> Shell ()) -> Text -> FilePath -> Shell ()
sudoRemoveFile
printer
desc
filePath
=
do
foundSocket
<-
testfile
filePath
when
foundSocket
$
go
False
printInfo
$
format
(
"OK: "
%
s
%
" "
%
fp
%
"
\n
"
)
desc
filePath
printInfo
$
format
(
"OK: "
%
s
%
" "
%
fp
)
desc
filePath
where
go
useSudo
=
do
printer
$
format
(
"found stale "
%
s
%
" at "
%
fp
%
".. "
)
desc
filePath
...
...
@@ -65,7 +76,7 @@ sudoRemoveFile printer desc filePath = do
Turtle
.
empty
>>=
\
case
ExitSuccess
->
colorShell
Green
$
printf
" Successfully removed.
\n
"
ExitFailure
n
->
if
useSudo
ExitFailure
_
->
if
useSudo
then
printer
$
format
(
"Failed to remove stale "
%
s
%
", even with sudo."
)
desc
...
...
@@ -76,13 +87,14 @@ sudoRemoveFile printer desc filePath = do
go
True
verboseShell
::
Text
->
Shell
Line
->
Shell
ExitCode
verboseShell
command
i
nput
=
printCommand
command
>>
shell
command
input
verboseShell
command
i
=
printCommand
command
>>
shell
command
i
verboseShell'
::
Text
->
Shell
Line
->
Shell
(
ExitCode
,
Text
,
Text
)
verboseShell'
command
input
=
printCommand
command
>>
shellStrictWithErr
command
input
verboseShell'
command
i
=
printCommand
command
>>
shellStrictWithErr
command
i
cleanSocket
::
FilePath
->
Shell
()
cleanSocket
=
sudoRemoveFile
printError
"socket"
cleanLog
::
FilePath
->
Shell
()
cleanLog
=
sudoRemoveFile
printWarning
"log folder"
kbInstallHandler
::
IO
()
->
IO
Handler
...
...
@@ -99,17 +111,16 @@ data Instrumentation = Instrumentation
deriving
(
Show
)
runI
::
Instrumentation
->
IO
(
Either
PatternMatched
(
ExitCode
,
()
,
()
))
runI
(
Instrumentation
c
p
outlog
@
(
StdOutLog
out
)
errlog
@
(
StdErrLog
e
rr
)
t
)
=
try
(
reroutedDaemon
c
p
)
runI
(
Instrumentation
c
rProc
(
StdOutLog
stdOut
)
(
StdErrLog
stdE
rr
)
t
)
=
try
(
reroutedDaemon
c
rProc
)
where
reroutedDaemon
process
=
withSinkFile
(
T
.
unpack
out
)
$
\
outSink
->
withSinkFile
(
T
.
unpack
err
)
$
\
errSink
->
sourceProcessWithStreams
process
mempty
(
makeMatcher
t
.|
outSink
)
(
makeMatcher
t
.|
errSink
)
withSinkFileNoBuffering
(
T
.
unpack
stdOut
)
$
\
outSink
->
withSinkFile
(
T
.
unpack
stdErr
)
$
\
errSink
->
sourceProcessWithStreams
process
mempty
(
makeMatcher
t
.|
outSink
)
(
makeMatcher
t
.|
errSink
)
makeMatcher
maybeMessage
=
case
maybeMessage
of
Just
(
TestText
msg
)
->
untilMatch
msg
Nothing
->
awaitForever
yield
...
...
@@ -124,8 +135,19 @@ runI (Instrumentation cp outlog@(StdOutLog out) errlog@(StdErrLog err) t) = try
untilMatch
message
_
->
return
()
withSinkFileNoBuffering
::
(
MonadUnliftIO
m
,
MonadIO
n
)
=>
IO
.
FilePath
->
(
ConduitM
ByteString
o
n
()
->
m
a
)
->
m
a
withSinkFileNoBuffering
filepath
inner
=
withRunInIO
$
\
run
->
IO
.
withBinaryFile
filepath
IO
.
WriteMode
$
\
h
->
do
hSetBuffering
h
NoBuffering
run
$
inner
$
sinkHandle
h
processBehaviorToI
::
CreateProcess
->
ProcessBehavior
->
Maybe
Instrumentation
processBehaviorToI
cp
=
\
case
DontRun
->
Nothing
JustRun
out
err
->
Just
$
Instrumentation
cp
out
err
Nothing
SucceedTestOnMessage
t
out
err
->
Just
$
Instrumentation
cp
out
err
(
Just
t
)
processBehaviorToI
crProc
=
\
case
DontRun
->
Nothing
JustRun
stdOut
stdErr
->
Just
$
Instrumentation
crProc
stdOut
stdErr
Nothing
SucceedTestOnMessage
t
stdOut
stdErr
->
Just
$
Instrumentation
crProc
stdOut
stdErr
(
Just
t
)
argotk/argotk.cabal
View file @
f440c7a5
...
...
@@ -19,4 +19,18 @@ executable argotk
build-depends: base, shake, argo, turtle, data-default, async, unix, text, optparse-applicative, foldl, ansi-terminal
--hs-source-dirs: src
default-language: Haskell2010
GHC-Options: -Wall
ghc-options:
-Wall
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-Wmissing-home-modules
-Widentities
-Wredundant-constraints
-Wcpp-undef
-Wmissing-export-li
-fwarn-tabs
-fwarn-unused-imports
-fwarn-missing-signatures
-fwarn-name-shadowing
-fwarn-incomplete-patternssts
-fprint-potential-instances
argotk/argotk.hs
View file @
f440c7a5
#!
/
usr
/
bin
/
env
runhaskell
{-# LANGUAGE OverloadedStrings, RecordWildCards, LambdaCase #-}
import
Argo.Stack
...
...
@@ -17,8 +16,8 @@ opts :: StackArgs -> Parser (Shell ())
opts
sa
=
hsubparser
(
command
"clean"
(
info
(
pure
$
clean
sa
)
(
progDesc
"Clean sockets, logfiles."
))
<>
(
mconcat
$
fmap
commandTest
[(
minBound
::
TestType
)
..
])
<>
commandTests
[
TestHello
,
TestListen
,
TestPerfwrapper
]
<>
mconcat
(
fmap
commandTest
[(
minBound
::
TestType
)
..
])
<>
commandTests
[
TestHello
,
TestListen
,
TestPerfwrapper
,
TestSTREAM
]
"tests"
"Run hardware-independent CI tests"
<>
help
...
...
@@ -42,7 +41,11 @@ data TestType =
|
TestHello
|
TestListen
|
TestPerfwrapper
|
TestPower
deriving
(
Enum
,
Bounded
,
Show
)
|
TestPower
|
TestAMG
|
TestSTREAM
|
RunAMG
|
RunSTREAM
deriving
(
Enum
,
Bounded
,
Show
)
data
TestSpec
=
TestSpec
{
stackArgsUpdate
::
StackArgs
->
StackArgs
...
...
@@ -61,7 +64,7 @@ doSpec :: TestSpec -> StackArgs -> Shell ()
doSpec
spec
stackArgs
=
do
printTest
$
T
.
pack
$
description
spec
fullStack
(
isTest
spec
)
stackArgs
printSuccess
"Test Successful."
printSuccess
"Test Successful.
\n
"
configureTest
::
TestType
->
TestSpec
configureTest
=
\
case
...
...
@@ -71,26 +74,29 @@ configureTest = \case
,
isTest
=
IsTest
False
}
DaemonAndApp
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlistenprogress
=
JustRun
(
StdOutLog
"progress.csv"
)
(
StdErrLog
"progress.log"
)
,
cmdlistenpower
=
JustRun
(
StdOutLog
"power.csv"
)
(
StdErrLog
"power.log"
)
}
{
stackArgsUpdate
=
\
sa
->
sa
{
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
}
,
description
=
"Set up and start daemon, run a command in a container."
,
isTest
=
IsTest
False
}
CsvLogs
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
}
{
stackArgsUpdate
=
\
sa
->
sa
{
manifestName
=
"perfwrap.json"
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlistenperformance
=
JustRun
(
StdOutLog
"performance.csv"
)
(
StdErrLog
"performance.log"
)
,
cmdlistenpower
=
JustRun
(
StdOutLog
"power.csv"
)
(
StdErrLog
"power.log"
)
,
cmdlistenprogress
=
JustRun
(
StdOutLog
"progress.csv"
)
(
StdErrLog
"progress.log"
)
}
,
description
=
"Set up and start daemon, run a command in a container."
,
isTest
=
IsTest
False
}
TestHello
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
app
=
AppName
"echo"
,
args
=
AppArgs
[
msg
]
,
args
=
[
AppArg
msg
]
,
daemon
=
daemonBehavior
,
cmdrun
=
SucceedTestOnMessage
(
TestText
msg
)
(
StdOutLog
"monitored-cmdrun-out.log"
)
...
...
@@ -103,7 +109,7 @@ configureTest = \case
TestListen
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
app
=
AppName
"sleep"
,
args
=
AppArgs
[
"15"
]
,
args
=
[
AppArg
"15"
]
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlisten
=
listentestBehavior
(
TestText
","
)
...
...
@@ -116,10 +122,10 @@ configureTest = \case
{
stackArgsUpdate
=
\
sa
->
sa
{
manifestName
=
"perfwrap.json"
,
app
=
AppName
"sleep"
,
args
=
AppArgs
[
"15"
]
,
args
=
[
AppArg
"15"
]
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlisten
=
listentestBehavior
(
TestText
"performance
"
)
,
cmdlisten
performance
=
listenprogresstestBehavior
(
TestText
",
"
)
}
,
description
=
"3: Setup stack and check that argo-perf-wrapper sends
\
\
at least one *performance* message to cmd listen through the
\
...
...
@@ -129,7 +135,7 @@ configureTest = \case
TestPower
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
app
=
AppName
"sleep"
,
args
=
AppArgs
[
"15"
]
,
args
=
[
AppArg
"15"
]
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlisten
=
listentestBehavior
(
TestText
"power"
)
...
...
@@ -139,7 +145,78 @@ configureTest = \case
\
daemon."
,
isTest
=
IsTest
True
}
TestAMG
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
manifestName
=
"parallel.json"
,
app
=
AppName
"mpiexec"
,
args
=
[
AppArg
"-n"
,
AppArg
"24"
,
AppArg
"amg"
,
AppArg
"-problem"
,
AppArg
"2"
,
AppArg
"-n"
,
AppArg
"1"
,
AppArg
"1"
,
AppArg
"1"
,
AppArg
"-P"
,
AppArg
"8"
,
AppArg
"3"
,
AppArg
"1"
]
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlistenprogress
=
listenprogresstestBehavior
(
TestText
","
)
}
,
description
=
"5: Setup stack, run AMG and check that it sends
\
\
at least one progress message to the daemon."
,
isTest
=
IsTest
True
}
TestSTREAM
->
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
app
=
AppName
"stream_c_20"
,
args
=
[]
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlistenprogress
=
listenprogresstestBehavior
(
TestText
","
)
}
,
description
=
"6: Setup stack, run STREAM and check that it sends
\
\
at least one progress message to the daemon."
,
isTest
=
IsTest
True
}
RunAMG
->
runAppSpec
(
AppName
"mpiexec"
)
[
AppArg
"-n"
,
AppArg
"24"
,
AppArg
"amg"
,
AppArg
"-problem"
,
AppArg
"2"
,
AppArg
"-n"
,
AppArg
"10"
,
AppArg
"10"
,
AppArg
"10"
,
AppArg
"-P"
,
AppArg
"8"
,
AppArg
"3"
,
AppArg
"1"
]
RunSTREAM
->
runAppSpec
(
AppName
"stream_c_20000"
)
[]
where
runAppSpec
appName
appArgs
=
TestSpec
{
stackArgsUpdate
=
\
sa
->
sa
{
app
=
appName
,
args
=
appArgs
,
manifestName
=
"parallel.json"
,
daemon
=
daemonBehavior
,
cmdrun
=
runBehavior
,
cmdlistenperformance
=
JustRun
(
StdOutLog
"performance.csv"
)
(
StdErrLog
"performance.log"
)
,
cmdlistenpower
=
JustRun
(
StdOutLog
"power.csv"
)
(
StdErrLog
"power.log"
)
,
cmdlistenprogress
=
JustRun
(
StdOutLog
"progress.csv"
)
(
StdErrLog
"progress.log"
)
}
,
description
=
"Set up and start daemon, run app in a container."
,
isTest
=
IsTest
False
}
msg
=
"someComplicatedMessage"
daemonBehavior
=
JustRun
(
StdOutLog
"daemon_out.log"
)
(
StdErrLog
"daemon_err.log"
)
...
...
@@ -149,22 +226,25 @@ configureTest = \case
t
(
StdOutLog
"cmd_listen_out.log"
)
(
StdErrLog
"cmd_listen_err.log"
)
listenprogresstestBehavior
t
=
SucceedTestOnMessage
t
(
StdOutLog
"cmd_listen_progress_out.log"
)
(
StdErrLog
"cmd_listen_progress_err.log"
)
newtype
IsTest
=
IsTest
Bool
fullStack
::
IsTest
->
StackArgs
->
Shell
()
fullStack
(
IsTest
b
)
a
@
StackArgs
{
..
}
=
runStack
a
>>=
\
case
FoundMessage
->
printSuccess
"Found message!
\n
"
FoundMessage
->
printSuccess
"Found message!"
Died
stacki
errorcode
->
if
b
then
printError
(
repr
stacki
<>
" died before a message could be found:"
<>
repr
errorcode
<>
"
\n
"
)
>>
exit
(
ExitFailure
1
)
else
exit
(
ExitSuccess
)
else
exit
ExitSuccess
clean
::
StackArgs
->
Shell
()
clean
StackArgs
{
..
}
=
cleanLeftovers
workingDirectory
...
...
default.nix
View file @
f440c7a5
...
...
@@ -8,9 +8,13 @@
inherit
(
pinnedVersion
)
url
rev
sha256
;
},
pkgs
?
import
argopkgs-src
{},
nrm-src
?
pkgs
.
nodelevel
.
nrm
.
src
,
nrm-src
?
pkgs
.
nodelevel
.
nrm
.
src
,
containers-src
?
pkgs
.
nodelevel
.
containers
.
src
,
libnrm-src
?
pkgs
.
nodelevel
.
libnrm
.
src
libnrm-src
?
pkgs
.
nodelevel
.
libnrm
.
src
,
amg-src
?
pkgs
.
applications
.
nrm
.
amg
.
src
,
lammps-src
?
pkgs
.
applications
.
nrm
.
lammps
.
src
,
qmcpack-src
?
pkgs
.
applications
.
nrm
.
qmcpack
.
src
,
stream-src
?
pkgs
.
applications
.
nrm
.
stream
.
src
,
}:
let
filterHdevTools
=
builtins
.
filterSource
(
path
:
type
:
baseNameOf
path
!=
".hdevtools.sock"
);
...
...
@@ -44,11 +48,14 @@ let
in
rec
{
nrm
=
pkgs
.
nodelevel
.
nrm
.
overrideAttrs
(
old
:
{
src
=
nrm-src
;
});
libnrm
=
pkgs
.
nodelevel
.
libnrm
.
overrideAttrs
(
old
:
{
src
=
libnrm-src
;
});
containers
=
pkgs
.
nodelevel
.
containers
.
overrideAttrs
(
old
:
{
src
=
containers-src
;
});
amg
=
pkgs
.
applications
.
nrm
.
amg
;
nrm
=
pkgs
.
nodelevel
.
nrm
.
overrideAttrs
(
old
:
{
src
=
nrm-src
;}
);
libnrm
=
pkgs
.
nodelevel
.
libnrm
.
overrideAttrs
(
old
:
{
src
=
libnrm-src
;}
);
containers
=
pkgs
.
nodelevel
.
containers
.
overrideAttrs
(
old
:
{
src
=
containers-src
;}
);
amg
=
(
pkgs
.
applications
.
nrm
.
amg
.
overrideAttrs
(
old
:
{
src
=
amg-src
;}
))
.
override
{
libnrm
=
libnrm
;};
qmcpack
=
(
pkgs
.
applications
.
nrm
.
qmcpack
.
overrideAttrs
(
old
:
{
src
=
qmcpack-src
;}
))
.
override
{
libnrm
=
libnrm
;};
stream-test
=
(
pkgs
.
applications
.
nrm
.
stream
.
overrideAttrs
(
old
:
{
src
=
stream-src
;}
))
.
override
{
libnrm
=
libnrm
;
iterationCount
=
"20"
;};
stream
=
(
pkgs
.
applications
.
nrm
.
stream
.
overrideAttrs
(
old
:
{
src
=
stream-src
;}
))
.
override
{
libnrm
=
libnrm
;
iterationCount
=
"20000"
;};
lammps
=
(
pkgs
.
applications
.
nrm
.
lammps
.
overrideAttrs
(
old
:
{
src
=
lammps-src
;}
))
.
override
{
libnrm
=
libnrm
;};
inherit
(
hpkgs
)
argo
argotk
;
...
...
@@ -95,7 +102,10 @@ in rec
pkgs
.
coreutils
pkgs
.
utillinux
containers
amg
amg
stream
stream-test
#qmcpack
#lammps
pkgs
.
mpich2
nrm
];
inherit
shellHook
;
...
...
@@ -107,8 +117,10 @@ in rec
env
=
pkgs
.
buildEnv
{
name
=
name
;
paths
=
buildInputs
;
};
buildInputs
=
[
containers
amg
nrm
amg
stream
stream-test
#qmcpack
#lammps
(
hpkgs
.
ghcWithPackages
(
p
:
devHPackages
++
[
argotk
argo
...
...
@@ -137,7 +149,4 @@ in rec
in
pkgs
.
writeText
"test-list"
(
''
Available test provenance configurations:
''
+
(
builtins
.
concatStringsSep
"
\n
"
(
pkgs
.
lib
.
mapAttrsToList
showTest
tests
)));
#testsRepresentations = pkgs.lib.mapAttrsToList (name: value: name ) tests;
#output = builtins.concatStringsSep "\n" testsRepresentations;
}
gitlab/basic.yml
View file @
f440c7a5
...
...
@@ -75,6 +75,20 @@ nrm.build:
-
XDG_CACHE_HOME=$CACHE nix-shell .nix -A test --run "argotk.hs TestSTREAM --verbose"
-
rm -rf $CACHE
.TestAMG.test
:
extends
:
.nix-integration
script
:
-
CACHE=$(mktemp -d --suffix=nixcache /tmp/deletable-nix-cache-XXXX)
-
XDG_CACHE_HOME=$CACHE nix-shell .nix -A test --run "argotk.hs TestAMG"
-
rm -rf $CACHE
.TestSTREAM.test
:
extends
:
.nix-integration
script
:
-
CACHE=$(mktemp -d --suffix=nixcache /tmp/deletable-nix-cache-XXXX)
-
XDG_CACHE_HOME=$CACHE nix-shell .nix -A test --run "argotk.hs TestSTREAM"
-
rm -rf $CACHE
KNL-Power.test
:
extends
:
.TestPower.test
tags
:
...
...
manifests/parallel.json
0 → 100644
View file @
f440c7a5
{
"acKind"
:
"ImageManifest"
,
"acVersion"
:
"0.6.0"
,
"name"
:
"test"
,
"app"
:
{
"isolators"
:
[
{
"name"
:
"argo/scheduler"
,
"value"
:
{
"policy"
:
"SCHED_OTHER"
,
"priority"
:
"0"
}
},
{
"name"
:
"argo/container"
,
"value"
:
{
"cpus"
:
"24"
,
"mems"
:
"1"
}
},
{
"name"
:
"argo/perfwrapper"
,
"value"
:
{
"enabled"
:
"1"
}
},
{
"name"
:
"argo/power"
,
"value"
:
{
"enabled"
:
"0"
,
"profile"
:
"0"
,
"policy"
:
"NONE"
,
"damper"
:
"0.1"
,
"slowdown"
:
"1.1"
}
}
]
}
}
package.nix
0 → 100644
View file @
f440c7a5
let
ghcOpts
=
[
"-Wall"
"-Wincomplete-uni-patterns"
"-Wincomplete-record-updates"
"-Wmissing-home-modules"
"-Widentities"
"-Wredundant-constraints"
"-Wcpp-undef"
#"-fwarn-missing-export-li"
"-fwarn-tabs"
"-fwarn-unused-imports"
"-fwarn-missing-signatures"
"-fwarn-name-shadowing"
"-fwarn-incomplete-patterns"
"-fprint-potential-instances"
];
argo
=
{
src
=
./argo/src
;
dependencies
=
[
"base"
"turtle"