grim/convey
Clone
Summary
Browse
Changes
Graph
closing merged branch
hostnames
2017-10-13, Gary Kramlich
33eae19fcbbe
closing merged branch
/*
* Convey
* Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package
convey
import
(
"fmt"
"bitbucket.org/rw_grim/convey/docker"
"github.com/aphistic/sweet"
.
"github.com/onsi/gomega"
cConfig
"bitbucket.org/rw_grim/convey/config"
)
// This test suite tests
type
extendsSuite
struct
{}
func
(
d
*
extendsSuite
)
TestNoClash
(
t
sweet
.
T
)
{
baseData
:=
`
environment:
- x=1
- y=2
- z=3
tasks:
foo:
image: imaginary1
bar:
image: imaginary2
baz:
image: imaginary3
plans:
plan1:
stages:
- tasks: [foo, bar, baz]
`
extendedData
:=
`
extends: base.yaml
environment:
- w=4
tasks:
bonk:
image: imaginary4
plans:
plan2:
stages:
- tasks: [foo, bonk]
`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
cfg
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
BeNil
())
Expect
(
cfg
.
Environment
).
To
(
ConsistOf
([]
string
{
"x=1"
,
"y=2"
,
"z=3"
,
"w=4"
}))
Expect
(
cfg
.
Tasks
).
To
(
HaveLen
(
4
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"foo"
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"bar"
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"baz"
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"bonk"
))
Expect
(
cfg
.
Plans
).
To
(
HaveLen
(
2
))
Expect
(
cfg
.
Plans
).
To
(
HaveKey
(
"plan1"
))
Expect
(
cfg
.
Plans
).
To
(
HaveKey
(
"plan2"
))
}
func
(
d
*
extendsSuite
)
TestExtendsAndOverwrite
(
t
sweet
.
T
)
{
baseData
:=
`
environment:
- x=1
- y=2
- z=3
tasks:
foo:
image: imaginary1
bar:
image: imaginary2
baz:
image: imaginary3
plans:
plan1:
stages:
- tasks: [foo, bar, baz]
`
extendedData
:=
`
extends: base.yaml
environment:
- z=4
tasks:
baz:
image: imaginary4
plans:
plan1:
stages:
- tasks: [foo, baz]
`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
cfg
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
BeNil
())
Expect
(
cfg
.
Environment
).
To
(
ConsistOf
([]
string
{
"x=1"
,
"y=2"
,
"z=4"
}))
Expect
(
cfg
.
Tasks
).
To
(
HaveLen
(
3
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"foo"
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"bar"
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"baz"
))
Expect
(
cfg
.
Plans
).
To
(
HaveLen
(
1
))
Expect
(
cfg
.
Plans
).
To
(
HaveKey
(
"plan1"
))
Expect
(
cfg
.
Tasks
[
"baz"
].(
*
docker
.
Run
).
Image
).
To
(
Equal
(
"imaginary4"
))
Expect
(
cfg
.
Plans
[
"plan1"
].
Stages
[
0
].
Tasks
).
To
(
BeEquivalentTo
([]
string
{
"foo"
,
"baz"
}))
}
func
(
d
*
extendsSuite
)
TestExtendDefault
(
t
sweet
.
T
)
{
baseData
:=
`
options:
default-plan: plan1
tasks:
foo:
image: imaginary1
plans:
plan1:
stages:
- tasks: [foo]
`
extendedData
:=
`
extends: base.yaml
options:
default-plan: plan2
tasks:
bar:
image: imaginary1
plans:
plan2:
stages:
- tasks: [bar]
`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
_
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
BeNil
())
Expect
(
loader
.
defaultPlan
).
To
(
Equal
(
"plan2"
))
}
func
(
d
*
extendsSuite
)
TestExtendTasksOnly
(
t
sweet
.
T
)
{
baseData
:=
`
options:
default-plan: plan1
tasks:
foo:
image: imaginary1
`
extendedData
:=
`
extends: base.yaml
plans:
plan:
stages:
- tasks: [foo]
`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
cfg
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
BeNil
())
Expect
(
cfg
.
Tasks
).
To
(
HaveLen
(
1
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"foo"
))
Expect
(
cfg
.
Plans
).
To
(
HaveLen
(
1
))
Expect
(
cfg
.
Plans
).
To
(
HaveKey
(
"plan"
))
}
func
(
d
*
extendsSuite
)
TestExtendNoTasks
(
t
sweet
.
T
)
{
baseData
:=
``
extendedData
:=
`extends: base.yml`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
_
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
Equal
(
ErrNoTasks
))
}
func
(
d
*
extendsSuite
)
TestExtendNoPlans
(
t
sweet
.
T
)
{
baseData
:=
`
options:
default-plan: plan1
tasks:
foo:
image: imaginary1
`
extendedData
:=
`extends: base.yaml`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
baseData
))
},
}
cfg
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
extendedData
))
Expect
(
err
).
To
(
Equal
(
ErrNoPlans
))
Expect
(
cfg
.
Tasks
).
To
(
HaveLen
(
1
))
Expect
(
cfg
.
Tasks
).
To
(
HaveKey
(
"foo"
))
}
func
(
d
*
extendsSuite
)
TestLoop
(
t
sweet
.
T
)
{
sameData
:=
`
extends: convey.yaml
`
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
return
c
.
Load
(
"."
,
name
,
[]
byte
(
sameData
))
},
}
_
,
err
:=
loader
.
Load
(
"."
,
"."
,
[]
byte
(
sameData
))
Expect
(
err
).
To
(
Equal
(
ErrMaxExtendsDepth
))
}
func
(
d
*
extendsSuite
)
TestFilename
(
t
sweet
.
T
)
{
data
:=
`
extends: ../base.yaml
`
calledWith
:=
""
loader
:=
&
Loader
{
fileLoader
:
func
(
name
string
,
c
*
Loader
)
(
*
cConfig
.
Config
,
error
)
{
calledWith
=
name
return
nil
,
fmt
.
Errorf
(
"early out"
)
},
}
loader
.
Load
(
"."
,
"."
,
[]
byte
(
data
))
Expect
(
calledWith
).
To
(
Equal
(
"../base.yaml"
))
}