Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
6b8eb902
Commit
6b8eb902
authored
Dec 10, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #17969 from dgonyeo/rkt_api_get_pods
Auto commit by PR queue bot
parents
6e29e84e
5a16b475
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
512 additions
and
59 deletions
+512
-59
fake_rkt_interface.go
pkg/kubelet/rkt/fake_rkt_interface.go
+22
-6
rkt.go
pkg/kubelet/rkt/rkt.go
+228
-53
rkt_test.go
pkg/kubelet/rkt/rkt_test.go
+262
-0
No files found.
pkg/kubelet/rkt/fake_rkt_interface.go
View file @
6b8eb902
...
...
@@ -30,10 +30,12 @@ import (
// fakeRktInterface mocks the rktapi.PublicAPIClient interface for testing purpose.
type
fakeRktInterface
struct
{
sync
.
Mutex
info
rktapi
.
Info
images
[]
*
rktapi
.
Image
called
[]
string
err
error
info
rktapi
.
Info
images
[]
*
rktapi
.
Image
podFilter
*
rktapi
.
PodFilter
pods
[]
*
rktapi
.
Pod
called
[]
string
err
error
}
func
newFakeRktInterface
()
*
fakeRktInterface
{
...
...
@@ -55,11 +57,25 @@ func (f *fakeRktInterface) GetInfo(ctx context.Context, in *rktapi.GetInfoReques
}
func
(
f
*
fakeRktInterface
)
ListPods
(
ctx
context
.
Context
,
in
*
rktapi
.
ListPodsRequest
,
opts
...
grpc
.
CallOption
)
(
*
rktapi
.
ListPodsResponse
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"Not implemented"
)
f
.
Lock
()
defer
f
.
Unlock
()
f
.
called
=
append
(
f
.
called
,
"ListPods"
)
f
.
podFilter
=
in
.
Filter
return
&
rktapi
.
ListPodsResponse
{
f
.
pods
},
f
.
err
}
func
(
f
*
fakeRktInterface
)
InspectPod
(
ctx
context
.
Context
,
in
*
rktapi
.
InspectPodRequest
,
opts
...
grpc
.
CallOption
)
(
*
rktapi
.
InspectPodResponse
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"Not implemented"
)
f
.
Lock
()
defer
f
.
Unlock
()
f
.
called
=
append
(
f
.
called
,
"InspectPod"
)
for
_
,
pod
:=
range
f
.
pods
{
if
pod
.
Id
==
in
.
Id
{
return
&
rktapi
.
InspectPodResponse
{
pod
},
f
.
err
}
}
return
&
rktapi
.
InspectPodResponse
{
nil
},
f
.
err
}
func
(
f
*
fakeRktInterface
)
ListImages
(
ctx
context
.
Context
,
in
*
rktapi
.
ListImagesRequest
,
opts
...
grpc
.
CallOption
)
(
*
rktapi
.
ListImagesResponse
,
error
)
{
...
...
pkg/kubelet/rkt/rkt.go
View file @
6b8eb902
This diff is collapsed.
Click to expand it.
pkg/kubelet/rkt/rkt_test.go
View file @
6b8eb902
...
...
@@ -17,11 +17,15 @@ limitations under the License.
package
rkt
import
(
"encoding/json"
"fmt"
"testing"
appcschema
"github.com/appc/spec/schema"
appctypes
"github.com/appc/spec/schema/types"
rktapi
"github.com/coreos/rkt/api/v1alpha"
"github.com/stretchr/testify/assert"
"k8s.io/kubernetes/pkg/types"
)
func
TestCheckVersion
(
t
*
testing
.
T
)
{
...
...
@@ -197,3 +201,261 @@ func TestListImages(t *testing.T) {
fr
.
CleanCalls
()
}
}
func
TestGetPods
(
t
*
testing
.
T
)
{
fr
:=
newFakeRktInterface
()
fs
:=
newFakeSystemd
()
r
:=
&
Runtime
{
apisvc
:
fr
,
systemd
:
fs
}
tests
:=
[]
struct
{
k8sUID
types
.
UID
k8sName
string
k8sNamespace
string
k8sCreation
int64
k8sRestart
int
k8sContHashes
[]
uint64
rktPodState
rktapi
.
PodState
pods
[]
*
rktapi
.
Pod
}{
{},
{
k8sUID
:
types
.
UID
(
"0"
),
k8sName
:
"guestbook"
,
k8sNamespace
:
"default"
,
k8sCreation
:
10000000000
,
k8sRestart
:
1
,
k8sContHashes
:
[]
uint64
{
2353434678
},
rktPodState
:
rktapi
.
PodState_POD_STATE_RUNNING
,
pods
:
[]
*
rktapi
.
Pod
{
{
State
:
rktapi
.
PodState_POD_STATE_RUNNING
,
Apps
:
[]
*
rktapi
.
App
{
{
Name
:
"test"
,
Image
:
&
rktapi
.
Image
{
Name
:
"test"
,
Manifest
:
mustMarshalImageManifest
(
&
appcschema
.
ImageManifest
{
ACKind
:
appcschema
.
ImageManifestKind
,
ACVersion
:
appcschema
.
AppContainerVersion
,
Name
:
*
appctypes
.
MustACIdentifier
(
"test"
),
Annotations
:
appctypes
.
Annotations
{
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktContainerHashAnno
),
Value
:
"2353434678"
,
},
},
},
),
},
},
},
Manifest
:
mustMarshalPodManifest
(
&
appcschema
.
PodManifest
{
ACKind
:
appcschema
.
PodManifestKind
,
ACVersion
:
appcschema
.
AppContainerVersion
,
Annotations
:
appctypes
.
Annotations
{
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktKubeletAnno
),
Value
:
k8sRktKubeletAnnoValue
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktUIDAnno
),
Value
:
"0"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktNameAnno
),
Value
:
"guestbook"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktNamespaceAnno
),
Value
:
"default"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktCreationTimeAnno
),
Value
:
"10000000000"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktRestartCountAnno
),
Value
:
"1"
,
},
},
},
),
},
},
},
{
k8sUID
:
types
.
UID
(
"1"
),
k8sName
:
"test-pod"
,
k8sNamespace
:
"default"
,
k8sCreation
:
10000000001
,
k8sRestart
:
3
,
k8sContHashes
:
[]
uint64
{
2353434682
,
8732645
},
rktPodState
:
rktapi
.
PodState_POD_STATE_EXITED
,
pods
:
[]
*
rktapi
.
Pod
{
{
State
:
rktapi
.
PodState_POD_STATE_EXITED
,
Apps
:
[]
*
rktapi
.
App
{
{
Name
:
"test"
,
Image
:
&
rktapi
.
Image
{
Name
:
"test"
,
Manifest
:
mustMarshalImageManifest
(
&
appcschema
.
ImageManifest
{
ACKind
:
appcschema
.
ImageManifestKind
,
ACVersion
:
appcschema
.
AppContainerVersion
,
Name
:
*
appctypes
.
MustACIdentifier
(
"test"
),
Annotations
:
appctypes
.
Annotations
{
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktContainerHashAnno
),
Value
:
"2353434682"
,
},
},
},
),
},
},
{
Name
:
"test2"
,
Image
:
&
rktapi
.
Image
{
Name
:
"test2"
,
Manifest
:
mustMarshalImageManifest
(
&
appcschema
.
ImageManifest
{
ACKind
:
appcschema
.
ImageManifestKind
,
ACVersion
:
appcschema
.
AppContainerVersion
,
Name
:
*
appctypes
.
MustACIdentifier
(
"test2"
),
Annotations
:
appctypes
.
Annotations
{
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktContainerHashAnno
),
Value
:
"8732645"
,
},
},
},
),
},
},
},
Manifest
:
mustMarshalPodManifest
(
&
appcschema
.
PodManifest
{
ACKind
:
appcschema
.
PodManifestKind
,
ACVersion
:
appcschema
.
AppContainerVersion
,
Annotations
:
appctypes
.
Annotations
{
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktKubeletAnno
),
Value
:
k8sRktKubeletAnnoValue
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktUIDAnno
),
Value
:
"1"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktNameAnno
),
Value
:
"test-pod"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktNamespaceAnno
),
Value
:
"default"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktCreationTimeAnno
),
Value
:
"10000000001"
,
},
appctypes
.
Annotation
{
Name
:
*
appctypes
.
MustACIdentifier
(
k8sRktRestartCountAnno
),
Value
:
"3"
,
},
},
},
),
},
},
},
}
for
i
,
tt
:=
range
tests
{
fr
.
pods
=
tt
.
pods
pods
,
err
:=
r
.
GetPods
(
true
)
if
err
!=
nil
{
t
.
Errorf
(
"%v"
,
err
)
}
assert
.
Equal
(
t
,
len
(
pods
),
len
(
tt
.
pods
),
fmt
.
Sprintf
(
"test case %d: mismatched number of pods"
,
i
))
for
j
,
pod
:=
range
pods
{
assert
.
Equal
(
t
,
pod
.
ID
,
tt
.
k8sUID
,
fmt
.
Sprintf
(
"test case %d: mismatched UIDs"
,
i
))
assert
.
Equal
(
t
,
pod
.
Name
,
tt
.
k8sName
,
fmt
.
Sprintf
(
"test case %d: mismatched Names"
,
i
))
assert
.
Equal
(
t
,
pod
.
Namespace
,
tt
.
k8sNamespace
,
fmt
.
Sprintf
(
"test case %d: mismatched Namespaces"
,
i
))
assert
.
Equal
(
t
,
len
(
pod
.
Containers
),
len
(
tt
.
pods
[
j
]
.
Apps
),
fmt
.
Sprintf
(
"test case %d: mismatched number of containers"
,
i
))
for
k
,
cont
:=
range
pod
.
Containers
{
assert
.
Equal
(
t
,
cont
.
Created
,
tt
.
k8sCreation
,
fmt
.
Sprintf
(
"test case %d: mismatched creation times"
,
i
))
assert
.
Equal
(
t
,
cont
.
Hash
,
tt
.
k8sContHashes
[
k
],
fmt
.
Sprintf
(
"test case %d: mismatched container hashes"
,
i
))
}
}
var
inspectPodCalls
[]
string
for
range
pods
{
inspectPodCalls
=
append
(
inspectPodCalls
,
"InspectPod"
)
}
assert
.
Equal
(
t
,
append
([]
string
{
"ListPods"
},
inspectPodCalls
...
),
fr
.
called
,
fmt
.
Sprintf
(
"test case %d: unexpected called list"
,
i
))
fr
.
CleanCalls
()
}
}
func
TestGetPodsFilter
(
t
*
testing
.
T
)
{
fr
:=
newFakeRktInterface
()
fs
:=
newFakeSystemd
()
r
:=
&
Runtime
{
apisvc
:
fr
,
systemd
:
fs
}
for
_
,
test
:=
range
[]
struct
{
All
bool
ExpectedFilter
*
rktapi
.
PodFilter
}{
{
true
,
&
rktapi
.
PodFilter
{
Annotations
:
[]
*
rktapi
.
KeyValue
{
{
Key
:
k8sRktKubeletAnno
,
Value
:
k8sRktKubeletAnnoValue
,
},
},
},
},
{
false
,
&
rktapi
.
PodFilter
{
States
:
[]
rktapi
.
PodState
{
rktapi
.
PodState_POD_STATE_RUNNING
},
Annotations
:
[]
*
rktapi
.
KeyValue
{
{
Key
:
k8sRktKubeletAnno
,
Value
:
k8sRktKubeletAnnoValue
,
},
},
},
},
}
{
_
,
err
:=
r
.
GetPods
(
test
.
All
)
if
err
!=
nil
{
t
.
Errorf
(
"%v"
,
err
)
}
assert
.
Equal
(
t
,
test
.
ExpectedFilter
,
fr
.
podFilter
,
"filters didn't match when all=%b"
,
test
.
All
)
}
}
func
mustMarshalPodManifest
(
man
*
appcschema
.
PodManifest
)
[]
byte
{
manblob
,
err
:=
json
.
Marshal
(
man
)
if
err
!=
nil
{
panic
(
err
)
}
return
manblob
}
func
mustMarshalImageManifest
(
man
*
appcschema
.
ImageManifest
)
[]
byte
{
manblob
,
err
:=
json
.
Marshal
(
man
)
if
err
!=
nil
{
panic
(
err
)
}
return
manblob
}
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