-
Notifications
You must be signed in to change notification settings - Fork 179
/
Copy pathSourceParserSpec.hs
151 lines (132 loc) · 5.35 KB
/
SourceParserSpec.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
module Container.Docker.SourceParserSpec (spec) where
import Container.Docker.SourceParser (
RegistryHostScheme (RegistryHTTP),
RegistryImageSource (..),
RepoDigest (RepoDigest),
RepoReference (RepoReferenceDigest, RepoReferenceTag),
RepoTag (RepoTag),
defaultHttpScheme,
defaultRegistry,
defaultTag,
parseImageUrl,
)
import Data.Text (Text)
import Data.Void (Void)
import Test.Hspec (Expectation, Spec, describe, it)
import Test.Hspec.Megaparsec (shouldParse)
import Text.Megaparsec (
Parsec,
parse,
)
parseMatch :: (Show a, Eq a) => Parsec Void Text a -> Text -> a -> Expectation
parseMatch parser input expected = parse parser mempty input `shouldParse` expected
mkDigestRef :: Text -> RepoReference
mkDigestRef = RepoReferenceDigest . RepoDigest
mkTagRef :: Text -> RepoReference
mkTagRef = RepoReferenceTag . RepoTag
spec :: Spec
spec = do
describe "docker pull text parser" $ do
let shouldParseInto = parseMatch (parseImageUrl fixtureArch)
it "should parse repo and repo tag" $ do
"fossa/nginx"
`shouldParseInto` defaultedRegistrySrc "fossa/nginx" defaultTag
"fossa/nginx:11"
`shouldParseInto` defaultedRegistrySrc "fossa/nginx" (mkTagRef "11")
it "should parse repo and repo tag digest" $ do
"httpd@sha256:abc"
`shouldParseInto` defaultedRegistrySrc "library/httpd" (mkDigestRef "sha256:abc")
it "should parse registry url, with repo and tag" $ do
"ghcr.io/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
Nothing
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
"111.dkr.ecr.us-east-1.amazonaws.com/jamm"
`shouldParseInto` ( RegistryImageSource
"111.dkr.ecr.us-east-1.amazonaws.com"
defaultHttpScheme
Nothing
"jamm"
defaultTag
fixtureArch
)
"ghcr.io/fossas/haskell-dev-tools"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
Nothing
"fossas/haskell-dev-tools"
defaultTag
fixtureArch
)
"ghcr.io/fossas/haskell-dev-tools@sha256:abc"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
Nothing
"fossas/haskell-dev-tools"
(mkDigestRef "sha256:abc")
fixtureArch
)
"https://ghcr.io/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
Nothing
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
"http://localhost:3000/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"localhost:3000"
RegistryHTTP
Nothing
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
it "should parse registry url and credentials" $ do
"user:[email protected]/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
(Just ("user", "pass"))
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
"https://user:[email protected]/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
(Just ("user", "pass"))
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
"https://user:[email protected]/fossas/haskell-dev-tools:9.0.2"
`shouldParseInto` ( RegistryImageSource
"ghcr.io"
defaultHttpScheme
(Just ("user", "pass-pass_pass"))
"fossas/haskell-dev-tools"
(mkTagRef "9.0.2")
fixtureArch
)
fixtureArch :: Text
fixtureArch = "amd64"
defaultedRegistrySrc :: Text -> RepoReference -> RegistryImageSource
defaultedRegistrySrc repo ref =
RegistryImageSource
defaultRegistry
defaultHttpScheme
Nothing
repo
ref
fixtureArch