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
db7af6c0
Commit
db7af6c0
authored
Aug 22, 2016
by
nikhiljindal
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixing/updating e2e tests
parent
18a8597a
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
196 additions
and
113 deletions
+196
-113
common.sh
federation/cluster/common.sh
+1
-1
federated-secret.go
test/e2e/federated-secret.go
+9
-6
federated-service.go
test/e2e/federated-service.go
+33
-22
federation-apiserver.go
test/e2e/federation-apiserver.go
+6
-28
federation-authn.go
test/e2e/federation-authn.go
+9
-6
federation-event.go
test/e2e/federation-event.go
+9
-6
federation-ingress.go
test/e2e/federation-ingress.go
+9
-6
federation-replicaset.go
test/e2e/federation-replicaset.go
+11
-7
federation-util.go
test/e2e/federation-util.go
+32
-23
framework.go
test/e2e/framework/framework.go
+77
-8
No files found.
federation/cluster/common.sh
View file @
db7af6c0
...
...
@@ -94,7 +94,7 @@ function create-federation-api-objects {
export
FEDERATION_API_NODEPORT
=
32111
export
FEDERATION_NAMESPACE
export
FEDERATION_NAME
=
"
${
FEDERATION_NAME
:-
federation
}
"
export
DNS_ZONE_NAME
=
"
${
DNS_ZONE_NAME
:-
federation
.example
}
"
# See https://tools.ietf.org/html/rfc2606
export
DNS_ZONE_NAME
=
"
${
DNS_ZONE_NAME
:-
federation
.example
.
}
"
# See https://tools.ietf.org/html/rfc2606
template
=
"go run
${
KUBE_ROOT
}
/federation/cluster/template.go"
...
...
test/e2e/federated-secret.go
View file @
db7af6c0
...
...
@@ -40,24 +40,27 @@ var _ = framework.KubeDescribe("Federation secrets [Feature:Federation]", func()
AfterEach
(
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
// Delete registered secrets.
// This is if a test failed, it should not affect other tests.
secretList
,
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
f
.
Namespace
.
Name
)
.
List
(
api
.
ListOptions
{})
secretList
,
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
ns
Name
)
.
List
(
api
.
ListOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
for
_
,
secret
:=
range
secretList
.
Items
{
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
f
.
Namespace
.
Name
)
.
Delete
(
secret
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
ns
Name
)
.
Delete
(
secret
.
Name
,
&
api
.
DeleteOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
})
It
(
"should be created and deleted successfully"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
secret
:=
createSecretOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Creation of secret %q in namespace %q succeeded. Deleting secret."
,
secret
.
Name
,
f
.
Namespace
.
Name
))
nsName
:=
f
.
FederationNamespace
.
Name
secret
:=
createSecretOrFail
(
f
.
FederationClientset_1_4
,
nsName
)
By
(
fmt
.
Sprintf
(
"Creation of secret %q in namespace %q succeeded. Deleting secret."
,
secret
.
Name
,
nsName
))
// Cleanup
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
f
.
Namespace
.
Name
)
.
Delete
(
secret
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Secrets
(
ns
Name
)
.
Delete
(
secret
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting secret %q in namespace %q"
,
secret
.
Name
,
secret
.
Namespace
)
By
(
fmt
.
Sprintf
(
"Deletion of secret %q in namespace %q succeeded."
,
secret
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deletion of secret %q in namespace %q succeeded."
,
secret
.
Name
,
ns
Name
))
})
})
...
...
test/e2e/federated-service.go
View file @
db7af6c0
...
...
@@ -76,23 +76,27 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It
(
"should succeed"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
service
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
By
(
fmt
.
Sprintf
(
"Creation of service %q in namespace %q succeeded. Deleting service."
,
service
.
Name
,
f
.
Namespace
.
Name
))
nsName
:=
f
.
FederationNamespace
.
Name
service
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
nsName
,
FederatedServiceName
)
By
(
fmt
.
Sprintf
(
"Creation of service %q in namespace %q succeeded. Deleting service."
,
service
.
Name
,
nsName
))
// Cleanup
err
:=
f
.
FederationClientset_1_4
.
Services
(
f
.
Namespace
.
Name
)
.
Delete
(
service
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Services
(
ns
Name
)
.
Delete
(
service
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting service %q in namespace %q"
,
service
.
Name
,
service
.
Namespace
)
By
(
fmt
.
Sprintf
(
"Deletion of service %q in namespace %q succeeded."
,
service
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deletion of service %q in namespace %q succeeded."
,
service
.
Name
,
ns
Name
))
})
It
(
"should create matching services in underlying clusters"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
service
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
nsName
:=
f
.
FederationNamespace
.
Name
service
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
nsName
,
FederatedServiceName
)
defer
func
()
{
// Cleanup
By
(
fmt
.
Sprintf
(
"Deleting service %q in namespace %q"
,
service
.
Name
,
f
.
Namespace
.
Name
))
err
:=
f
.
FederationClientset_1_4
.
Services
(
f
.
Namespace
.
Name
)
.
Delete
(
service
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting service %q in namespace %q"
,
service
.
Name
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Deleting service %q in namespace %q"
,
service
.
Name
,
ns
Name
))
err
:=
f
.
FederationClientset_1_4
.
Services
(
ns
Name
)
.
Delete
(
service
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting service %q in namespace %q"
,
service
.
Name
,
ns
Name
)
}()
waitForServiceShardsOrFail
(
f
.
Namespace
.
Name
,
service
,
clusters
)
waitForServiceShardsOrFail
(
ns
Name
,
service
,
clusters
)
})
})
...
...
@@ -104,17 +108,21 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
BeforeEach
(
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
createBackendPodsOrFail
(
clusters
,
f
.
Namespace
.
Name
,
FederatedServicePodName
)
service
=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
waitForServiceShardsOrFail
(
f
.
Namespace
.
Name
,
service
,
clusters
)
nsName
:=
f
.
FederationNamespace
.
Name
createBackendPodsOrFail
(
clusters
,
nsName
,
FederatedServicePodName
)
service
=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
nsName
,
FederatedServiceName
)
waitForServiceShardsOrFail
(
nsName
,
service
,
clusters
)
})
AfterEach
(
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
deleteBackendPodsOrFail
(
clusters
,
f
.
Namespace
.
Name
)
nsName
:=
f
.
FederationNamespace
.
Name
deleteBackendPodsOrFail
(
clusters
,
nsName
)
if
service
!=
nil
{
deleteServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
service
.
Name
)
deleteServiceOrFail
(
f
.
FederationClientset_1_4
,
ns
Name
,
service
.
Name
)
service
=
nil
}
else
{
By
(
"No service to delete. Service is nil"
)
...
...
@@ -124,12 +132,13 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It
(
"should be able to discover a federated service"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
svcDNSNames
:=
[]
string
{
FederatedServiceName
,
fmt
.
Sprintf
(
"%s.%s"
,
FederatedServiceName
,
f
.
Namespace
.
Name
),
fmt
.
Sprintf
(
"%s.%s.svc.cluster.local."
,
FederatedServiceName
,
f
.
Namespace
.
Name
),
fmt
.
Sprintf
(
"%s.%s.%s"
,
FederatedServiceName
,
f
.
Namespace
.
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s.%s.svc.cluster.local."
,
FederatedServiceName
,
f
.
Namespace
.
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s"
,
FederatedServiceName
,
ns
Name
),
fmt
.
Sprintf
(
"%s.%s.svc.cluster.local."
,
FederatedServiceName
,
ns
Name
),
fmt
.
Sprintf
(
"%s.%s.%s"
,
FederatedServiceName
,
ns
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s.%s.svc.cluster.local."
,
FederatedServiceName
,
ns
Name
,
federationName
),
}
// TODO(mml): This could be much faster. We can launch all the test
// pods, perhaps in the BeforeEach, and then just poll until we get
...
...
@@ -151,9 +160,10 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It
(
"should be able to discover a non-local federated service"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
svcDNSNames
:=
[]
string
{
fmt
.
Sprintf
(
"%s.%s.%s"
,
FederatedServiceName
,
f
.
Namespace
.
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s.%s.svc.cluster.local."
,
FederatedServiceName
,
f
.
Namespace
.
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s.%s"
,
FederatedServiceName
,
ns
Name
,
federationName
),
fmt
.
Sprintf
(
"%s.%s.%s.svc.cluster.local."
,
FederatedServiceName
,
ns
Name
,
federationName
),
}
for
i
,
name
:=
range
svcDNSNames
{
discoverService
(
f
,
name
,
true
,
"federated-service-e2e-discovery-pod-"
+
strconv
.
Itoa
(
i
))
...
...
@@ -166,10 +176,11 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It
(
"should never find DNS entries for a missing local service"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
localSvcDNSNames
:=
[]
string
{
FederatedServiceName
,
fmt
.
Sprintf
(
"%s.%s"
,
FederatedServiceName
,
f
.
Namespace
.
Name
),
fmt
.
Sprintf
(
"%s.%s.svc.cluster.local."
,
FederatedServiceName
,
f
.
Namespace
.
Name
),
fmt
.
Sprintf
(
"%s.%s"
,
FederatedServiceName
,
ns
Name
),
fmt
.
Sprintf
(
"%s.%s.svc.cluster.local."
,
FederatedServiceName
,
ns
Name
),
}
for
i
,
name
:=
range
localSvcDNSNames
{
discoverService
(
f
,
name
,
false
,
"federated-service-e2e-discovery-pod-"
+
strconv
.
Itoa
(
i
))
...
...
test/e2e/federation-apiserver.go
View file @
db7af6c0
...
...
@@ -89,33 +89,19 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
framework
.
SkipUnlessFederated
(
f
.
Client
)
})
It
(
"
Namespace lifecycle admission control should work as expected
"
,
func
()
{
It
(
"
should not be able to create resources if namespace does not exist
"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
// Ensure that a service can be created in default namespace.
svcName
:=
"mysvc"
clientSet
:=
f
.
FederationClientset_1_4
framework
.
Logf
(
"Creating service %s in default namespace"
,
svcName
)
if
_
,
err
:=
clientSet
.
Core
()
.
Services
(
api
.
NamespaceDefault
)
.
Create
(
newService
(
svcName
,
api
.
NamespaceDefault
));
err
!=
nil
{
framework
.
Failf
(
"Expected service to be created fine in default namespace, got error: %v"
,
err
)
}
// Creating a service in a non-existing namespace should fail.
svcNamespace
:=
"myns"
svcNamespace
:=
"federation-admission-test-ns"
svcName
:=
"myns"
clientset
:=
f
.
FederationClientset_1_4
framework
.
Logf
(
"Trying to create service %s in namespace %s, expect to get error"
,
svcName
,
svcNamespace
)
if
_
,
err
:=
client
S
et
.
Core
()
.
Services
(
svcNamespace
)
.
Create
(
newService
(
svcName
,
svcNamespace
));
err
==
nil
{
if
_
,
err
:=
client
s
et
.
Core
()
.
Services
(
svcNamespace
)
.
Create
(
newService
(
svcName
,
svcNamespace
));
err
==
nil
{
framework
.
Failf
(
"Expected to get an error while creating a service in a non-existing namespace"
)
}
// Verify that we can create the service after first creating the namespace.
framework
.
Logf
(
"Creating namespace %s"
,
svcNamespace
)
if
_
,
err
:=
clientSet
.
Core
()
.
Namespaces
()
.
Create
(
newNamespace
(
svcNamespace
));
err
!=
nil
{
framework
.
Failf
(
"unexpected error in creating namespace: %v"
,
err
)
}
framework
.
Logf
(
"Creating service %s in namespace %s"
,
svcName
,
svcNamespace
)
if
_
,
err
:=
clientSet
.
Core
()
.
Services
(
svcNamespace
)
.
Create
(
newService
(
svcName
,
svcNamespace
));
err
!=
nil
{
framework
.
Failf
(
"unexpected error in creating service after creating the namespace: %v"
,
err
)
}
// Note: We have other tests that verify that we can create resources in existing namespaces, so we dont test it again here.
})
})
})
...
...
@@ -136,14 +122,6 @@ func newService(name, namespace string) *v1.Service {
}
}
func
newNamespace
(
name
string
)
*
v1
.
Namespace
{
return
&
v1
.
Namespace
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
name
,
},
}
}
// Verify that the cluster is marked ready.
func
isReady
(
clusterName
string
,
clientset
*
federation_release_1_4
.
Clientset
)
error
{
return
wait
.
PollImmediate
(
time
.
Second
,
5
*
time
.
Minute
,
func
()
(
bool
,
error
)
{
...
...
test/e2e/federation-authn.go
View file @
db7af6c0
...
...
@@ -40,8 +40,9 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It
(
"should accept cluster resources when the client has right authentication credentials"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
svc
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
deleteServiceOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
,
svc
.
Name
)
nsName
:=
f
.
FederationNamespace
.
Name
svc
:=
createServiceOrFail
(
f
.
FederationClientset_1_4
,
nsName
,
FederatedServiceName
)
deleteServiceOrFail
(
f
.
FederationClientset_1_4
,
nsName
,
svc
.
Name
)
})
It
(
"should not accept cluster resources when the client has invalid authentication credentials"
,
func
()
{
...
...
@@ -57,10 +58,11 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
fcs
,
err
:=
invalidAuthFederationClientSet
(
contexts
[
0
]
.
User
)
framework
.
ExpectNoError
(
err
)
svc
,
err
:=
createService
(
fcs
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
nsName
:=
f
.
FederationNamespace
.
Name
svc
,
err
:=
createService
(
fcs
,
nsName
,
FederatedServiceName
)
Expect
(
errors
.
IsUnauthorized
(
err
))
.
To
(
BeTrue
())
if
err
==
nil
&&
svc
!=
nil
{
deleteServiceOrFail
(
fcs
,
f
.
Namespace
.
Name
,
svc
.
Name
)
deleteServiceOrFail
(
fcs
,
ns
Name
,
svc
.
Name
)
}
})
...
...
@@ -70,10 +72,11 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
fcs
,
err
:=
invalidAuthFederationClientSet
(
nil
)
ExpectNoError
(
err
)
svc
,
err
:=
createService
(
fcs
,
f
.
Namespace
.
Name
,
FederatedServiceName
)
nsName
:=
f
.
FederationNamespace
.
Name
svc
,
err
:=
createService
(
fcs
,
nsName
,
FederatedServiceName
)
Expect
(
errors
.
IsUnauthorized
(
err
))
.
To
(
BeTrue
())
if
err
==
nil
&&
svc
!=
nil
{
deleteServiceOrFail
(
fcs
,
f
.
Namespace
.
Name
,
svc
.
Name
)
deleteServiceOrFail
(
fcs
,
ns
Name
,
svc
.
Name
)
}
})
})
...
...
test/e2e/federation-event.go
View file @
db7af6c0
...
...
@@ -40,23 +40,26 @@ var _ = framework.KubeDescribe("Federation events [Feature:Federation]", func()
AfterEach
(
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
// Delete registered events.
eventList
,
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
f
.
Namespace
.
Name
)
.
List
(
api
.
ListOptions
{})
eventList
,
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
ns
Name
)
.
List
(
api
.
ListOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
for
_
,
event
:=
range
eventList
.
Items
{
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
f
.
Namespace
.
Name
)
.
Delete
(
event
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
ns
Name
)
.
Delete
(
event
.
Name
,
&
api
.
DeleteOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
})
It
(
"should be created and deleted successfully"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
event
:=
createEventOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Creation of event %q in namespace %q succeeded. Deleting event."
,
event
.
Name
,
f
.
Namespace
.
Name
))
nsName
:=
f
.
FederationNamespace
.
Name
event
:=
createEventOrFail
(
f
.
FederationClientset_1_4
,
nsName
)
By
(
fmt
.
Sprintf
(
"Creation of event %q in namespace %q succeeded. Deleting event."
,
event
.
Name
,
nsName
))
// Cleanup
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
f
.
Namespace
.
Name
)
.
Delete
(
event
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Core
()
.
Events
(
ns
Name
)
.
Delete
(
event
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting event %q in namespace %q"
,
event
.
Name
,
event
.
Namespace
)
By
(
fmt
.
Sprintf
(
"Deletion of event %q in namespace %q succeeded."
,
event
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deletion of event %q in namespace %q succeeded."
,
event
.
Name
,
ns
Name
))
})
})
...
...
test/e2e/federation-ingress.go
View file @
db7af6c0
...
...
@@ -42,23 +42,26 @@ var _ = framework.KubeDescribe("Federation ingresses [Feature:Federation]", func
AfterEach
(
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
nsName
:=
f
.
FederationNamespace
.
Name
// Delete registered ingresses.
ingressList
,
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
f
.
Namespace
.
Name
)
.
List
(
api
.
ListOptions
{})
ingressList
,
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
ns
Name
)
.
List
(
api
.
ListOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
for
_
,
ingress
:=
range
ingressList
.
Items
{
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
f
.
Namespace
.
Name
)
.
Delete
(
ingress
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
ns
Name
)
.
Delete
(
ingress
.
Name
,
&
api
.
DeleteOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
})
It
(
"should be created and deleted successfully"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
ingress
:=
createIngressOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Creation of ingress %q in namespace %q succeeded. Deleting ingress."
,
ingress
.
Name
,
f
.
Namespace
.
Name
))
nsName
:=
f
.
FederationNamespace
.
Name
ingress
:=
createIngressOrFail
(
f
.
FederationClientset_1_4
,
nsName
)
By
(
fmt
.
Sprintf
(
"Creation of ingress %q in namespace %q succeeded. Deleting ingress."
,
ingress
.
Name
,
nsName
))
// Cleanup
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
f
.
Namespace
.
Name
)
.
Delete
(
ingress
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
Ingresses
(
ns
Name
)
.
Delete
(
ingress
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting ingress %q in namespace %q"
,
ingress
.
Name
,
ingress
.
Namespace
)
By
(
fmt
.
Sprintf
(
"Deletion of ingress %q in namespace %q succeeded."
,
ingress
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deletion of ingress %q in namespace %q succeeded."
,
ingress
.
Name
,
ns
Name
))
})
})
...
...
test/e2e/federation-replicaset.go
View file @
db7af6c0
...
...
@@ -42,22 +42,25 @@ var _ = framework.KubeDescribe("Federation replicasets [Feature:Federation]", fu
framework
.
SkipUnlessFederated
(
f
.
Client
)
// Delete registered replicasets.
replicasetList
,
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
f
.
Namespace
.
Name
)
.
List
(
api
.
ListOptions
{})
nsName
:=
f
.
FederationNamespace
.
Name
replicasetList
,
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
nsName
)
.
List
(
api
.
ListOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
for
_
,
replicaset
:=
range
replicasetList
.
Items
{
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
f
.
Namespace
.
Name
)
.
Delete
(
replicaset
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
ns
Name
)
.
Delete
(
replicaset
.
Name
,
&
api
.
DeleteOptions
{})
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
})
It
(
"should be created and deleted successfully"
,
func
()
{
framework
.
SkipUnlessFederated
(
f
.
Client
)
replicaset
:=
createReplicaSetOrFail
(
f
.
FederationClientset_1_4
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Creation of replicaset %q in namespace %q succeeded. Deleting replicaset."
,
replicaset
.
Name
,
f
.
Namespace
.
Name
))
nsName
:=
f
.
FederationNamespace
.
Name
replicaset
:=
createReplicaSetOrFail
(
f
.
FederationClientset_1_4
,
nsName
)
By
(
fmt
.
Sprintf
(
"Creation of replicaset %q in namespace %q succeeded. Deleting replicaset."
,
replicaset
.
Name
,
nsName
))
// Cleanup
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
f
.
Namespace
.
Name
)
.
Delete
(
replicaset
.
Name
,
&
api
.
DeleteOptions
{})
err
:=
f
.
FederationClientset_1_4
.
Extensions
()
.
ReplicaSets
(
ns
Name
)
.
Delete
(
replicaset
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Error deleting replicaset %q in namespace %q"
,
replicaset
.
Name
,
replicaset
.
Namespace
)
By
(
fmt
.
Sprintf
(
"Deletion of replicaset %q in namespace %q succeeded."
,
replicaset
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deletion of replicaset %q in namespace %q succeeded."
,
replicaset
.
Name
,
ns
Name
))
})
})
...
...
@@ -72,7 +75,8 @@ func createReplicaSetOrFail(clientset *federation_release_1_4.Clientset, namespa
replicas
:=
int32
(
5
)
replicaset
:=
&
v1beta1
.
ReplicaSet
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
FederationReplicaSetName
,
Name
:
FederationReplicaSetName
,
Namespace
:
namespace
,
},
Spec
:
v1beta1
.
ReplicaSetSpec
{
Replicas
:
&
replicas
,
...
...
test/e2e/federation-util.go
View file @
db7af6c0
...
...
@@ -134,34 +134,41 @@ func createClientsetForCluster(c federationapi.Cluster, i int, userAgentName str
return
release_1_3
.
NewForConfigOrDie
(
restclient
.
AddUserAgent
(
cfg
,
userAgentName
))
}
// Creates the federation namespace in all underlying clusters.
func
createNamespaceInClusters
(
clusters
map
[
string
]
*
cluster
,
f
*
framework
.
Framework
)
{
nsName
:=
f
.
FederationNamespace
.
Name
for
name
,
c
:=
range
clusters
{
// The e2e Framework created the required namespace in one of the clusters, but we need to create it in all the others, if it doesn't yet exist.
if
_
,
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Get
(
f
.
Namespace
.
Name
);
errors
.
IsNotFound
(
err
)
{
// The e2e Framework created the required namespace in federation control plane, but we need to create it in all the others, if it doesn't yet exist.
// TODO(nikhiljindal): remove this once we have the namespace controller working as expected.
if
_
,
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Get
(
nsName
);
errors
.
IsNotFound
(
err
)
{
ns
:=
&
v1
.
Namespace
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
f
.
Namespace
.
Name
,
Name
:
ns
Name
,
},
}
_
,
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Create
(
ns
)
if
err
==
nil
{
c
.
namespaceCreated
=
true
}
framework
.
ExpectNoError
(
err
,
"Couldn't create the namespace %s in cluster %q"
,
f
.
Namespace
.
Name
,
name
)
framework
.
Logf
(
"Namespace %s created in cluster %q"
,
f
.
Namespace
.
Name
,
name
)
framework
.
ExpectNoError
(
err
,
"Couldn't create the namespace %s in cluster %q"
,
ns
Name
,
name
)
framework
.
Logf
(
"Namespace %s created in cluster %q"
,
ns
Name
,
name
)
}
else
if
err
!=
nil
{
framework
.
Logf
(
"Couldn't create the namespace %s in cluster %q: %v"
,
f
.
Namespace
.
Name
,
name
,
err
)
framework
.
Logf
(
"Couldn't create the namespace %s in cluster %q: %v"
,
ns
Name
,
name
,
err
)
}
}
}
// Unregisters the given clusters from federation control plane.
// Also deletes the federation namespace from each cluster.
func
unregisterClusters
(
clusters
map
[
string
]
*
cluster
,
f
*
framework
.
Framework
)
{
nsName
:=
f
.
FederationNamespace
.
Name
for
name
,
c
:=
range
clusters
{
if
c
.
namespaceCreated
{
if
_
,
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Get
(
f
.
Namespace
.
Name
);
!
errors
.
IsNotFound
(
err
)
{
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Delete
(
f
.
Namespace
.
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Couldn't delete the namespace %s in cluster %q: %v"
,
f
.
Namespace
.
Name
,
name
,
err
)
if
_
,
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Get
(
ns
Name
);
!
errors
.
IsNotFound
(
err
)
{
err
:=
c
.
Clientset
.
Core
()
.
Namespaces
()
.
Delete
(
ns
Name
,
&
api
.
DeleteOptions
{})
framework
.
ExpectNoError
(
err
,
"Couldn't delete the namespace %s in cluster %q: %v"
,
ns
Name
,
name
,
err
)
}
framework
.
Logf
(
"Namespace %s deleted in cluster %q"
,
f
.
Namespace
.
Name
,
name
)
framework
.
Logf
(
"Namespace %s deleted in cluster %q"
,
ns
Name
,
name
)
}
}
...
...
@@ -248,7 +255,8 @@ func createService(clientset *federation_release_1_4.Clientset, namespace, name
service
:=
&
v1
.
Service
{
ObjectMeta
:
v1
.
ObjectMeta
{
Name
:
name
,
Name
:
name
,
Namespace
:
namespace
,
},
Spec
:
v1
.
ServiceSpec
{
Selector
:
FederatedServiceLabels
,
...
...
@@ -281,7 +289,7 @@ func deleteServiceOrFail(clientset *federation_release_1_4.Clientset, namespace
framework
.
ExpectNoError
(
err
,
"Error deleting service %q from namespace %q"
,
serviceName
,
namespace
)
}
func
podExitCodeDetector
(
f
*
framework
.
Framework
,
name
string
,
code
int32
)
func
()
error
{
func
podExitCodeDetector
(
f
*
framework
.
Framework
,
name
,
namespace
string
,
code
int32
)
func
()
error
{
// If we ever get any container logs, stash them here.
logs
:=
""
...
...
@@ -296,7 +304,7 @@ func podExitCodeDetector(f *framework.Framework, name string, code int32) func()
}
return
func
()
error
{
pod
,
err
:=
f
.
Client
.
Pods
(
f
.
Namespace
.
Nam
e
)
.
Get
(
name
)
pod
,
err
:=
f
.
Client
.
Pods
(
namespac
e
)
.
Get
(
name
)
if
err
!=
nil
{
return
logerr
(
err
)
}
...
...
@@ -305,7 +313,7 @@ func podExitCodeDetector(f *framework.Framework, name string, code int32) func()
}
// Best effort attempt to grab pod logs for debugging
logs
,
err
=
framework
.
GetPodLogs
(
f
.
Client
,
f
.
Namespace
.
Nam
e
,
name
,
pod
.
Spec
.
Containers
[
0
]
.
Name
)
logs
,
err
=
framework
.
GetPodLogs
(
f
.
Client
,
namespac
e
,
name
,
pod
.
Spec
.
Containers
[
0
]
.
Name
)
if
err
!=
nil
{
framework
.
Logf
(
"Cannot fetch pod logs: %v"
,
err
)
}
...
...
@@ -342,23 +350,24 @@ func discoverService(f *framework.Framework, name string, exists bool, podName s
},
}
By
(
fmt
.
Sprintf
(
"Creating pod %q in namespace %q"
,
pod
.
Name
,
f
.
Namespace
.
Name
))
_
,
err
:=
f
.
Client
.
Pods
(
f
.
Namespace
.
Name
)
.
Create
(
pod
)
nsName
:=
f
.
FederationNamespace
.
Name
By
(
fmt
.
Sprintf
(
"Creating pod %q in namespace %q"
,
pod
.
Name
,
nsName
))
_
,
err
:=
f
.
Client
.
Pods
(
nsName
)
.
Create
(
pod
)
framework
.
ExpectNoError
(
err
,
"Trying to create pod to run %q"
,
command
)
By
(
fmt
.
Sprintf
(
"Successfully created pod %q in namespace %q"
,
pod
.
Name
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Successfully created pod %q in namespace %q"
,
pod
.
Name
,
ns
Name
))
defer
func
()
{
By
(
fmt
.
Sprintf
(
"Deleting pod %q from namespace %q"
,
podName
,
f
.
Namespace
.
Name
))
err
:=
f
.
Client
.
Pods
(
f
.
Namespace
.
Name
)
.
Delete
(
podName
,
api
.
NewDeleteOptions
(
0
))
framework
.
ExpectNoError
(
err
,
"Deleting pod %q from namespace %q"
,
podName
,
f
.
Namespace
.
Name
)
By
(
fmt
.
Sprintf
(
"Deleted pod %q from namespace %q"
,
podName
,
f
.
Namespace
.
Name
))
By
(
fmt
.
Sprintf
(
"Deleting pod %q from namespace %q"
,
podName
,
ns
Name
))
err
:=
f
.
Client
.
Pods
(
ns
Name
)
.
Delete
(
podName
,
api
.
NewDeleteOptions
(
0
))
framework
.
ExpectNoError
(
err
,
"Deleting pod %q from namespace %q"
,
podName
,
ns
Name
)
By
(
fmt
.
Sprintf
(
"Deleted pod %q from namespace %q"
,
podName
,
ns
Name
))
}()
if
exists
{
// TODO(mml): Eventually check the IP address is correct, too.
Eventually
(
podExitCodeDetector
(
f
,
podName
,
0
),
3
*
DNSTTL
,
time
.
Second
*
2
)
.
Eventually
(
podExitCodeDetector
(
f
,
podName
,
nsName
,
0
),
3
*
DNSTTL
,
time
.
Second
*
2
)
.
Should
(
BeNil
(),
"%q should exit 0, but it never did"
,
command
)
}
else
{
Eventually
(
podExitCodeDetector
(
f
,
podName
,
0
),
3
*
DNSTTL
,
time
.
Second
*
2
)
.
Eventually
(
podExitCodeDetector
(
f
,
podName
,
nsName
,
0
),
3
*
DNSTTL
,
time
.
Second
*
2
)
.
ShouldNot
(
BeNil
(),
"%q should eventually not exit 0, but it always did"
,
command
)
}
}
...
...
test/e2e/framework/framework.go
View file @
db7af6c0
...
...
@@ -33,6 +33,7 @@ import (
"k8s.io/kubernetes/pkg/api"
apierrs
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/release_1_2"
"k8s.io/kubernetes/pkg/client/clientset_generated/release_1_3"
"k8s.io/kubernetes/pkg/client/restclient"
...
...
@@ -62,8 +63,6 @@ type Framework struct {
Clientset_1_3
*
release_1_3
.
Clientset
StagingClient
*
release_1_4
.
Clientset
FederationClientset_1_4
*
federation_release_1_4
.
Clientset
Namespace
*
api
.
Namespace
// Every test has at least one namespace
namespacesToDelete
[]
*
api
.
Namespace
// Some tests have more than one.
NamespaceDeletionTimeout
time
.
Duration
...
...
@@ -88,6 +87,10 @@ type Framework struct {
// will this framework exercise a federated cluster as well
federated
bool
// Federation specific params. These are set only if federated = true.
FederationClientset_1_4
*
federation_release_1_4
.
Clientset
FederationNamespace
*
v1
.
Namespace
}
type
TestDataSummary
interface
{
...
...
@@ -198,16 +201,16 @@ func (f *Framework) BeforeEach() {
f
.
FederationClientset_1_4
,
err
=
LoadFederationClientset_1_4
()
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
if
f
.
FederationClientset_1_4
==
nil
{
By
(
"Creating a release 1.4 federation Clientset"
)
var
err
error
f
.
FederationClientset_1_4
,
err
=
LoadFederationClientset_1_4
()
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
}
By
(
"Waiting for federation-apiserver to be ready"
)
err
:=
WaitForFederationApiserverReady
(
f
.
FederationClientset_1_4
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"federation-apiserver is ready"
)
By
(
"Creating a federation namespace"
)
ns
,
err
:=
f
.
createFederationNamespace
(
f
.
BaseName
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
f
.
FederationNamespace
=
ns
By
(
fmt
.
Sprintf
(
"Created federation namespace %s"
,
ns
.
Name
))
}
By
(
"Building a namespace api object"
)
...
...
@@ -250,6 +253,41 @@ func (f *Framework) BeforeEach() {
}
}
func
(
f
*
Framework
)
deleteFederationNs
()
{
ns
:=
f
.
FederationNamespace
By
(
fmt
.
Sprintf
(
"Destroying federation namespace %q for this suite."
,
ns
.
Name
))
timeout
:=
5
*
time
.
Minute
if
f
.
NamespaceDeletionTimeout
!=
0
{
timeout
=
f
.
NamespaceDeletionTimeout
}
clientset
:=
f
.
FederationClientset_1_4
// First delete the namespace from federation apiserver.
if
err
:=
clientset
.
Core
()
.
Namespaces
()
.
Delete
(
ns
.
Name
,
&
api
.
DeleteOptions
{});
err
!=
nil
{
Failf
(
"Error while deleting federation namespace %s: %s"
,
ns
.
Name
,
err
)
}
// Verify that it got deleted.
err
:=
wait
.
PollImmediate
(
5
*
time
.
Second
,
timeout
,
func
()
(
bool
,
error
)
{
if
_
,
err
:=
clientset
.
Core
()
.
Namespaces
()
.
Get
(
ns
.
Name
);
err
!=
nil
{
if
apierrs
.
IsNotFound
(
err
)
{
return
true
,
nil
}
Logf
(
"Error while waiting for namespace to be terminated: %v"
,
err
)
return
false
,
nil
}
return
false
,
nil
})
if
err
!=
nil
{
if
!
apierrs
.
IsNotFound
(
err
)
{
Failf
(
"Couldn't delete ns %q: %s"
,
ns
.
Name
,
err
)
}
else
{
Logf
(
"Namespace %v was already deleted"
,
ns
.
Name
)
}
}
// TODO: Delete the namespace from underlying clusters.
}
// AfterEach deletes the namespace, after reading its events.
func
(
f
*
Framework
)
AfterEach
()
{
RemoveCleanupAction
(
f
.
cleanupHandle
)
...
...
@@ -274,12 +312,20 @@ func (f *Framework) AfterEach() {
}
}
f
.
namespacesToDelete
=
nil
// Delete the federation namespace.
// TODO(nikhiljindal): Uncomment this, once https://github.com/kubernetes/kubernetes/issues/31077 is fixed.
// In the meantime, we will have these extra namespaces in all clusters.
// Note: this will not cause any failure since we create a new namespace for each test in BeforeEach().
// f.deleteFederationNs()
}
else
{
Logf
(
"Found DeleteNamespace=false, skipping namespace deletion!"
)
}
// Paranoia-- prevent reuse!
f
.
Namespace
=
nil
f
.
FederationNamespace
=
nil
f
.
Client
=
nil
}()
...
...
@@ -375,6 +421,29 @@ func (f *Framework) CreateNamespace(baseName string, labels map[string]string) (
return
ns
,
err
}
func
(
f
*
Framework
)
createFederationNamespace
(
baseName
string
)
(
*
v1
.
Namespace
,
error
)
{
clientset
:=
f
.
FederationClientset_1_4
namespaceObj
:=
&
v1
.
Namespace
{
ObjectMeta
:
v1
.
ObjectMeta
{
GenerateName
:
fmt
.
Sprintf
(
"e2e-tests-%v-"
,
baseName
),
},
}
// Be robust about making the namespace creation call.
var
got
*
v1
.
Namespace
if
err
:=
wait
.
PollImmediate
(
Poll
,
SingleCallTimeout
,
func
()
(
bool
,
error
)
{
var
err
error
got
,
err
=
clientset
.
Core
()
.
Namespaces
()
.
Create
(
namespaceObj
)
if
err
!=
nil
{
Logf
(
"Unexpected error while creating namespace: %v"
,
err
)
return
false
,
nil
}
return
true
,
nil
});
err
!=
nil
{
return
nil
,
err
}
return
got
,
nil
}
// WaitForPodTerminated waits for the pod to be terminated with the given reason.
func
(
f
*
Framework
)
WaitForPodTerminated
(
podName
,
reason
string
)
error
{
return
waitForPodTerminatedInNamespace
(
f
.
Client
,
podName
,
reason
,
f
.
Namespace
.
Name
)
...
...
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