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
be392839
Commit
be392839
authored
May 08, 2017
by
deads2k
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
plumb stopch to post start hook index since many of them are starting go funcs
parent
640373da
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
254 additions
and
224 deletions
+254
-224
aggregator.go
cmd/kube-apiserver/app/aggregator.go
+4
-4
server.go
cmd/kube-apiserver/app/server.go
+4
-4
config_test.go
staging/src/k8s.io/apiserver/pkg/server/config_test.go
+1
-1
genericapiserver.go
staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go
+1
-1
hooks.go
staging/src/k8s.io/apiserver/pkg/server/hooks.go
+7
-2
apiserver.go
...ing/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
+5
-5
start.go
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
+1
-1
apiserver.go
...s.io/kube-apiextensions-server/pkg/apiserver/apiserver.go
+3
-3
start.go
.../k8s.io/kube-apiextensions-server/pkg/cmd/server/start.go
+1
-1
start.go
...apiextensions-server/test/integration/testserver/start.go
+1
-2
apiserver_test.go
test/integration/apiserver/apiserver_test.go
+5
-5
patch_test.go
test/integration/apiserver/patch_test.go
+2
-2
accessreview_test.go
test/integration/auth/accessreview_test.go
+6
-6
auth_test.go
test/integration/auth/auth_test.go
+22
-22
rbac_test.go
test/integration/auth/rbac_test.go
+4
-4
client_test.go
test/integration/client/client_test.go
+16
-16
dynamic_client_test.go
test/integration/client/dynamic_client_test.go
+2
-2
configmap_test.go
test/integration/configmap/configmap_test.go
+2
-2
defaulttolerationseconds_test.go
...defaulttolerationseconds/defaulttolerationseconds_test.go
+2
-2
etcd_storage_path_test.go
test/integration/etcd/etcd_storage_path_test.go
+1
-1
evictions_test.go
test/integration/evictions/evictions_test.go
+5
-5
apiserver_test.go
test/integration/examples/apiserver_test.go
+1
-1
federation.go
test/integration/federation/framework/federation.go
+10
-11
master_utils.go
test/integration/framework/master_utils.go
+24
-7
garbage_collector_test.go
test/integration/garbagecollector/garbage_collector_test.go
+17
-17
master_test.go
test/integration/master/master_test.go
+16
-16
metrics_test.go
test/integration/metrics/metrics_test.go
+4
-4
objectmeta_test.go
test/integration/objectmeta/objectmeta_test.go
+2
-2
pods_test.go
test/integration/pods/pods_test.go
+4
-4
quota_test.go
test/integration/quota/quota_test.go
+4
-4
replicaset_test.go
test/integration/replicaset/replicaset_test.go
+13
-8
replicationcontroller_test.go
...ation/replicationcontroller/replicationcontroller_test.go
+13
-8
extender_test.go
test/integration/scheduler/extender_test.go
+2
-2
scheduler_test.go
test/integration/scheduler/scheduler_test.go
+11
-11
secrets_test.go
test/integration/secrets/secrets_test.go
+2
-2
storage_classes_test.go
test/integration/storageclasses/storage_classes_test.go
+2
-2
client-go_test.go
test/integration/thirdparty/client-go_test.go
+2
-2
thirdparty_test.go
test/integration/thirdparty/thirdparty_test.go
+6
-6
ttlcontroller_test.go
test/integration/ttlcontroller/ttlcontroller_test.go
+2
-2
attach_detach_test.go
test/integration/volume/attach_detach_test.go
+4
-4
persistent_volumes_test.go
test/integration/volume/persistent_volumes_test.go
+20
-20
No files found.
cmd/kube-apiserver/app/aggregator.go
View file @
be392839
...
...
@@ -89,8 +89,8 @@ func createAggregatorConfig(kubeAPIServerConfig genericapiserver.Config, command
}
func
createAggregatorServer
(
aggregatorConfig
*
aggregatorapiserver
.
Config
,
delegateAPIServer
genericapiserver
.
DelegationTarget
,
sharedInformers
informers
.
SharedInformerFactory
,
stopCh
<-
chan
struct
{}
)
(
*
aggregatorapiserver
.
APIAggregator
,
error
)
{
aggregatorServer
,
err
:=
aggregatorConfig
.
Complete
()
.
NewWithDelegate
(
delegateAPIServer
,
stopCh
)
func
createAggregatorServer
(
aggregatorConfig
*
aggregatorapiserver
.
Config
,
delegateAPIServer
genericapiserver
.
DelegationTarget
,
sharedInformers
informers
.
SharedInformerFactory
)
(
*
aggregatorapiserver
.
APIAggregator
,
error
)
{
aggregatorServer
,
err
:=
aggregatorConfig
.
Complete
()
.
NewWithDelegate
(
delegateAPIServer
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -105,8 +105,8 @@ func createAggregatorServer(aggregatorConfig *aggregatorapiserver.Config, delega
tprRegistrationController
:=
thirdparty
.
NewAutoRegistrationController
(
sharedInformers
.
Extensions
()
.
InternalVersion
()
.
ThirdPartyResources
(),
autoRegistrationController
)
aggregatorServer
.
GenericAPIServer
.
AddPostStartHook
(
"kube-apiserver-autoregistration"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
go
autoRegistrationController
.
Run
(
5
,
s
topCh
)
go
tprRegistrationController
.
Run
(
5
,
s
topCh
)
go
autoRegistrationController
.
Run
(
5
,
context
.
S
topCh
)
go
tprRegistrationController
.
Run
(
5
,
context
.
S
topCh
)
return
nil
})
aggregatorServer
.
GenericAPIServer
.
AddHealthzChecks
(
healthz
.
NamedCheck
(
"autoregister-completion"
,
func
(
r
*
http
.
Request
)
error
{
...
...
cmd/kube-apiserver/app/server.go
View file @
be392839
...
...
@@ -103,7 +103,7 @@ func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
if
err
!=
nil
{
return
err
}
kubeAPIServer
,
err
:=
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
,
stopCh
)
kubeAPIServer
,
err
:=
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
)
if
err
!=
nil
{
return
err
}
...
...
@@ -129,7 +129,7 @@ func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
if
err
!=
nil
{
return
err
}
aggregatorServer
,
err
:=
createAggregatorServer
(
aggregatorConfig
,
kubeAPIServer
.
GenericAPIServer
,
sharedInformers
,
stopCh
)
aggregatorServer
,
err
:=
createAggregatorServer
(
aggregatorConfig
,
kubeAPIServer
.
GenericAPIServer
,
sharedInformers
)
if
err
!=
nil
{
// we don't need special handling for innerStopCh because the aggregator server doesn't create any go routines
return
err
...
...
@@ -138,13 +138,13 @@ func Run(runOptions *options.ServerRunOptions, stopCh <-chan struct{}) error {
}
// CreateKubeAPIServer creates and wires a workable kube-apiserver
func
CreateKubeAPIServer
(
kubeAPIServerConfig
*
master
.
Config
,
sharedInformers
informers
.
SharedInformerFactory
,
stopCh
<-
chan
struct
{}
)
(
*
master
.
Master
,
error
)
{
func
CreateKubeAPIServer
(
kubeAPIServerConfig
*
master
.
Config
,
sharedInformers
informers
.
SharedInformerFactory
)
(
*
master
.
Master
,
error
)
{
kubeAPIServer
,
err
:=
kubeAPIServerConfig
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
if
err
!=
nil
{
return
nil
,
err
}
kubeAPIServer
.
GenericAPIServer
.
AddPostStartHook
(
"start-kube-apiserver-informers"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
sharedInformers
.
Start
(
s
topCh
)
sharedInformers
.
Start
(
context
.
S
topCh
)
return
nil
})
...
...
staging/src/k8s.io/apiserver/pkg/server/config_test.go
View file @
be392839
...
...
@@ -88,7 +88,7 @@ func TestNewWithDelegate(t *testing.T) {
stopCh
:=
make
(
chan
struct
{})
defer
close
(
stopCh
)
wrappingServer
.
PrepareRun
()
wrappingServer
.
RunPostStartHooks
()
wrappingServer
.
RunPostStartHooks
(
stopCh
)
server
:=
httptest
.
NewServer
(
wrappingServer
.
Handler
)
defer
server
.
Close
()
...
...
staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go
View file @
be392839
...
...
@@ -272,7 +272,7 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) error {
close
(
internalStopCh
)
}()
s
.
RunPostStartHooks
()
s
.
RunPostStartHooks
(
stopCh
)
if
_
,
err
:=
systemd
.
SdNotify
(
true
,
"READY=1
\n
"
);
err
!=
nil
{
glog
.
Errorf
(
"Unable to send systemd daemon successful start message: %v
\n
"
,
err
)
...
...
staging/src/k8s.io/apiserver/pkg/server/hooks.go
View file @
be392839
...
...
@@ -43,6 +43,8 @@ type PostStartHookFunc func(context PostStartHookContext) error
type
PostStartHookContext
struct
{
// LoopbackClientConfig is a config for a privileged loopback connection to the API server
LoopbackClientConfig
*
restclient
.
Config
// StopCh is the channel that will be closed when the server stops
StopCh
<-
chan
struct
{}
}
// PostStartHookProvider is an interface in addition to provide a post start hook for the api server
...
...
@@ -89,12 +91,15 @@ func (s *GenericAPIServer) AddPostStartHook(name string, hook PostStartHookFunc)
}
// RunPostStartHooks runs the PostStartHooks for the server
func
(
s
*
GenericAPIServer
)
RunPostStartHooks
()
{
func
(
s
*
GenericAPIServer
)
RunPostStartHooks
(
stopCh
<-
chan
struct
{}
)
{
s
.
postStartHookLock
.
Lock
()
defer
s
.
postStartHookLock
.
Unlock
()
s
.
postStartHooksCalled
=
true
context
:=
PostStartHookContext
{
LoopbackClientConfig
:
s
.
LoopbackClientConfig
}
context
:=
PostStartHookContext
{
LoopbackClientConfig
:
s
.
LoopbackClientConfig
,
StopCh
:
stopCh
,
}
for
hookName
,
hookEntry
:=
range
s
.
postStartHooks
{
go
runPostStartHook
(
hookName
,
hookEntry
,
context
)
...
...
staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
View file @
be392839
...
...
@@ -129,7 +129,7 @@ func (c *Config) SkipComplete() completedConfig {
}
// New returns a new instance of APIAggregator from the given config.
func
(
c
completedConfig
)
NewWithDelegate
(
delegationTarget
genericapiserver
.
DelegationTarget
,
stopCh
<-
chan
struct
{}
)
(
*
APIAggregator
,
error
)
{
func
(
c
completedConfig
)
NewWithDelegate
(
delegationTarget
genericapiserver
.
DelegationTarget
)
(
*
APIAggregator
,
error
)
{
genericServer
,
err
:=
c
.
Config
.
GenericConfig
.
SkipComplete
()
.
New
(
delegationTarget
)
// completion is done in Complete, no need for a second time
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -185,16 +185,16 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
)
s
.
GenericAPIServer
.
AddPostStartHook
(
"start-kube-aggregator-informers"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
informerFactory
.
Start
(
s
topCh
)
kubeInformers
.
Start
(
s
topCh
)
informerFactory
.
Start
(
context
.
S
topCh
)
kubeInformers
.
Start
(
context
.
S
topCh
)
return
nil
})
s
.
GenericAPIServer
.
AddPostStartHook
(
"apiservice-registration-controller"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
go
apiserviceRegistrationController
.
Run
(
s
topCh
)
go
apiserviceRegistrationController
.
Run
(
context
.
S
topCh
)
return
nil
})
s
.
GenericAPIServer
.
AddPostStartHook
(
"apiservice-status-available-controller"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
go
availableController
.
Run
(
s
topCh
)
go
availableController
.
Run
(
context
.
S
topCh
)
return
nil
})
...
...
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
View file @
be392839
...
...
@@ -157,7 +157,7 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
return
err
}
server
,
err
:=
config
.
Complete
()
.
NewWithDelegate
(
genericapiserver
.
EmptyDelegate
,
stopCh
)
server
,
err
:=
config
.
Complete
()
.
NewWithDelegate
(
genericapiserver
.
EmptyDelegate
)
if
err
!=
nil
{
return
err
}
...
...
staging/src/k8s.io/kube-apiextensions-server/pkg/apiserver/apiserver.go
View file @
be392839
...
...
@@ -101,7 +101,7 @@ func (c *Config) SkipComplete() completedConfig {
}
// New returns a new instance of CustomResources from the given config.
func
(
c
completedConfig
)
New
(
delegationTarget
genericapiserver
.
DelegationTarget
,
stopCh
<-
chan
struct
{}
)
(
*
CustomResources
,
error
)
{
func
(
c
completedConfig
)
New
(
delegationTarget
genericapiserver
.
DelegationTarget
)
(
*
CustomResources
,
error
)
{
genericServer
,
err
:=
c
.
Config
.
GenericConfig
.
SkipComplete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
// completion is done in Complete, no need for a second time
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -155,11 +155,11 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget,
customResourceController
:=
NewDiscoveryController
(
customResourceInformers
.
Apiextensions
()
.
InternalVersion
()
.
CustomResources
(),
versionDiscoveryHandler
,
groupDiscoveryHandler
)
s
.
GenericAPIServer
.
AddPostStartHook
(
"start-apiextensions-informers"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
customResourceInformers
.
Start
(
s
topCh
)
customResourceInformers
.
Start
(
context
.
S
topCh
)
return
nil
})
s
.
GenericAPIServer
.
AddPostStartHook
(
"start-apiextensions-controllers"
,
func
(
context
genericapiserver
.
PostStartHookContext
)
error
{
go
customResourceController
.
Run
(
s
topCh
)
go
customResourceController
.
Run
(
context
.
S
topCh
)
return
nil
})
...
...
staging/src/k8s.io/kube-apiextensions-server/pkg/cmd/server/start.go
View file @
be392839
...
...
@@ -119,7 +119,7 @@ func (o CustomResourcesServerOptions) RunCustomResourcesServer(stopCh <-chan str
return
err
}
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
,
stopCh
)
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
if
err
!=
nil
{
return
err
}
...
...
staging/src/k8s.io/kube-apiextensions-server/test/integration/testserver/start.go
View file @
be392839
...
...
@@ -97,9 +97,8 @@ func DefaultServerConfig() (*extensionsapiserver.Config, error) {
func
StartServer
(
config
*
extensionsapiserver
.
Config
)
(
chan
struct
{},
clientset
.
Interface
,
dynamic
.
ClientPool
,
error
)
{
stopCh
:=
make
(
chan
struct
{})
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
,
stopCh
)
server
,
err
:=
config
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
if
err
!=
nil
{
close
(
stopCh
)
return
nil
,
nil
,
nil
,
err
}
go
func
()
{
...
...
test/integration/apiserver/apiserver_test.go
View file @
be392839
...
...
@@ -34,16 +34,16 @@ import (
"k8s.io/kubernetes/test/integration/framework"
)
func
setup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
clientset
.
Interface
)
{
func
setup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
clientset
.
Interface
,
framework
.
CloseFunc
)
{
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
EnableCoreControllers
=
false
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
clientSet
,
err
:=
clientset
.
NewForConfig
(
&
restclient
.
Config
{
Host
:
s
.
URL
})
if
err
!=
nil
{
t
.
Fatalf
(
"Error in create clientset: %v"
,
err
)
}
return
s
,
clientSet
return
s
,
clientSet
,
closeFn
}
func
verifyStatusCode
(
t
*
testing
.
T
,
verb
,
URL
,
body
string
,
expectedStatusCode
int
)
{
...
...
@@ -109,8 +109,8 @@ var cascDel = `
// Tests that the apiserver returns 202 status code as expected.
func
Test202StatusCode
(
t
*
testing
.
T
)
{
s
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
clientSet
,
closeFn
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"status-code"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/apiserver/patch_test.go
View file @
be392839
...
...
@@ -37,8 +37,8 @@ import (
// Tests that the apiserver retries non-overlapping conflicts on patches
func
TestPatchConflicts
(
t
*
testing
.
T
)
{
s
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
clientSet
,
closeFn
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"status-code"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/auth/accessreview_test.go
View file @
be392839
...
...
@@ -57,8 +57,8 @@ func TestSubjectAccessReview(t *testing.T) {
masterConfig
.
GenericConfig
.
Authenticator
=
authenticator
.
RequestFunc
(
alwaysAlice
)
masterConfig
.
GenericConfig
.
Authorizer
=
sarAuthorizer
{}
masterConfig
.
GenericConfig
.
AdmissionControl
=
admit
.
NewAlwaysAdmit
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -151,8 +151,8 @@ func TestSelfSubjectAccessReview(t *testing.T) {
})
masterConfig
.
GenericConfig
.
Authorizer
=
sarAuthorizer
{}
masterConfig
.
GenericConfig
.
AdmissionControl
=
admit
.
NewAlwaysAdmit
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -231,8 +231,8 @@ func TestLocalSubjectAccessReview(t *testing.T) {
masterConfig
.
GenericConfig
.
Authenticator
=
authenticator
.
RequestFunc
(
alwaysAlice
)
masterConfig
.
GenericConfig
.
Authorizer
=
sarAuthorizer
{}
masterConfig
.
GenericConfig
.
AdmissionControl
=
admit
.
NewAlwaysAdmit
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/auth/auth_test.go
View file @
be392839
...
...
@@ -403,8 +403,8 @@ func getTestRequests(namespace string) []struct {
func
TestAuthModeAlwaysAllow
(
t
*
testing
.
T
)
{
// Set up a master
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-always-allow"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -501,8 +501,8 @@ func TestAuthModeAlwaysDeny(t *testing.T) {
// Set up a master
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authorizer
=
authorizerfactory
.
NewAlwaysDenyAuthorizer
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-always-deny"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -552,8 +552,8 @@ func TestAliceNotForbiddenOrUnauthorized(t *testing.T) {
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
allowAliceAuthorizer
{}
masterConfig
.
GenericConfig
.
AdmissionControl
=
admit
.
NewAlwaysAdmit
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-alice-not-forbidden"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -621,8 +621,8 @@ func TestBobIsForbidden(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
allowAliceAuthorizer
{}
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-bob-forbidden"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -665,8 +665,8 @@ func TestUnknownUserIsUnauthorized(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
allowAliceAuthorizer
{}
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-unknown-unauthorized"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -727,8 +727,8 @@ func TestImpersonateIsForbidden(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
impersonateAuthorizer
{}
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-impersonate-forbidden"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -874,8 +874,8 @@ func TestAuthorizationAttributeDetermination(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
trackingAuthorizer
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-attribute-determination"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -940,8 +940,8 @@ func TestNamespaceAuthorization(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
a
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-namespace"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -1038,8 +1038,8 @@ func TestKindAuthorization(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
a
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-kind"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -1122,8 +1122,8 @@ func TestReadOnlyAuthorization(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
getTestTokenAuth
()
masterConfig
.
GenericConfig
.
Authorizer
=
a
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-read-only"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -1181,8 +1181,8 @@ func TestWebhookTokenAuthenticator(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authenticator
=
authenticator
masterConfig
.
GenericConfig
.
Authorizer
=
allowAliceAuthorizer
{}
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"auth-webhook-token"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/auth/rbac_test.go
View file @
be392839
...
...
@@ -415,8 +415,8 @@ func TestRBAC(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authorizer
=
newRBACAuthorizer
(
masterConfig
)
masterConfig
.
GenericConfig
.
Authenticator
=
newFakeAuthenticator
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
api
.
Codecs
}}
...
...
@@ -507,8 +507,8 @@ func TestBootstrapping(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
Authorizer
=
newRBACAuthorizer
(
masterConfig
)
masterConfig
.
GenericConfig
.
Authenticator
=
newFakeAuthenticator
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
BearerToken
:
superUser
,
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/client/client_test.go
View file @
be392839
...
...
@@ -45,8 +45,8 @@ import (
)
func
TestClient
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -117,8 +117,8 @@ func TestClient(t *testing.T) {
}
func
TestAtomicPut
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
c
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -209,8 +209,8 @@ func TestAtomicPut(t *testing.T) {
}
func
TestPatch
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
c
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -348,8 +348,8 @@ func TestPatch(t *testing.T) {
}
func
TestPatchWithCreateOnUpdate
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
c
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -459,8 +459,8 @@ func TestPatchWithCreateOnUpdate(t *testing.T) {
}
func
TestAPIVersions
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
c
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -481,8 +481,8 @@ func TestAPIVersions(t *testing.T) {
}
func
TestSingleWatch
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"single-watch"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -566,8 +566,8 @@ func TestMultiWatch(t *testing.T) {
const
watcherCount
=
50
rt
.
GOMAXPROCS
(
watcherCount
)
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"multi-watch"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -822,8 +822,8 @@ func runSelfLinkTestOnNamespace(t *testing.T, c clientset.Interface, namespace s
}
func
TestSelfLinkOnNamespace
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"selflink"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/client/dynamic_client_test.go
View file @
be392839
...
...
@@ -33,8 +33,8 @@ import (
)
func
TestDynamicClient
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"dynamic-client"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/configmap/configmap_test.go
View file @
be392839
...
...
@@ -32,8 +32,8 @@ import (
// TestConfigMap tests apiserver-side behavior of creation of ConfigMaps and pods that consume them.
func
TestConfigMap
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/defaulttolerationseconds/defaulttolerationseconds_test.go
View file @
be392839
...
...
@@ -34,8 +34,8 @@ func TestAdmission(t *testing.T) {
masterConfig
.
GenericConfig
.
EnableProfiling
=
true
masterConfig
.
GenericConfig
.
EnableMetrics
=
true
masterConfig
.
GenericConfig
.
AdmissionControl
=
defaulttolerationseconds
.
NewDefaultTolerationSeconds
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/etcd/etcd_storage_path_test.go
View file @
be392839
...
...
@@ -559,7 +559,7 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
kubeAPIServerConfig
.
APIResourceConfigSource
=
&
allResourceSource
{}
// force enable all resources
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
,
wait
.
NeverStop
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
test/integration/evictions/evictions_test.go
View file @
be392839
...
...
@@ -48,8 +48,8 @@ const (
func
TestConcurrentEvictionRequests
(
t
*
testing
.
T
)
{
podNameFormat
:=
"test-pod-%d"
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"concurrent-eviction-requests"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -225,9 +225,9 @@ func newEviction(ns, evictionName string, deleteOption *metav1.DeleteOptions) *v
}
}
func
rmSetup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
*
disruption
.
DisruptionController
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
func
rmSetup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
framework
.
CloseFunc
,
*
disruption
.
DisruptionController
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
config
:=
restclient
.
Config
{
Host
:
s
.
URL
}
clientSet
,
err
:=
clientset
.
NewForConfig
(
&
config
)
...
...
@@ -246,7 +246,7 @@ func rmSetup(t *testing.T) (*httptest.Server, *disruption.DisruptionController,
informers
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
clientset
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
&
config
,
"disruption-controller"
)),
)
return
s
,
rm
,
informers
,
clientSet
return
s
,
closeFn
,
rm
,
informers
,
clientSet
}
// wait for the podInformer to observe the pods. Call this function before
...
...
test/integration/examples/apiserver_test.go
View file @
be392839
...
...
@@ -117,7 +117,7 @@ func TestAggregatedAPIServer(t *testing.T) {
}
kubeClientConfigValue
.
Store
(
kubeAPIServerConfig
.
GenericConfig
.
LoopbackClientConfig
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
,
wait
.
NeverStop
)
kubeAPIServer
,
err
:=
app
.
CreateKubeAPIServer
(
kubeAPIServerConfig
,
sharedInformers
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
test/integration/federation/framework/federation.go
View file @
be392839
...
...
@@ -18,7 +18,6 @@ package framework
import
(
"fmt"
"net/http/httptest"
"testing"
"time"
...
...
@@ -31,10 +30,10 @@ import (
)
type
MemberCluster
struct
{
Server
*
httptest
.
Server
Config
*
master
.
Config
Client
clientset
.
Interface
Host
string
CloseFn
framework
.
CloseFunc
Config
*
master
.
Config
Client
clientset
.
Interface
Host
string
}
// FederationFixture manages a federation api server and a set of member clusters
...
...
@@ -72,7 +71,7 @@ func (f *FederationFixture) startClusters() {
fedClient
:=
f
.
APIFixture
.
NewClient
(
"federation-fixture"
)
for
i
:=
0
;
i
<
f
.
DesiredClusterCount
;
i
++
{
config
:=
framework
.
NewMasterConfig
()
_
,
server
:=
framework
.
RunAMaster
(
config
)
_
,
_
,
closeFn
:=
framework
.
RunAMaster
(
config
)
host
:=
config
.
GenericConfig
.
LoopbackClientConfig
.
Host
// Use fmt to ensure the output will be visible when run with go test -v
...
...
@@ -80,10 +79,10 @@ func (f *FederationFixture) startClusters() {
clusterClient
:=
clientset
.
NewForConfigOrDie
(
config
.
GenericConfig
.
LoopbackClientConfig
)
f
.
Clusters
=
append
(
f
.
Clusters
,
&
MemberCluster
{
Server
:
server
,
Config
:
config
,
Client
:
clusterClient
,
Host
:
host
,
CloseFn
:
closeFn
,
Config
:
config
,
Client
:
clusterClient
,
Host
:
host
,
})
f
.
ClusterClients
=
append
(
f
.
ClusterClients
,
clusterClient
)
...
...
@@ -113,7 +112,7 @@ func (f *FederationFixture) TearDown(t *testing.T) {
f
.
stopChan
=
nil
}
for
_
,
cluster
:=
range
f
.
Clusters
{
cluster
.
Server
.
Close
()
cluster
.
CloseFn
()
}
f
.
Clusters
=
nil
if
f
.
APIFixture
!=
nil
{
...
...
test/integration/framework/master_utils.go
View file @
be392839
...
...
@@ -98,6 +98,8 @@ type MasterComponents struct {
ClientSet
clientset
.
Interface
// Replication controller manager
ControllerManager
*
replicationcontroller
.
ReplicationManager
// CloseFn shuts down the server
CloseFn
CloseFunc
// Channel for stop signals to rc manager
rcStopCh
chan
struct
{}
// Used to stop master components individually, and via MasterComponents.Stop
...
...
@@ -118,7 +120,7 @@ type Config struct {
// NewMasterComponents creates, initializes and starts master components based on the given config.
func
NewMasterComponents
(
c
*
Config
)
*
MasterComponents
{
m
,
s
:=
startMasterOrDie
(
c
.
MasterConfig
,
nil
,
nil
)
m
,
s
,
closeFn
:=
startMasterOrDie
(
c
.
MasterConfig
,
nil
,
nil
)
// TODO: Allow callers to pipe through a different master url and create a client/start components using it.
glog
.
Infof
(
"Master %+v"
,
s
.
URL
)
// TODO: caesarxuchao: remove this client when the refactoring of client libraray is done.
...
...
@@ -138,6 +140,7 @@ func NewMasterComponents(c *Config) *MasterComponents {
KubeMaster
:
m
,
ClientSet
:
clientset
,
ControllerManager
:
controllerManager
,
CloseFn
:
closeFn
,
rcStopCh
:
rcStopCh
,
}
}
...
...
@@ -173,7 +176,7 @@ func (h *MasterHolder) SetMaster(m *master.Master) {
}
// startMasterOrDie starts a kubernetes master and an httpserver to handle api requests
func
startMasterOrDie
(
masterConfig
*
master
.
Config
,
incomingServer
*
httptest
.
Server
,
masterReceiver
MasterReceiver
)
(
*
master
.
Master
,
*
httptest
.
Server
)
{
func
startMasterOrDie
(
masterConfig
*
master
.
Config
,
incomingServer
*
httptest
.
Server
,
masterReceiver
MasterReceiver
)
(
*
master
.
Master
,
*
httptest
.
Server
,
CloseFunc
)
{
var
m
*
master
.
Master
var
s
*
httptest
.
Server
...
...
@@ -185,6 +188,12 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
}))
}
stopCh
:=
make
(
chan
struct
{})
closeFn
:=
func
()
{
close
(
stopCh
)
s
.
Close
()
}
if
masterConfig
==
nil
{
masterConfig
=
NewMasterConfig
()
masterConfig
.
GenericConfig
.
EnableProfiling
=
true
...
...
@@ -238,6 +247,7 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
m
,
err
:=
masterConfig
.
Complete
()
.
New
(
genericapiserver
.
EmptyDelegate
)
if
err
!=
nil
{
closeFn
()
glog
.
Fatalf
(
"error in bringing up the master: %v"
,
err
)
}
if
masterReceiver
!=
nil
{
...
...
@@ -248,12 +258,13 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
// this method never actually calls the `Run` method for the API server
// fire the post hooks ourselves
m
.
GenericAPIServer
.
PrepareRun
()
m
.
GenericAPIServer
.
RunPostStartHooks
()
m
.
GenericAPIServer
.
RunPostStartHooks
(
stopCh
)
cfg
:=
*
masterConfig
.
GenericConfig
.
LoopbackClientConfig
cfg
.
ContentConfig
.
GroupVersion
=
&
schema
.
GroupVersion
{}
privilegedClient
,
err
:=
restclient
.
RESTClientFor
(
&
cfg
)
if
err
!=
nil
{
closeFn
()
glog
.
Fatal
(
err
)
}
err
=
wait
.
PollImmediate
(
100
*
time
.
Millisecond
,
30
*
time
.
Second
,
func
()
(
bool
,
error
)
{
...
...
@@ -266,6 +277,7 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
return
false
,
nil
})
if
err
!=
nil
{
closeFn
()
glog
.
Fatal
(
err
)
}
...
...
@@ -275,6 +287,7 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
coreClient
:=
coreclient
.
NewForConfigOrDie
(
&
cfg
)
svcWatch
,
err
:=
coreClient
.
Services
(
metav1
.
NamespaceDefault
)
.
Watch
(
metav1
.
ListOptions
{})
if
err
!=
nil
{
closeFn
()
glog
.
Fatal
(
err
)
}
_
,
err
=
watch
.
Until
(
30
*
time
.
Second
,
svcWatch
,
func
(
event
watch
.
Event
)
(
bool
,
error
)
{
...
...
@@ -287,11 +300,12 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv
return
false
,
nil
})
if
err
!=
nil
{
closeFn
()
glog
.
Fatal
(
err
)
}
}
return
m
,
s
return
m
,
s
,
closeFn
}
func
parseCIDROrDie
(
cidr
string
)
*
net
.
IPNet
{
...
...
@@ -402,7 +416,7 @@ func (m *MasterComponents) Stop(apiServer, rcManager bool) {
m
.
once
.
Do
(
m
.
stopRCManager
)
}
if
apiServer
{
m
.
ApiServer
.
Close
()
m
.
CloseFn
()
}
}
...
...
@@ -467,7 +481,10 @@ func ScaleRC(name, ns string, replicas int32, clientset internalclientset.Interf
return
scaled
,
nil
}
func
RunAMaster
(
masterConfig
*
master
.
Config
)
(
*
master
.
Master
,
*
httptest
.
Server
)
{
// CloseFunc can be called to cleanup the master
type
CloseFunc
func
()
func
RunAMaster
(
masterConfig
*
master
.
Config
)
(
*
master
.
Master
,
*
httptest
.
Server
,
CloseFunc
)
{
if
masterConfig
==
nil
{
masterConfig
=
NewMasterConfig
()
masterConfig
.
GenericConfig
.
EnableProfiling
=
true
...
...
@@ -476,7 +493,7 @@ func RunAMaster(masterConfig *master.Config) (*master.Master, *httptest.Server)
return
startMasterOrDie
(
masterConfig
,
nil
,
nil
)
}
func
RunAMasterUsingServer
(
masterConfig
*
master
.
Config
,
s
*
httptest
.
Server
,
masterReceiver
MasterReceiver
)
(
*
master
.
Master
,
*
httptest
.
Server
)
{
func
RunAMasterUsingServer
(
masterConfig
*
master
.
Config
,
s
*
httptest
.
Server
,
masterReceiver
MasterReceiver
)
(
*
master
.
Master
,
*
httptest
.
Server
,
CloseFunc
)
{
return
startMasterOrDie
(
masterConfig
,
s
,
masterReceiver
)
}
...
...
test/integration/garbagecollector/garbage_collector_test.go
View file @
be392839
...
...
@@ -123,10 +123,10 @@ func newOwnerRC(name, namespace string) *v1.ReplicationController {
}
}
func
setup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
*
garbagecollector
.
GarbageCollector
,
clientset
.
Interface
)
{
func
setup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
framework
.
CloseFunc
,
*
garbagecollector
.
GarbageCollector
,
clientset
.
Interface
)
{
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
EnableCoreControllers
=
false
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
clientSet
,
err
:=
clientset
.
NewForConfig
(
&
restclient
.
Config
{
Host
:
s
.
URL
})
if
err
!=
nil
{
...
...
@@ -150,15 +150,15 @@ func setup(t *testing.T) (*httptest.Server, *garbagecollector.GarbageCollector,
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create garbage collector"
)
}
return
s
,
gc
,
clientSet
return
s
,
closeFn
,
gc
,
clientSet
}
// This test simulates the cascading deletion.
func
TestCascadingDeletion
(
t
*
testing
.
T
)
{
glog
.
V
(
6
)
.
Infof
(
"TestCascadingDeletion starts"
)
defer
glog
.
V
(
6
)
.
Infof
(
"TestCascadingDeletion ends"
)
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-cascading-deletion"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -245,8 +245,8 @@ func TestCascadingDeletion(t *testing.T) {
// This test simulates the case where an object is created with an owner that
// doesn't exist. It verifies the GC will delete such an object.
func
TestCreateWithNonExistentOwner
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-non-existing-owner"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -341,8 +341,8 @@ func verifyRemainingObjects(t *testing.T, clientSet clientset.Interface, namespa
// e2e tests that put more stress.
func
TestStressingCascadingDeletion
(
t
*
testing
.
T
)
{
t
.
Logf
(
"starts garbage collector stress test"
)
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-stressing-cascading-deletion"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -402,8 +402,8 @@ func TestStressingCascadingDeletion(t *testing.T) {
}
func
TestOrphaning
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-orphaning"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -473,8 +473,8 @@ func TestOrphaning(t *testing.T) {
}
func
TestSolidOwnerDoesNotBlockWaitingOwner
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground1"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -535,8 +535,8 @@ func TestSolidOwnerDoesNotBlockWaitingOwner(t *testing.T) {
}
func
TestNonBlockingOwnerRefDoesNotBlock
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground2"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -603,8 +603,8 @@ func TestNonBlockingOwnerRefDoesNotBlock(t *testing.T) {
}
func
TestBlockingOwnerRefDoesBlock
(
t
*
testing
.
T
)
{
s
,
gc
,
clientSet
:=
setup
(
t
)
defer
s
.
Close
()
s
,
closeFn
,
gc
,
clientSet
:=
setup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"gc-foreground3"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/master/master_test.go
View file @
be392839
...
...
@@ -45,8 +45,8 @@ import (
)
func
testPrefix
(
t
*
testing
.
T
,
prefix
string
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
resp
,
err
:=
http
.
Get
(
s
.
URL
+
prefix
)
if
err
!=
nil
{
...
...
@@ -74,8 +74,8 @@ func TestExtensionsPrefix(t *testing.T) {
}
func
TestEmptyList
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
u
:=
s
.
URL
+
"/api/v1/namespaces/default/pods"
resp
,
err
:=
http
.
Get
(
u
)
...
...
@@ -102,8 +102,8 @@ func TestEmptyList(t *testing.T) {
}
func
TestWatchSucceedsWithoutArgs
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
resp
,
err
:=
http
.
Get
(
s
.
URL
+
"/api/v1/namespaces?watch=1"
)
if
err
!=
nil
{
...
...
@@ -207,8 +207,8 @@ func appsPath(resource, namespace, name string) string {
}
func
TestAutoscalingGroupBackwardCompatibility
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
transport
:=
http
.
DefaultTransport
requests
:=
[]
struct
{
...
...
@@ -252,8 +252,8 @@ func TestAutoscalingGroupBackwardCompatibility(t *testing.T) {
}
func
TestAppsGroupBackwardCompatibility
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
transport
:=
http
.
DefaultTransport
requests
:=
[]
struct
{
...
...
@@ -305,8 +305,8 @@ func TestAppsGroupBackwardCompatibility(t *testing.T) {
}
func
TestAccept
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
resp
,
err
:=
http
.
Get
(
s
.
URL
+
"/api/"
)
if
err
!=
nil
{
...
...
@@ -383,8 +383,8 @@ func countEndpoints(eps *api.Endpoints) int {
}
func
TestMasterService
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -425,8 +425,8 @@ func TestServiceAlloc(t *testing.T) {
t
.
Fatalf
(
"bad cidr: %v"
,
err
)
}
cfg
.
ServiceIPRange
=
*
cidr
_
,
s
:=
framework
.
RunAMaster
(
cfg
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
cfg
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
api
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/metrics/metrics_test.go
View file @
be392839
...
...
@@ -90,8 +90,8 @@ func TestMasterProcessMetrics(t *testing.T) {
t
.
Skipf
(
"not supported on GOOS=%s"
,
runtime
.
GOOS
)
}
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
metrics
,
err
:=
scrapeMetrics
(
s
)
if
err
!=
nil
{
...
...
@@ -106,8 +106,8 @@ func TestMasterProcessMetrics(t *testing.T) {
}
func
TestApiserverMetrics
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
// Make a request to the apiserver to ensure there's at least one data point
// for the metrics we're expecting -- otherwise, they won't be exported.
...
...
test/integration/objectmeta/objectmeta_test.go
View file @
be392839
...
...
@@ -31,8 +31,8 @@ import (
func
TestIgnoreClusterName
(
t
*
testing
.
T
)
{
config
:=
framework
.
NewMasterConfig
()
_
,
s
:=
framework
.
RunAMaster
(
config
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
config
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
ns
:=
v1
.
Namespace
{
...
...
test/integration/pods/pods_test.go
View file @
be392839
...
...
@@ -30,8 +30,8 @@ import (
)
func
TestPodUpdateActiveDeadlineSeconds
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pod-activedeadline-update"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -147,8 +147,8 @@ func TestPodUpdateActiveDeadlineSeconds(t *testing.T) {
}
func
TestPodReadOnlyFilesystem
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
isReadOnly
:=
true
ns
:=
framework
.
CreateTestingNamespace
(
"pod-readonly-root"
,
s
,
t
)
...
...
test/integration/quota/quota_test.go
View file @
be392839
...
...
@@ -61,7 +61,6 @@ func TestQuota(t *testing.T) {
<-
h
.
Initialized
h
.
M
.
GenericAPIServer
.
Handler
.
ServeHTTP
(
w
,
req
)
}))
defer
s
.
Close
()
admissionCh
:=
make
(
chan
struct
{})
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
QPS
:
-
1
,
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -78,7 +77,8 @@ func TestQuota(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
AdmissionControl
=
admission
framework
.
RunAMasterUsingServer
(
masterConfig
,
s
,
h
)
_
,
_
,
closeFn
:=
framework
.
RunAMasterUsingServer
(
masterConfig
,
s
,
h
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"quotaed"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -237,7 +237,6 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
<-
h
.
Initialized
h
.
M
.
GenericAPIServer
.
Handler
.
ServeHTTP
(
w
,
req
)
}))
defer
s
.
Close
()
admissionCh
:=
make
(
chan
struct
{})
clientset
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
QPS
:
-
1
,
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
@@ -263,7 +262,8 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
.
GenericConfig
.
AdmissionControl
=
admission
framework
.
RunAMasterUsingServer
(
masterConfig
,
s
,
h
)
_
,
_
,
closeFn
:=
framework
.
RunAMasterUsingServer
(
masterConfig
,
s
,
h
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"quota"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/replicaset/replicaset_test.go
View file @
be392839
...
...
@@ -124,9 +124,9 @@ func verifyRemainingObjects(t *testing.T, clientSet clientset.Interface, namespa
return
ret
,
nil
}
func
rmSetup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
*
replicaset
.
ReplicaSetController
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
func
rmSetup
(
t
*
testing
.
T
)
(
*
httptest
.
Server
,
framework
.
CloseFunc
,
*
replicaset
.
ReplicaSetController
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
config
:=
restclient
.
Config
{
Host
:
s
.
URL
}
clientSet
,
err
:=
clientset
.
NewForConfig
(
&
config
)
...
...
@@ -146,7 +146,7 @@ func rmSetup(t *testing.T) (*httptest.Server, *replicaset.ReplicaSetController,
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to create replicaset controller"
)
}
return
s
,
rm
,
informers
,
clientSet
return
s
,
closeFn
,
rm
,
informers
,
clientSet
}
// wait for the podInformer to observe the pods. Call this function before
...
...
@@ -216,7 +216,8 @@ func TestAdoption(t *testing.T) {
},
}
for
i
,
tc
:=
range
testCases
{
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
podInformer
:=
informers
.
Core
()
.
V1
()
.
Pods
()
.
Informer
()
ns
:=
framework
.
CreateTestingNamespace
(
fmt
.
Sprintf
(
"rs-adoption-%d"
,
i
),
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -294,7 +295,8 @@ func TestUpdateSelectorToAdopt(t *testing.T) {
// We have pod1, pod2 and rs. rs.spec.replicas=1. At first rs.Selector
// matches pod1 only; change the selector to match pod2 as well. Verify
// there is only one pod left.
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"rs-update-selector-to-adopt"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rs
:=
newRS
(
"rs"
,
ns
.
Name
,
1
)
...
...
@@ -334,7 +336,8 @@ func TestUpdateSelectorToRemoveControllerRef(t *testing.T) {
// matches pod1 and pod2; change the selector to match only pod1. Verify
// that rs creates one more pod, so there are 3 pods. Also verify that
// pod2's controllerRef is cleared.
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
podInformer
:=
informers
.
Core
()
.
V1
()
.
Pods
()
.
Informer
()
ns
:=
framework
.
CreateTestingNamespace
(
"rs-update-selector-to-remove-controllerref"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -381,7 +384,8 @@ func TestUpdateLabelToRemoveControllerRef(t *testing.T) {
// matches pod1 and pod2; change pod2's labels to non-matching. Verify
// that rs creates one more pod, so there are 3 pods. Also verify that
// pod2's controllerRef is cleared.
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"rs-update-label-to-remove-controllerref"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rs
:=
newRS
(
"rs"
,
ns
.
Name
,
2
)
...
...
@@ -423,7 +427,8 @@ func TestUpdateLabelToBeAdopted(t *testing.T) {
// matches pod1 only; change pod2's labels to be matching. Verify the RS
// controller adopts pod2 and delete one of them, so there is only 1 pod
// left.
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"rs-update-label-to-be-adopted"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rs
:=
newRS
(
"rs"
,
ns
.
Name
,
1
)
...
...
test/integration/replicationcontroller/replicationcontroller_test.go
View file @
be392839
...
...
@@ -121,9 +121,9 @@ func verifyRemainingObjects(t *testing.T, clientSet clientset.Interface, namespa
return
ret
,
nil
}
func
rmSetup
(
t
*
testing
.
T
,
stopCh
chan
struct
{})
(
*
httptest
.
Server
,
*
replication
.
ReplicationManager
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
func
rmSetup
(
t
*
testing
.
T
,
stopCh
chan
struct
{})
(
*
httptest
.
Server
,
framework
.
CloseFunc
,
*
replication
.
ReplicationManager
,
informers
.
SharedInformerFactory
,
clientset
.
Interface
)
{
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
_
,
s
:=
framework
.
RunAMaster
(
masterConfig
)
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
masterConfig
)
config
:=
restclient
.
Config
{
Host
:
s
.
URL
}
clientSet
,
err
:=
clientset
.
NewForConfig
(
&
config
)
...
...
@@ -136,7 +136,7 @@ func rmSetup(t *testing.T, stopCh chan struct{}) (*httptest.Server, *replication
rm
:=
replication
.
NewReplicationManager
(
informers
.
Core
()
.
V1
()
.
Pods
(),
informers
.
Core
()
.
V1
()
.
ReplicationControllers
(),
clientSet
,
replication
.
BurstReplicas
)
informers
.
Start
(
stopCh
)
return
s
,
rm
,
informers
,
clientSet
return
s
,
closeFn
,
rm
,
informers
,
clientSet
}
// wait for the podInformer to observe the pods. Call this function before
...
...
@@ -207,7 +207,8 @@ func TestAdoption(t *testing.T) {
}
for
i
,
tc
:=
range
testCases
{
stopCh
:=
make
(
chan
struct
{})
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
fmt
.
Sprintf
(
"adoption-%d"
,
i
),
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -284,7 +285,8 @@ func TestUpdateSelectorToAdopt(t *testing.T) {
// matches pod1 only; change the selector to match pod2 as well. Verify
// there is only one pod left.
stopCh
:=
make
(
chan
struct
{})
s
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
s
,
closeFn
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"update-selector-to-adopt"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rc
:=
newRC
(
"rc"
,
ns
.
Name
,
1
)
...
...
@@ -323,7 +325,8 @@ func TestUpdateSelectorToRemoveControllerRef(t *testing.T) {
// that rc creates one more pod, so there are 3 pods. Also verify that
// pod2's controllerRef is cleared.
stopCh
:=
make
(
chan
struct
{})
s
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
s
,
closeFn
,
rm
,
informers
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"update-selector-to-remove-controllerref"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rc
:=
newRC
(
"rc"
,
ns
.
Name
,
2
)
...
...
@@ -368,7 +371,8 @@ func TestUpdateLabelToRemoveControllerRef(t *testing.T) {
// that rc creates one more pod, so there are 3 pods. Also verify that
// pod2's controllerRef is cleared.
stopCh
:=
make
(
chan
struct
{})
s
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
s
,
closeFn
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"update-label-to-remove-controllerref"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rc
:=
newRC
(
"rc"
,
ns
.
Name
,
2
)
...
...
@@ -409,7 +413,8 @@ func TestUpdateLabelToBeAdopted(t *testing.T) {
// controller adopts pod2 and delete one of them, so there is only 1 pod
// left.
stopCh
:=
make
(
chan
struct
{})
s
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
s
,
closeFn
,
rm
,
_
,
clientSet
:=
rmSetup
(
t
,
stopCh
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"update-label-to-be-adopted"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
rc
:=
newRC
(
"rc"
,
ns
.
Name
,
1
)
...
...
test/integration/scheduler/extender_test.go
View file @
be392839
...
...
@@ -254,8 +254,8 @@ func machine_3_Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*schedulerapi.HostP
}
func
TestSchedulerExtender
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"scheduler-extender"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/scheduler/scheduler_test.go
View file @
be392839
...
...
@@ -76,8 +76,8 @@ func PriorityTwo(pod *v1.Pod, nodeNameToInfo map[string]*schedulercache.NodeInfo
// from configurations provided by a ConfigMap object and then verifies that the
// configuration is applied correctly.
func
TestSchedulerCreationFromConfigMap
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"configmap"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -155,8 +155,8 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) {
// TestSchedulerCreationFromNonExistentConfigMap ensures that creation of the
// scheduler from a non-existent ConfigMap fails.
func
TestSchedulerCreationFromNonExistentConfigMap
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"configmap"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -191,8 +191,8 @@ func TestSchedulerCreationFromNonExistentConfigMap(t *testing.T) {
// TestSchedulerCreationInLegacyMode ensures that creation of the scheduler
// works fine when legacy mode is enabled.
func
TestSchedulerCreationInLegacyMode
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"configmap"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -232,8 +232,8 @@ func TestSchedulerCreationInLegacyMode(t *testing.T) {
}
func
TestUnschedulableNodes
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"unschedulable-nodes"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -488,7 +488,7 @@ func DoTestUnschedulableNodes(t *testing.T, cs clientset.Interface, ns *v1.Names
}
func
TestMultiScheduler
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
_
,
s
,
_
:=
framework
.
RunAMaster
(
nil
)
// TODO: Uncomment when fix #19254
// This seems to be a different issue - it still doesn't work.
// defer s.Close()
...
...
@@ -703,8 +703,8 @@ func createPod(client clientset.Interface, name string, scheduler string) *v1.Po
// This test will verify scheduler can work well regardless of whether kubelet is allocatable aware or not.
func
TestAllocatable
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"allocatable"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
test/integration/secrets/secrets_test.go
View file @
be392839
...
...
@@ -38,8 +38,8 @@ func deleteSecretOrErrorf(t *testing.T, c clientset.Interface, ns, name string)
// TestSecrets tests apiserver-side behavior of creation of secret objects and their use by pods.
func
TestSecrets
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/storageclasses/storage_classes_test.go
View file @
be392839
...
...
@@ -35,8 +35,8 @@ const provisionerPluginName = "kubernetes.io/mock-provisioner"
// TestStorageClasses tests apiserver-side behavior of creation of storage class objects and their use by pvcs.
func
TestStorageClasses
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
client
:=
clientset
.
NewForConfigOrDie
(
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
GroupVersion
:
&
api
.
Registry
.
GroupOrDie
(
v1
.
GroupName
)
.
GroupVersion
}})
...
...
test/integration/thirdparty/client-go_test.go
View file @
be392839
...
...
@@ -34,8 +34,8 @@ import (
)
func
TestClientGoThirdPartyResourceExample
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
closeFn
()
scheme
:=
runtime
.
NewScheme
()
if
err
:=
exampletprv1
.
AddToScheme
(
scheme
);
err
!=
nil
{
...
...
test/integration/thirdparty/thirdparty_test.go
View file @
be392839
...
...
@@ -42,8 +42,8 @@ func TestThirdPartyDiscovery(t *testing.T) {
group
:=
"company.com"
version
:=
"v1"
_
,
s
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
closeFn
()
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
api
.
Codecs
}}
client
:=
clientset
.
NewForConfigOrDie
(
clientConfig
)
...
...
@@ -91,8 +91,8 @@ func TestThirdPartyDiscovery(t *testing.T) {
// TODO these tests will eventually be runnable in a single test
func
TestThirdPartyDelete
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
closeFn
()
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
api
.
Codecs
}}
client
:=
clientset
.
NewForConfigOrDie
(
clientConfig
)
...
...
@@ -101,8 +101,8 @@ func TestThirdPartyDelete(t *testing.T) {
}
func
TestThirdPartyMultiple
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
framework
.
NewIntegrationTestMasterConfig
())
defer
closeFn
()
clientConfig
:=
&
restclient
.
Config
{
Host
:
s
.
URL
,
ContentConfig
:
restclient
.
ContentConfig
{
NegotiatedSerializer
:
api
.
Codecs
}}
client
:=
clientset
.
NewForConfigOrDie
(
clientConfig
)
...
...
test/integration/ttlcontroller/ttlcontroller_test.go
View file @
be392839
...
...
@@ -109,8 +109,8 @@ func waitForNodesWithTTLAnnotation(t *testing.T, nodeLister listers.NodeLister,
// Test whether ttlcontroller sets correct ttl annotations.
func
TestTTLAnnotations
(
t
*
testing
.
T
)
{
_
,
server
:=
framework
.
RunAMaster
(
nil
)
defer
server
.
Close
()
_
,
server
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
testClient
,
informers
:=
createClientAndInformers
(
t
,
server
)
nodeInformer
:=
informers
.
Core
()
.
V1
()
.
Nodes
()
...
...
test/integration/volume/attach_detach_test.go
View file @
be392839
...
...
@@ -77,8 +77,8 @@ func fakePodWithVol(namespace string) *v1.Pod {
// event is somehow missed by AttachDetach controller - it still
// gets cleaned up by Desired State of World populator.
func
TestPodDeletionWithDswp
(
t
*
testing
.
T
)
{
_
,
server
:=
framework
.
RunAMaster
(
nil
)
defer
server
.
Close
()
_
,
server
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
namespaceName
:=
"test-pod-deletion"
node
:=
&
v1
.
Node
{
...
...
@@ -225,8 +225,8 @@ func createAdClients(ns *v1.Namespace, t *testing.T, server *httptest.Server, sy
// event is somehow missed by AttachDetach controller - it still
// gets added by Desired State of World populator.
func
TestPodAddedByDswp
(
t
*
testing
.
T
)
{
_
,
server
:=
framework
.
RunAMaster
(
nil
)
defer
server
.
Close
()
_
,
server
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
namespaceName
:=
"test-pod-deletion"
node
:=
&
v1
.
Node
{
...
...
test/integration/volume/persistent_volumes_test.go
View file @
be392839
...
...
@@ -103,8 +103,8 @@ func testSleep() {
func
TestPersistentVolumeRecycler
(
t
*
testing
.
T
)
{
glog
.
V
(
2
)
.
Infof
(
"TestPersistentVolumeRecycler started"
)
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pv-recycler"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -158,8 +158,8 @@ func TestPersistentVolumeRecycler(t *testing.T) {
func
TestPersistentVolumeDeleter
(
t
*
testing
.
T
)
{
glog
.
V
(
2
)
.
Infof
(
"TestPersistentVolumeDeleter started"
)
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pv-deleter"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -218,8 +218,8 @@ func TestPersistentVolumeBindRace(t *testing.T) {
// Test a race binding many claims to a PV that is pre-bound to a specific
// PVC. Only this specific PVC should get bound.
glog
.
V
(
2
)
.
Infof
(
"TestPersistentVolumeBindRace started"
)
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pv-bind-race"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -290,8 +290,8 @@ func TestPersistentVolumeBindRace(t *testing.T) {
// TestPersistentVolumeClaimLabelSelector test binding using label selectors
func
TestPersistentVolumeClaimLabelSelector
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pvc-label-selector"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -371,8 +371,8 @@ func TestPersistentVolumeClaimLabelSelector(t *testing.T) {
// TestPersistentVolumeClaimLabelSelectorMatchExpressions test binding using
// MatchExpressions label selectors
func
TestPersistentVolumeClaimLabelSelectorMatchExpressions
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"pvc-match-expressions"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -471,8 +471,8 @@ func TestPersistentVolumeClaimLabelSelectorMatchExpressions(t *testing.T) {
// TestPersistentVolumeMultiPVs tests binding of one PVC to 100 PVs with
// different size.
func
TestPersistentVolumeMultiPVs
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"multi-pvs"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -561,8 +561,8 @@ func TestPersistentVolumeMultiPVs(t *testing.T) {
// TestPersistentVolumeMultiPVsPVCs tests binding of 100 PVC to 100 PVs.
// This test is configurable by KUBE_INTEGRATION_PV_* variables.
func
TestPersistentVolumeMultiPVsPVCs
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"multi-pvs-pvcs"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -722,8 +722,8 @@ func TestPersistentVolumeMultiPVsPVCs(t *testing.T) {
// TestPersistentVolumeControllerStartup tests startup of the controller.
// The controller should not unbind any volumes when it starts.
func
TestPersistentVolumeControllerStartup
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"controller-startup"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -851,8 +851,8 @@ func TestPersistentVolumeControllerStartup(t *testing.T) {
// TestPersistentVolumeProvisionMultiPVCs tests provisioning of many PVCs.
// This test is configurable by KUBE_INTEGRATION_PV_* variables.
func
TestPersistentVolumeProvisionMultiPVCs
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"provision-multi-pvs"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
@@ -946,8 +946,8 @@ func TestPersistentVolumeProvisionMultiPVCs(t *testing.T) {
// TestPersistentVolumeMultiPVsDiffAccessModes tests binding of one PVC to two
// PVs with different access modes.
func
TestPersistentVolumeMultiPVsDiffAccessModes
(
t
*
testing
.
T
)
{
_
,
s
:=
framework
.
RunAMaster
(
nil
)
defer
s
.
Close
()
_
,
s
,
closeFn
:=
framework
.
RunAMaster
(
nil
)
defer
closeFn
()
ns
:=
framework
.
CreateTestingNamespace
(
"multi-pvs-diff-access"
,
s
,
t
)
defer
framework
.
DeleteTestingNamespace
(
ns
,
s
,
t
)
...
...
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