Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
H
helm3
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
helm3
Commits
9d3a1ed2
Commit
9d3a1ed2
authored
Aug 09, 2016
by
fibonacci1729
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
basic cfgmaps driver tests
parent
d5aca166
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
142 additions
and
70 deletions
+142
-70
cfgmaps_test.go
pkg/storage/driver/cfgmaps_test.go
+142
-70
No files found.
pkg/storage/driver/cfgmaps_test.go
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"
r
ls
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
r
el
:=
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
(
"
failed to get release with key %q. %s"
,
key
,
err
)
t
.
Fatalf
(
"
Failed to get release: %s"
,
err
)
}
// compare fetched release with original
if
!
reflect
.
DeepEqual
(
r
ls
,
got
)
{
t
.
Errorf
(
"
expected {%q}, got {%q}"
,
rls
,
got
)
if
!
reflect
.
DeepEqual
(
r
el
,
got
)
{
t
.
Errorf
(
"
Expected {%q}, got {%q}"
,
rel
,
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
:=
newTestFixture
(
t
,
rls
)
key
:=
"key-1"
rel
:=
newTestRelease
(
key
,
1
,
rspb
.
Status_DEPLOYED
)
// store the release in a configmap
if
err
:=
cfgmaps
.
Create
(
r
ls
);
err
!=
nil
{
t
.
Fatalf
(
"
f
ailed to create release with key %q: %s"
,
key
,
err
)
if
err
:=
cfgmaps
.
Create
(
r
el
);
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
(
r
ls
,
got
)
{
t
.
Errorf
(
"
expected {%q}, got {%q}"
,
rls
,
got
)
if
!
reflect
.
DeepEqual
(
r
el
,
got
)
{
t
.
Errorf
(
"
Expected {%q}, got {%q}"
,
rel
,
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
(
"
failed to delete
release with key %q: %s"
,
key
,
err
)
t
.
Fatalf
(
"
Failed to get
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
(
"
failed to create object
: %s"
,
err
)
t
.
Fatalf
(
"
Failed 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
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment