Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
1105 Внедрение механизмов обеспечения безопасности цепочки поставки программных проектов
Legacy
scanned-projects
helm
Commits
9d3a1ed2
Commit
9d3a1ed2
authored
8 years ago
by
fibonacci1729
Browse files
Options
Download
Patches
Plain Diff
basic cfgmaps driver tests
parent
d5aca166
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
pkg/storage/driver/cfgmaps_test.go
+142
-70
pkg/storage/driver/cfgmaps_test.go
with
142 additions
and
70 deletions
+142
-70
pkg/storage/driver/cfgmaps_test.go
+
142
−
70
View file @
9d3a1ed2
...
...
@@ -21,127 +21,199 @@ import (
"testing"
rspb
"k8s.io/helm/pkg/proto/hapi/release"
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/api"
kberrs
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/client/unversioned"
)
func
TestConfigMapGet
(
t
*
testing
.
T
)
{
// test release
key
:=
"key-1"
rl
s
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
r
e
l
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
// create test fixture
cfgmaps
:=
newTestFixture
(
t
,
rls
)
cfgmaps
:=
newTestFixture
(
t
,
[]
*
rspb
.
Release
{
rel
}
...
)
// get
the
release
from configmaps
// get release
with key
got
,
err
:=
cfgmaps
.
Get
(
key
)
if
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to get release
with key %q. %s"
,
key
,
err
)
t
.
Fatalf
(
"
F
ailed to get release
: %s"
,
err
)
}
// compare fetched release with original
if
!
reflect
.
DeepEqual
(
rl
s
,
got
)
{
t
.
Errorf
(
"
e
xpected {%q}, got {%q}"
,
rl
s
,
got
)
if
!
reflect
.
DeepEqual
(
r
e
l
,
got
)
{
t
.
Errorf
(
"
E
xpected {%q}, got {%q}"
,
r
e
l
,
got
)
}
}
func
TestConfigMapList
(
t
*
testing
.
T
)
{
t
.
Skip
(
"ConfigMapList"
)
cfgmaps
:=
newTestFixture
(
t
,
[]
*
rspb
.
Release
{
newTestRelease
(
"key-1"
,
1
,
rspb
.
Status_DELETED
),
newTestRelease
(
"key-2"
,
1
,
rspb
.
Status_DELETED
),
newTestRelease
(
"key-3"
,
1
,
rspb
.
Status_DEPLOYED
),
newTestRelease
(
"key-4"
,
1
,
rspb
.
Status_DEPLOYED
),
newTestRelease
(
"key-5"
,
1
,
rspb
.
Status_SUPERSEDED
),
newTestRelease
(
"key-6"
,
1
,
rspb
.
Status_SUPERSEDED
),
}
...
)
// list all deleted releases
del
,
err
:=
cfgmaps
.
List
(
func
(
rel
*
rspb
.
Release
)
bool
{
return
rel
.
Info
.
Status
.
Code
==
rspb
.
Status_DELETED
})
// check
if
err
!=
nil
{
t
.
Errorf
(
"Failed to list deleted: %s"
,
err
)
}
if
len
(
del
)
!=
2
{
t
.
Errorf
(
"Expected 2 deleted, got %d:
\n
%v
\n
"
,
len
(
del
),
del
)
}
// list all deployed releases
dpl
,
err
:=
cfgmaps
.
List
(
func
(
rel
*
rspb
.
Release
)
bool
{
return
rel
.
Info
.
Status
.
Code
==
rspb
.
Status_DEPLOYED
})
// check
if
err
!=
nil
{
t
.
Errorf
(
"Failed to list deployed: %s"
,
err
)
}
if
len
(
dpl
)
!=
2
{
t
.
Errorf
(
"Expected 2 deployed, got %d"
,
len
(
dpl
))
}
// list all superseded releases
ssd
,
err
:=
cfgmaps
.
List
(
func
(
rel
*
rspb
.
Release
)
bool
{
return
rel
.
Info
.
Status
.
Code
==
rspb
.
Status_SUPERSEDED
})
// check
if
err
!=
nil
{
t
.
Errorf
(
"Failed to list superseded: %s"
,
err
)
}
if
len
(
ssd
)
!=
2
{
t
.
Errorf
(
"Expected 2 superseded, got %d"
,
len
(
ssd
))
}
}
func
TestConfigMapCreate
(
t
*
testing
.
T
)
{
// setup
key
:=
"key-1"
rls
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
cfgmaps
:=
newTestFixture
(
t
)
// create test fixture
cfgmaps
:=
newTest
Fixture
(
t
,
rls
)
key
:=
"key-1"
rel
:=
newTest
Release
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
// store the release in a configmap
if
err
:=
cfgmaps
.
Create
(
rl
s
);
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to create release with key %q: %s"
,
key
,
err
)
if
err
:=
cfgmaps
.
Create
(
r
e
l
);
err
!=
nil
{
t
.
Fatalf
(
"
F
ailed to create release with key %q: %s"
,
key
,
err
)
}
// get the release back
got
,
err
:=
cfgmaps
.
Get
(
key
)
if
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to get release with key %q: %s"
,
key
,
err
)
t
.
Fatalf
(
"
F
ailed to get release with key %q: %s"
,
key
,
err
)
}
// compare created release with original
if
!
reflect
.
DeepEqual
(
rl
s
,
got
)
{
t
.
Errorf
(
"
e
xpected {%q}, got {%q}"
,
rl
s
,
got
)
if
!
reflect
.
DeepEqual
(
r
e
l
,
got
)
{
t
.
Errorf
(
"
E
xpected {%q}, got {%q}"
,
r
e
l
,
got
)
}
}
func
TestConfigMapDelete
(
t
*
testing
.
T
)
{
// setup
func
TestConfigMapUpdate
(
t
*
testing
.
T
)
{
key
:=
"key-1"
rls
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DELETED
)
rel
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
cfgmaps
:=
newTestFixture
(
t
,
[]
*
rspb
.
Release
{
rel
}
...
)
//
create test fixture
cfgmaps
:=
newTestFixture
(
t
,
rls
)
//
modify release status code & version
rel
=
newTestRelease
(
key
,
2
,
rspb
.
Status_SUPERSEDED
)
// delete the release
got
,
err
:=
cfgmaps
.
Delete
(
key
)
// perform the update
if
err
:=
cfgmaps
.
Update
(
rel
);
err
!=
nil
{
t
.
Fatalf
(
"Failed to update release: %s"
,
err
)
}
// fetch the updated release
got
,
err
:=
cfgmaps
.
Get
(
key
)
if
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to
del
et
e
release with key %q: %s"
,
key
,
err
)
t
.
Fatalf
(
"
F
ailed to
g
et release with key %q: %s"
,
key
,
err
)
}
// compare deleted release with original
if
!
reflect
.
DeepEqual
(
rls
,
got
)
{
t
.
Errorf
(
"expected {%q}, got {%q}"
,
rls
,
got
)
// check release has actually been updated by comparing modified fields
switch
{
case
rel
.
Info
.
Status
.
Code
!=
got
.
Info
.
Status
.
Code
:
t
.
Errorf
(
"Expected status %s, got status %s"
,
rel
.
Info
.
Status
.
Code
,
got
.
Info
.
Status
.
Code
)
case
rel
.
Version
!=
got
.
Version
:
t
.
Errorf
(
"Expected version %d, got version %d"
,
rel
.
Version
,
got
.
Version
)
}
}
func
TestConfigMapUpdate
(
t
*
testing
.
T
)
{
// setup
key
:=
"key-1"
rls
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_SUPERSEDED
)
// newTestFixture initializes a MockConfigMapsInterface.
// ConfigMaps are created for each release provided.
func
newTestFixture
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
*
ConfigMaps
{
var
mock
MockConfigMapsInterface
mock
.
Init
(
t
,
releases
...
)
// create test fixture
cfgmaps
:=
newTestFixture
(
t
,
rls
)
return
NewConfigMaps
(
&
mock
)
}
// update release version
rls
.
Version
=
2
// newTestRelease creates a release object for testing.
func
newTestRelease
(
key
string
,
version
int32
,
status
rspb
.
Status_Code
)
*
rspb
.
Release
{
return
&
rspb
.
Release
{
Name
:
key
,
Info
:
&
rspb
.
Info
{
Status
:
&
rspb
.
Status
{
Code
:
status
}},
Version
:
version
}
}
// update the release
if
err
:=
cfgmaps
.
Update
(
rls
);
err
!=
nil
{
t
.
Fatalf
(
"failed to update release with key %q: %s"
,
key
,
err
)
}
// MockConfigMapsInterface mocks a kubernetes ConfigMapsInterface
type
MockConfigMapsInterface
struct
{
unversioned
.
ConfigMapsInterface
// fetch the updated release
got
,
err
:=
cfgmaps
.
Get
(
key
)
if
err
!=
nil
{
t
.
Fatalf
(
"failed to get release with key %q: %s"
,
key
,
err
)
}
_
=
got
//TODO: validate the version was update correctly
//if rls.Version != got.Version {
// t.Fatalf("expected version %d, got version %d", rls.Version, got.Version)
//}
objects
map
[
string
]
*
api
.
ConfigMap
}
// newTestFixture prepopulates a mock implementation of a kubernetes
// ConfigMapsInterface returning an initialized driver.ConfigMaps.
func
newTestFixture
(
t
*
testing
.
T
,
list
...*
rspb
.
Release
)
*
ConfigMaps
{
var
objs
[]
runtime
.
Object
func
(
mock
*
MockConfigMapsInterface
)
Init
(
t
*
testing
.
T
,
releases
...*
rspb
.
Release
)
{
mock
.
objects
=
map
[
string
]
*
api
.
ConfigMap
{}
for
i
:=
range
list
{
obj
,
err
:=
newConfigMapsObject
(
list
[
i
]
,
nil
)
for
_
,
rls
:=
range
releases
{
cfgmap
,
err
:=
newConfigMapsObject
(
rls
,
nil
)
if
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to create
object
: %s"
,
err
)
t
.
Fatalf
(
"
F
ailed to create
configmap
: %s"
,
err
)
}
objs
=
append
(
objs
,
obj
)
mock
.
objects
[
rls
.
Name
]
=
cfgmap
}
}
return
NewConfigMaps
(
&
testclient
.
FakeConfigMaps
{
Fake
:
testclient
.
NewSimpleFake
(
objs
...
),
})
func
(
mock
*
MockConfigMapsInterface
)
Get
(
name
string
)
(
*
api
.
ConfigMap
,
error
)
{
object
,
ok
:=
mock
.
objects
[
name
]
if
!
ok
{
return
nil
,
kberrs
.
NewNotFound
(
api
.
Resource
(
"tests"
),
name
)
}
return
object
,
nil
}
// newTestRelease creates a release object for testing
func
newTestRelease
(
key
string
,
version
int32
,
status
rspb
.
Status_Code
)
*
rspb
.
Release
{
return
&
rspb
.
Release
{
Name
:
key
,
Info
:
&
rspb
.
Info
{
Status
:
&
rspb
.
Status
{
Code
:
status
}},
Version
:
version
}
func
(
mock
*
MockConfigMapsInterface
)
List
(
opts
api
.
ListOptions
)
(
*
api
.
ConfigMapList
,
error
)
{
var
list
api
.
ConfigMapList
for
_
,
cfgmap
:=
range
mock
.
objects
{
list
.
Items
=
append
(
list
.
Items
,
*
cfgmap
)
}
return
&
list
,
nil
}
func
(
mock
*
MockConfigMapsInterface
)
Create
(
cfgmap
*
api
.
ConfigMap
)
(
*
api
.
ConfigMap
,
error
)
{
name
:=
cfgmap
.
ObjectMeta
.
Name
if
object
,
ok
:=
mock
.
objects
[
name
];
ok
{
return
object
,
kberrs
.
NewAlreadyExists
(
api
.
Resource
(
"tests"
),
name
)
}
mock
.
objects
[
name
]
=
cfgmap
return
cfgmap
,
nil
}
func
(
mock
*
MockConfigMapsInterface
)
Update
(
cfgmap
*
api
.
ConfigMap
)
(
*
api
.
ConfigMap
,
error
)
{
name
:=
cfgmap
.
ObjectMeta
.
Name
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
nil
,
kberrs
.
NewNotFound
(
api
.
Resource
(
"tests"
),
name
)
}
mock
.
objects
[
name
]
=
cfgmap
return
cfgmap
,
nil
}
func
(
mock
*
MockConfigMapsInterface
)
Delete
(
name
string
)
error
{
if
_
,
ok
:=
mock
.
objects
[
name
];
!
ok
{
return
kberrs
.
NewNotFound
(
api
.
Resource
(
"tests"
),
name
)
}
delete
(
mock
.
objects
,
name
)
return
nil
}
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets