2015-08-27 08:06:36 +00:00
/ *
Copyright 2015 The Kubernetes Authors All rights reserved .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package e2e
import (
2015-09-28 09:56:40 +00:00
"fmt"
2015-08-27 08:06:36 +00:00
"strconv"
"time"
"k8s.io/kubernetes/pkg/api"
client "k8s.io/kubernetes/pkg/client/unversioned"
2015-11-10 06:28:45 +00:00
"k8s.io/kubernetes/pkg/util/intstr"
2016-04-07 17:21:31 +00:00
"k8s.io/kubernetes/test/e2e/framework"
2015-08-27 08:06:36 +00:00
. "github.com/onsi/ginkgo"
)
const (
2015-09-18 10:25:19 +00:00
dynamicConsumptionTimeInSeconds = 30
staticConsumptionTimeInSeconds = 3600
2016-02-01 19:42:03 +00:00
dynamicRequestSizeInMillicores = 20
2015-09-18 10:25:19 +00:00
dynamicRequestSizeInMegabytes = 100
2016-03-04 14:50:55 +00:00
dynamicRequestSizeCustomMetric = 10
2015-09-18 10:25:19 +00:00
port = 80
targetPort = 8080
timeoutRC = 120 * time . Second
2015-09-23 13:54:42 +00:00
startServiceTimeout = time . Minute
startServiceInterval = 5 * time . Second
2015-12-14 15:55:26 +00:00
resourceConsumerImage = "gcr.io/google_containers/resource_consumer:beta2"
2015-09-18 10:25:19 +00:00
rcIsNil = "ERROR: replicationController = nil"
2015-10-30 13:48:32 +00:00
deploymentIsNil = "ERROR: deployment = nil"
2016-03-09 00:27:13 +00:00
rsIsNil = "ERROR: replicaset = nil"
2015-10-30 13:48:32 +00:00
invalidKind = "ERROR: invalid workload kind for resource consumer"
2016-03-04 14:50:55 +00:00
customMetricName = "QPS"
2015-08-27 08:06:36 +00:00
)
/ *
2015-10-20 02:41:58 +00:00
ResourceConsumer is a tool for testing . It helps create specified usage of CPU or memory ( Warning : memory not supported )
2015-08-27 08:06:36 +00:00
typical use case :
rc . ConsumeCPU ( 600 )
// ... check your assumption here
rc . ConsumeCPU ( 300 )
// ... check your assumption here
* /
2015-09-07 10:26:23 +00:00
type ResourceConsumer struct {
2015-09-18 10:25:19 +00:00
name string
2015-10-30 13:48:32 +00:00
kind string
2016-04-07 17:21:31 +00:00
framework * framework . Framework
2015-09-18 10:25:19 +00:00
cpu chan int
mem chan int
2016-03-04 14:50:55 +00:00
customMetric chan int
2015-09-18 10:25:19 +00:00
stopCPU chan int
stopMem chan int
2016-03-04 14:50:55 +00:00
stopCustomMetric chan int
2015-09-18 10:25:19 +00:00
consumptionTimeInSeconds int
sleepTime time . Duration
requestSizeInMillicores int
requestSizeInMegabytes int
2016-03-04 14:50:55 +00:00
requestSizeCustomMetric int
2015-09-18 10:25:19 +00:00
}
2016-04-07 17:21:31 +00:00
func NewDynamicResourceConsumer ( name , kind string , replicas , initCPUTotal , initMemoryTotal , initCustomMetric int , cpuLimit , memLimit int64 , f * framework . Framework ) * ResourceConsumer {
2016-03-04 14:50:55 +00:00
return newResourceConsumer ( name , kind , replicas , initCPUTotal , initMemoryTotal , initCustomMetric , dynamicConsumptionTimeInSeconds ,
2016-04-07 17:21:31 +00:00
dynamicRequestSizeInMillicores , dynamicRequestSizeInMegabytes , dynamicRequestSizeCustomMetric , cpuLimit , memLimit , f )
2015-09-18 10:25:19 +00:00
}
2015-10-30 13:48:32 +00:00
// TODO this still defaults to replication controller
2016-04-07 17:21:31 +00:00
func NewStaticResourceConsumer ( name string , replicas , initCPUTotal , initMemoryTotal , initCustomMetric int , cpuLimit , memLimit int64 , f * framework . Framework ) * ResourceConsumer {
2016-03-04 14:50:55 +00:00
return newResourceConsumer ( name , kindRC , replicas , initCPUTotal , initMemoryTotal , initCustomMetric , staticConsumptionTimeInSeconds ,
2016-04-07 17:21:31 +00:00
initCPUTotal / replicas , initMemoryTotal / replicas , initCustomMetric / replicas , cpuLimit , memLimit , f )
2015-08-27 08:06:36 +00:00
}
2015-09-16 11:52:26 +00:00
/ *
NewResourceConsumer creates new ResourceConsumer
2015-10-14 18:45:32 +00:00
initCPUTotal argument is in millicores
initMemoryTotal argument is in megabytes
2015-09-17 09:09:17 +00:00
memLimit argument is in megabytes , memLimit is a maximum amount of memory that can be consumed by a single pod
cpuLimit argument is in millicores , cpuLimit is a maximum amount of cpu that can be consumed by a single pod
2015-09-16 11:52:26 +00:00
* /
2016-03-04 14:50:55 +00:00
func newResourceConsumer ( name , kind string , replicas , initCPUTotal , initMemoryTotal , initCustomMetric , consumptionTimeInSeconds , requestSizeInMillicores ,
2016-04-07 17:21:31 +00:00
requestSizeInMegabytes int , requestSizeCustomMetric int , cpuLimit , memLimit int64 , f * framework . Framework ) * ResourceConsumer {
2016-03-04 14:50:55 +00:00
2016-04-07 17:21:31 +00:00
runServiceAndWorkloadForResourceConsumer ( f . Client , f . Namespace . Name , name , kind , replicas , cpuLimit , memLimit )
2015-09-07 10:26:23 +00:00
rc := & ResourceConsumer {
2015-09-18 10:25:19 +00:00
name : name ,
2015-10-30 13:48:32 +00:00
kind : kind ,
2016-04-07 17:21:31 +00:00
framework : f ,
2015-09-18 10:25:19 +00:00
cpu : make ( chan int ) ,
mem : make ( chan int ) ,
2016-03-04 14:50:55 +00:00
customMetric : make ( chan int ) ,
2015-09-18 10:25:19 +00:00
stopCPU : make ( chan int ) ,
stopMem : make ( chan int ) ,
2016-03-04 14:50:55 +00:00
stopCustomMetric : make ( chan int ) ,
2015-09-18 10:25:19 +00:00
consumptionTimeInSeconds : consumptionTimeInSeconds ,
sleepTime : time . Duration ( consumptionTimeInSeconds ) * time . Second ,
requestSizeInMillicores : requestSizeInMillicores ,
requestSizeInMegabytes : requestSizeInMegabytes ,
2016-03-04 14:50:55 +00:00
requestSizeCustomMetric : requestSizeCustomMetric ,
2015-08-27 08:06:36 +00:00
}
go rc . makeConsumeCPURequests ( )
2015-10-14 18:45:32 +00:00
rc . ConsumeCPU ( initCPUTotal )
2015-09-16 11:52:26 +00:00
go rc . makeConsumeMemRequests ( )
2015-10-14 18:45:32 +00:00
rc . ConsumeMem ( initMemoryTotal )
2016-03-04 14:50:55 +00:00
go rc . makeConsumeCustomMetric ( )
rc . ConsumeCustomMetric ( initCustomMetric )
2015-08-27 08:06:36 +00:00
return rc
}
// ConsumeCPU consumes given number of CPU
2015-09-08 18:12:08 +00:00
func ( rc * ResourceConsumer ) ConsumeCPU ( millicores int ) {
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume %v millicores in total" , rc . name , millicores )
2015-09-16 11:52:26 +00:00
rc . cpu <- millicores
}
// ConsumeMem consumes given number of Mem
func ( rc * ResourceConsumer ) ConsumeMem ( megabytes int ) {
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume %v MB in total" , rc . name , megabytes )
2015-09-16 11:52:26 +00:00
rc . mem <- megabytes
2015-08-27 08:06:36 +00:00
}
2016-03-04 14:50:55 +00:00
// ConsumeMem consumes given number of custom metric
func ( rc * ResourceConsumer ) ConsumeCustomMetric ( amount int ) {
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume custom metric %v in total" , rc . name , amount )
2016-03-04 14:50:55 +00:00
rc . customMetric <- amount
}
2015-09-07 10:26:23 +00:00
func ( rc * ResourceConsumer ) makeConsumeCPURequests ( ) {
2015-09-25 12:52:32 +00:00
defer GinkgoRecover ( )
2015-08-27 08:06:36 +00:00
var count int
var rest int
2015-09-18 10:25:19 +00:00
sleepTime := time . Duration ( 0 )
2015-08-27 08:06:36 +00:00
for {
select {
2015-09-16 11:52:26 +00:00
case millicores := <- rc . cpu :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume %v millicores in total" , rc . name , millicores )
2015-09-18 10:25:19 +00:00
if rc . requestSizeInMillicores != 0 {
count = millicores / rc . requestSizeInMillicores
}
rest = millicores - count * rc . requestSizeInMillicores
2015-08-27 08:06:36 +00:00
case <- time . After ( sleepTime ) :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: sending %v requests to consume %v millicores each and 1 request to consume %v millicores" , rc . name , count , rc . requestSizeInMillicores , rest )
2015-08-27 08:06:36 +00:00
if count > 0 {
2015-09-18 10:25:19 +00:00
rc . sendConsumeCPURequests ( count , rc . requestSizeInMillicores , rc . consumptionTimeInSeconds )
2015-09-16 11:52:26 +00:00
}
if rest > 0 {
2015-09-18 10:25:19 +00:00
go rc . sendOneConsumeCPURequest ( rest , rc . consumptionTimeInSeconds )
2015-09-16 11:52:26 +00:00
}
2015-09-18 10:25:19 +00:00
sleepTime = rc . sleepTime
2015-09-16 11:52:26 +00:00
case <- rc . stopCPU :
return
}
}
}
func ( rc * ResourceConsumer ) makeConsumeMemRequests ( ) {
2015-09-25 12:52:32 +00:00
defer GinkgoRecover ( )
2015-09-16 11:52:26 +00:00
var count int
var rest int
2015-09-18 10:25:19 +00:00
sleepTime := time . Duration ( 0 )
2015-09-16 11:52:26 +00:00
for {
select {
case megabytes := <- rc . mem :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume %v MB in total" , rc . name , megabytes )
2015-09-18 10:25:19 +00:00
if rc . requestSizeInMegabytes != 0 {
count = megabytes / rc . requestSizeInMegabytes
}
rest = megabytes - count * rc . requestSizeInMegabytes
2015-09-16 11:52:26 +00:00
case <- time . After ( sleepTime ) :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: sending %v requests to consume %v MB each and 1 request to consume %v MB" , rc . name , count , rc . requestSizeInMegabytes , rest )
2015-09-16 11:52:26 +00:00
if count > 0 {
2015-09-18 10:25:19 +00:00
rc . sendConsumeMemRequests ( count , rc . requestSizeInMegabytes , rc . consumptionTimeInSeconds )
2015-08-27 08:06:36 +00:00
}
if rest > 0 {
2015-09-18 10:25:19 +00:00
go rc . sendOneConsumeMemRequest ( rest , rc . consumptionTimeInSeconds )
2015-08-27 08:06:36 +00:00
}
2015-09-18 10:25:19 +00:00
sleepTime = rc . sleepTime
2015-09-16 11:52:26 +00:00
case <- rc . stopMem :
2015-08-27 08:06:36 +00:00
return
}
}
}
2016-03-04 14:50:55 +00:00
func ( rc * ResourceConsumer ) makeConsumeCustomMetric ( ) {
defer GinkgoRecover ( )
var count int
var rest int
sleepTime := time . Duration ( 0 )
for {
select {
case total := <- rc . customMetric :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: consume custom metric %v in total" , rc . name , total )
2016-03-04 14:50:55 +00:00
if rc . requestSizeInMegabytes != 0 {
count = total / rc . requestSizeCustomMetric
}
rest = total - count * rc . requestSizeCustomMetric
case <- time . After ( sleepTime ) :
2016-04-07 17:21:31 +00:00
framework . Logf ( "RC %s: sending %v requests to consume %v custom metric each and 1 request to consume %v" ,
2016-03-04 14:50:55 +00:00
rc . name , count , rc . requestSizeCustomMetric , rest )
if count > 0 {
rc . sendConsumeCustomMetric ( count , rc . requestSizeCustomMetric , rc . consumptionTimeInSeconds )
}
if rest > 0 {
go rc . sendOneConsumeCustomMetric ( rest , rc . consumptionTimeInSeconds )
}
sleepTime = rc . sleepTime
case <- rc . stopCustomMetric :
return
}
}
}
2015-09-16 11:52:26 +00:00
func ( rc * ResourceConsumer ) sendConsumeCPURequests ( requests , millicores , durationSec int ) {
2015-08-27 08:06:36 +00:00
for i := 0 ; i < requests ; i ++ {
2015-09-16 11:52:26 +00:00
go rc . sendOneConsumeCPURequest ( millicores , durationSec )
2015-08-27 08:06:36 +00:00
}
}
2015-09-16 11:52:26 +00:00
func ( rc * ResourceConsumer ) sendConsumeMemRequests ( requests , megabytes , durationSec int ) {
for i := 0 ; i < requests ; i ++ {
go rc . sendOneConsumeMemRequest ( megabytes , durationSec )
}
}
2016-03-04 14:50:55 +00:00
func ( rc * ResourceConsumer ) sendConsumeCustomMetric ( requests , delta , durationSec int ) {
for i := 0 ; i < requests ; i ++ {
go rc . sendOneConsumeCustomMetric ( delta , durationSec )
}
}
2015-09-16 11:52:26 +00:00
// sendOneConsumeCPURequest sends POST request for cpu consumption
func ( rc * ResourceConsumer ) sendOneConsumeCPURequest ( millicores int , durationSec int ) {
defer GinkgoRecover ( )
2016-04-07 17:21:31 +00:00
proxyRequest , err := framework . GetServicesProxyRequest ( rc . framework . Client , rc . framework . Client . Post ( ) )
framework . ExpectNoError ( err )
2015-11-18 03:42:03 +00:00
_ , err = proxyRequest . Namespace ( rc . framework . Namespace . Name ) .
2015-08-27 08:06:36 +00:00
Name ( rc . name ) .
Suffix ( "ConsumeCPU" ) .
2015-09-08 18:12:08 +00:00
Param ( "millicores" , strconv . Itoa ( millicores ) ) .
2015-08-27 08:06:36 +00:00
Param ( "durationSec" , strconv . Itoa ( durationSec ) ) .
2015-09-25 12:52:32 +00:00
DoRaw ( )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2015-08-27 08:06:36 +00:00
}
2015-09-16 11:52:26 +00:00
// sendOneConsumeMemRequest sends POST request for memory consumption
func ( rc * ResourceConsumer ) sendOneConsumeMemRequest ( megabytes int , durationSec int ) {
defer GinkgoRecover ( )
2016-04-07 17:21:31 +00:00
proxyRequest , err := framework . GetServicesProxyRequest ( rc . framework . Client , rc . framework . Client . Post ( ) )
framework . ExpectNoError ( err )
2015-11-18 03:42:03 +00:00
_ , err = proxyRequest . Namespace ( rc . framework . Namespace . Name ) .
2015-09-16 11:52:26 +00:00
Name ( rc . name ) .
Suffix ( "ConsumeMem" ) .
Param ( "megabytes" , strconv . Itoa ( megabytes ) ) .
Param ( "durationSec" , strconv . Itoa ( durationSec ) ) .
2015-09-25 12:52:32 +00:00
DoRaw ( )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2015-09-16 11:52:26 +00:00
}
2016-03-04 14:50:55 +00:00
// sendOneConsumeCustomMetric sends POST request for custom metric consumption
func ( rc * ResourceConsumer ) sendOneConsumeCustomMetric ( delta int , durationSec int ) {
defer GinkgoRecover ( )
2016-04-07 17:21:31 +00:00
proxyRequest , err := framework . GetServicesProxyRequest ( rc . framework . Client , rc . framework . Client . Post ( ) )
framework . ExpectNoError ( err )
2016-03-04 14:50:55 +00:00
_ , err = proxyRequest . Namespace ( rc . framework . Namespace . Name ) .
Name ( rc . name ) .
Suffix ( "BumpMetric" ) .
Param ( "metric" , customMetricName ) .
Param ( "delta" , strconv . Itoa ( delta ) ) .
Param ( "durationSec" , strconv . Itoa ( durationSec ) ) .
DoRaw ( )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2016-03-04 14:50:55 +00:00
}
2015-09-07 10:26:23 +00:00
func ( rc * ResourceConsumer ) GetReplicas ( ) int {
2015-10-30 13:48:32 +00:00
switch rc . kind {
case kindRC :
replicationController , err := rc . framework . Client . ReplicationControllers ( rc . framework . Namespace . Name ) . Get ( rc . name )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2015-10-30 13:48:32 +00:00
if replicationController == nil {
2016-04-07 17:21:31 +00:00
framework . Failf ( rcIsNil )
2015-10-30 13:48:32 +00:00
}
return replicationController . Status . Replicas
case kindDeployment :
deployment , err := rc . framework . Client . Deployments ( rc . framework . Namespace . Name ) . Get ( rc . name )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2015-10-30 13:48:32 +00:00
if deployment == nil {
2016-04-07 17:21:31 +00:00
framework . Failf ( deploymentIsNil )
2015-10-30 13:48:32 +00:00
}
return deployment . Status . Replicas
2016-03-09 00:27:13 +00:00
case kindReplicaSet :
rs , err := rc . framework . Client . ReplicaSets ( rc . framework . Namespace . Name ) . Get ( rc . name )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2016-03-09 00:27:13 +00:00
if rs == nil {
2016-04-07 17:21:31 +00:00
framework . Failf ( rsIsNil )
2016-03-09 00:27:13 +00:00
}
return rs . Status . Replicas
2015-10-30 13:48:32 +00:00
default :
2016-04-07 17:21:31 +00:00
framework . Failf ( invalidKind )
2015-09-07 10:26:23 +00:00
}
2015-10-30 13:48:32 +00:00
return 0
2015-09-07 10:26:23 +00:00
}
func ( rc * ResourceConsumer ) WaitForReplicas ( desiredReplicas int ) {
timeout := 10 * time . Minute
for start := time . Now ( ) ; time . Since ( start ) < timeout ; time . Sleep ( 20 * time . Second ) {
if desiredReplicas == rc . GetReplicas ( ) {
2016-04-07 17:21:31 +00:00
framework . Logf ( "%s: current replicas number is equal to desired replicas number: %d" , rc . kind , desiredReplicas )
2015-09-07 10:26:23 +00:00
return
} else {
2016-04-07 17:21:31 +00:00
framework . Logf ( "%s: current replicas number %d waiting to be %d" , rc . kind , rc . GetReplicas ( ) , desiredReplicas )
2015-09-07 10:26:23 +00:00
}
}
2016-04-07 17:21:31 +00:00
framework . Failf ( "timeout waiting %v for pods size to be %d" , timeout , desiredReplicas )
2015-09-07 10:26:23 +00:00
}
2015-10-27 08:44:05 +00:00
func ( rc * ResourceConsumer ) EnsureDesiredReplicas ( desiredReplicas int , timeout time . Duration ) {
for start := time . Now ( ) ; time . Since ( start ) < timeout ; time . Sleep ( 10 * time . Second ) {
actual := rc . GetReplicas ( )
if desiredReplicas != actual {
2016-04-07 17:21:31 +00:00
framework . Failf ( "Number of replicas has changed: expected %v, got %v" , desiredReplicas , actual )
2015-10-27 08:44:05 +00:00
}
2016-04-07 17:21:31 +00:00
framework . Logf ( "Number of replicas is as expected" )
2015-10-27 08:44:05 +00:00
}
2016-04-07 17:21:31 +00:00
framework . Logf ( "Number of replicas was stable over %v" , timeout )
2015-10-27 08:44:05 +00:00
}
2015-09-07 10:26:23 +00:00
func ( rc * ResourceConsumer ) CleanUp ( ) {
2015-09-28 09:56:40 +00:00
By ( fmt . Sprintf ( "Removing consuming RC %s" , rc . name ) )
2015-09-16 11:52:26 +00:00
rc . stopCPU <- 0
rc . stopMem <- 0
2016-03-04 14:50:55 +00:00
rc . stopCustomMetric <- 0
2015-09-24 09:09:40 +00:00
// Wait some time to ensure all child goroutines are finished.
time . Sleep ( 10 * time . Second )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( framework . DeleteRC ( rc . framework . Client , rc . framework . Namespace . Name , rc . name ) )
framework . ExpectNoError ( rc . framework . Client . Services ( rc . framework . Namespace . Name ) . Delete ( rc . name ) )
2015-08-27 08:06:36 +00:00
}
2015-10-30 13:48:32 +00:00
func runServiceAndWorkloadForResourceConsumer ( c * client . Client , ns , name , kind string , replicas int , cpuLimitMillis , memLimitMb int64 ) {
By ( fmt . Sprintf ( "Running consuming RC %s via %s with %v replicas" , name , kind , replicas ) )
2015-09-07 10:26:23 +00:00
_ , err := c . Services ( ns ) . Create ( & api . Service {
2015-08-27 08:06:36 +00:00
ObjectMeta : api . ObjectMeta {
Name : name ,
} ,
Spec : api . ServiceSpec {
Ports : [ ] api . ServicePort { {
Port : port ,
2015-11-10 06:28:45 +00:00
TargetPort : intstr . FromInt ( targetPort ) ,
2015-08-27 08:06:36 +00:00
} } ,
Selector : map [ string ] string {
"name" : name ,
} ,
} ,
} )
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( err )
2015-10-30 13:48:32 +00:00
2016-04-07 17:21:31 +00:00
rcConfig := framework . RCConfig {
2015-09-29 13:52:30 +00:00
Client : c ,
2015-10-06 08:24:35 +00:00
Image : resourceConsumerImage ,
2015-09-29 13:52:30 +00:00
Name : name ,
Namespace : ns ,
Timeout : timeoutRC ,
Replicas : replicas ,
CpuRequest : cpuLimitMillis ,
CpuLimit : cpuLimitMillis ,
MemRequest : memLimitMb * 1024 * 1024 , // MemLimit is in bytes
MemLimit : memLimitMb * 1024 * 1024 ,
2015-08-27 08:06:36 +00:00
}
2015-10-30 13:48:32 +00:00
switch kind {
case kindRC :
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( framework . RunRC ( rcConfig ) )
2015-10-30 13:48:32 +00:00
break
case kindDeployment :
2016-04-07 17:21:31 +00:00
dpConfig := framework . DeploymentConfig {
2016-04-15 19:18:27 +00:00
RCConfig : rcConfig ,
2015-10-30 13:48:32 +00:00
}
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( framework . RunDeployment ( dpConfig ) )
2015-10-30 13:48:32 +00:00
break
2016-03-09 00:27:13 +00:00
case kindReplicaSet :
2016-04-07 17:21:31 +00:00
rsConfig := framework . ReplicaSetConfig {
2016-04-15 19:18:27 +00:00
RCConfig : rcConfig ,
2016-03-09 00:27:13 +00:00
}
2016-04-07 17:21:31 +00:00
framework . ExpectNoError ( framework . RunReplicaSet ( rsConfig ) )
2016-03-09 00:27:13 +00:00
break
2015-10-30 13:48:32 +00:00
default :
2016-04-07 17:21:31 +00:00
framework . Failf ( invalidKind )
2015-10-30 13:48:32 +00:00
}
2015-09-25 08:16:03 +00:00
// Make sure endpoints are propagated.
// TODO(piosz): replace sleep with endpoints watch.
time . Sleep ( 10 * time . Second )
2015-08-27 08:06:36 +00:00
}