hadolint-2.8.0: test/Hadolint/Rule/DL3059Spec.hs
module Hadolint.Rule.DL3059Spec (spec) where
import Data.Default
import Data.Text as Text
import Helpers
import Test.Hspec
spec :: SpecWith ()
spec = do
let ?config = def
describe "DL3059 - Multiple consecutive `RUN` instructions" $ do
it "ok with no `RUN` at all" $ do
ruleCatchesNot "DL3059" "FROM debian:10"
it "ok with one `RUN`" $ do
ruleCatchesNot "DL3059" "RUN /foo.sh"
it "ok with two not consecutive `RUN`" $ do
ruleCatchesNot "DL3059" "RUN /foo.sh\nWORKDIR /\nRUN /bar.sh"
it "not ok with two consecutive `RUN`s" $ do
ruleCatches "DL3059" "RUN /foo.sh\nRUN /bar.sh"
it "not ok with two `RUN`s separated by a comment" $ do
ruleCatches "DL3059" "RUN /foo.sh\n# a comment\nRUN /bar.sh"
it "not ok with two `RUN`s separated by two comment" $ do
ruleCatches "DL3059" "RUN /foo.sh\n# a comment\n# another comment\nRUN\
\ /bar.sh"
it "ok with one `RUN` after a comment" $ do
ruleCatchesNot "DL3059" "# a comment\nRUN /foo.sh"
it "ok with two consecutive `RUN`s when flags are different 1" $ do
ruleCatchesNot "DL3059" "RUN --mount=type=secret,id=foo /foo.sh\nRUN\
\ /bar.sh"
it "ok with two consecutive `RUN`s when flags are different 2" $ do
let dfile = [ "RUN --mount=type=secret,id=foo /foo.sh",
"RUN --mount=type=secret,id=bar /bar.sh"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "not ok with two consecutive `RUN`s when flags are equal" $ do
let dfile = [ "RUN --mount=type=secret,id=foo /foo.sh",
"RUN --mount=type=secret,id=foo /bar.sh"
]
in ruleCatches "DL3059" $ Text.unlines dfile
it "ok with two consecutive `RUN`s when commands are chained 1" $ do
let dfile = [ "RUN foo && bar",
"RUN foobar"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "ok with two consecutive `RUN`s when commands are chained 2" $ do
let dfile = [ "RUN foo; bar",
"RUN foobar"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "ok with two consecutive `RUN`s when commands are chained 3" $ do
let dfile = [ "RUN foobar",
"RUN foo && bar"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "ok with two consecutive `RUN`s when commands are chained 4" $ do
let dfile = [ "RUN foobar",
"RUN foo; bar"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "ok with two consecutive `RUN`s when commands are chained 5" $ do
let dfile = [ "RUN foo && bar",
"RUN foo; bar"
]
in ruleCatchesNot "DL3059" $ Text.unlines dfile
it "not ok when more than one `RUN` has just one command in a row" $ do
let dfile = [ "RUN foo && bar",
"RUN foo",
"RUN bar"
]
in ruleCatches "DL3059" $ Text.unlines dfile