Add integration test for ensuring default solver service type is NodePort
Signed-off-by: Jake Sanders <i@am.so-aweso.me>
This commit is contained in:
parent
326783ca32
commit
f1ac6efade
@ -162,6 +162,238 @@ func TestEnsureService(t *testing.T) {
|
||||
}
|
||||
},
|
||||
},
|
||||
"http-01 ingress challenge without a service type should default to NodePort": {
|
||||
Challenge: &cmacme.Challenge{
|
||||
Spec: cmacme.ChallengeSpec{
|
||||
DNSName: "test.com",
|
||||
Solver: cmacme.ACMEChallengeSolver{
|
||||
HTTP01: &cmacme.ACMEChallengeSolverHTTP01{
|
||||
Ingress: &cmacme.ACMEChallengeSolverHTTP01Ingress{},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreFn: func(t *testing.T, s *solverFixture) {
|
||||
expectedService, err := buildService(s.Challenge)
|
||||
if err != nil {
|
||||
t.Errorf("expectedService returned an error whilst building test fixture: %v", err)
|
||||
}
|
||||
// create a reactor that fails the test if a service is created
|
||||
s.Builder.FakeKubeClient().PrependReactor("create", "services", func(action coretesting.Action) (handled bool, ret runtime.Object, err error) {
|
||||
service := action.(coretesting.CreateAction).GetObject().(*v1.Service)
|
||||
// clear service name as we don't know it yet in the expectedService
|
||||
service.Name = ""
|
||||
if !reflect.DeepEqual(service, expectedService) {
|
||||
t.Errorf("Expected %v to equal %v", service, expectedService)
|
||||
}
|
||||
return false, ret, nil
|
||||
})
|
||||
|
||||
s.Builder.Sync()
|
||||
},
|
||||
CheckFn: func(t *testing.T, s *solverFixture, args ...interface{}) {
|
||||
resp := args[0].(*v1.Service)
|
||||
err := args[1]
|
||||
if resp == nil && err == nil {
|
||||
t.Errorf("unexpected service = nil")
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
services, err := s.Solver.serviceLister.List(labels.NewSelector())
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error listing services: %v", err)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if len(services) != 1 {
|
||||
t.Errorf("unexpected %d services in lister: %+v", len(services), services)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(services[0], resp) {
|
||||
t.Errorf("Expected %v to equal %v", services[0], resp)
|
||||
}
|
||||
if services[0].Spec.Type != v1.ServiceTypeNodePort {
|
||||
t.Errorf("Blank service type should default to NodePort, but was %q", services[0].Spec.Type)
|
||||
}
|
||||
},
|
||||
Err: false,
|
||||
},
|
||||
"http-01 ingress challenge with a service type specified should end up on the generated solver service": {
|
||||
Challenge: &cmacme.Challenge{
|
||||
Spec: cmacme.ChallengeSpec{
|
||||
DNSName: "test.com",
|
||||
Solver: cmacme.ACMEChallengeSolver{
|
||||
HTTP01: &cmacme.ACMEChallengeSolverHTTP01{
|
||||
Ingress: &cmacme.ACMEChallengeSolverHTTP01Ingress{
|
||||
ServiceType: v1.ServiceTypeClusterIP,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreFn: func(t *testing.T, s *solverFixture) {
|
||||
expectedService, err := buildService(s.Challenge)
|
||||
if err != nil {
|
||||
t.Errorf("expectedService returned an error whilst building test fixture: %v", err)
|
||||
}
|
||||
// create a reactor that fails the test if a service is created
|
||||
s.Builder.FakeKubeClient().PrependReactor("create", "services", func(action coretesting.Action) (handled bool, ret runtime.Object, err error) {
|
||||
service := action.(coretesting.CreateAction).GetObject().(*v1.Service)
|
||||
// clear service name as we don't know it yet in the expectedService
|
||||
service.Name = ""
|
||||
if !reflect.DeepEqual(service, expectedService) {
|
||||
t.Errorf("Expected %v to equal %v", service, expectedService)
|
||||
}
|
||||
return false, ret, nil
|
||||
})
|
||||
|
||||
s.Builder.Sync()
|
||||
},
|
||||
CheckFn: func(t *testing.T, s *solverFixture, args ...interface{}) {
|
||||
resp := args[0].(*v1.Service)
|
||||
err := args[1]
|
||||
if resp == nil && err == nil {
|
||||
t.Errorf("unexpected service = nil")
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
services, err := s.Solver.serviceLister.List(labels.NewSelector())
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error listing services: %v", err)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if len(services) != 1 {
|
||||
t.Errorf("unexpected %d services in lister: %+v", len(services), services)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(services[0], resp) {
|
||||
t.Errorf("Expected %v to equal %v", services[0], resp)
|
||||
}
|
||||
if services[0].Spec.Type != v1.ServiceTypeClusterIP {
|
||||
t.Errorf("expected service type %q, but was %q", v1.ServiceTypeClusterIP, services[0].Spec.Type)
|
||||
}
|
||||
},
|
||||
Err: false,
|
||||
},
|
||||
"http-01 gateway httpRoute challenge without a service type should default to NodePort": {
|
||||
Challenge: &cmacme.Challenge{
|
||||
Spec: cmacme.ChallengeSpec{
|
||||
DNSName: "test.com",
|
||||
Solver: cmacme.ACMEChallengeSolver{
|
||||
HTTP01: &cmacme.ACMEChallengeSolverHTTP01{
|
||||
GatewayHTTPRoute: &cmacme.ACMEChallengeSolverHTTP01GatewayHTTPRoute{},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreFn: func(t *testing.T, s *solverFixture) {
|
||||
expectedService, err := buildService(s.Challenge)
|
||||
if err != nil {
|
||||
t.Errorf("expectedService returned an error whilst building test fixture: %v", err)
|
||||
}
|
||||
// create a reactor that fails the test if a service is created
|
||||
s.Builder.FakeKubeClient().PrependReactor("create", "services", func(action coretesting.Action) (handled bool, ret runtime.Object, err error) {
|
||||
service := action.(coretesting.CreateAction).GetObject().(*v1.Service)
|
||||
// clear service name as we don't know it yet in the expectedService
|
||||
service.Name = ""
|
||||
if !reflect.DeepEqual(service, expectedService) {
|
||||
t.Errorf("Expected %v to equal %v", service, expectedService)
|
||||
}
|
||||
return false, ret, nil
|
||||
})
|
||||
|
||||
s.Builder.Sync()
|
||||
},
|
||||
CheckFn: func(t *testing.T, s *solverFixture, args ...interface{}) {
|
||||
resp := args[0].(*v1.Service)
|
||||
err := args[1]
|
||||
if resp == nil && err == nil {
|
||||
t.Errorf("unexpected service = nil")
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
services, err := s.Solver.serviceLister.List(labels.NewSelector())
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error listing services: %v", err)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if len(services) != 1 {
|
||||
t.Errorf("unexpected %d services in lister: %+v", len(services), services)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(services[0], resp) {
|
||||
t.Errorf("Expected %v to equal %v", services[0], resp)
|
||||
}
|
||||
if services[0].Spec.Type != v1.ServiceTypeNodePort {
|
||||
t.Errorf("Blank service type should default to NodePort, but was \"%s\"", services[0].Spec.Type)
|
||||
}
|
||||
},
|
||||
Err: false,
|
||||
},
|
||||
"http-01 gateway httpRoute challenge with a service type specified should end up on the generated solver service": {
|
||||
Challenge: &cmacme.Challenge{
|
||||
Spec: cmacme.ChallengeSpec{
|
||||
DNSName: "test.com",
|
||||
Solver: cmacme.ACMEChallengeSolver{
|
||||
HTTP01: &cmacme.ACMEChallengeSolverHTTP01{
|
||||
GatewayHTTPRoute: &cmacme.ACMEChallengeSolverHTTP01GatewayHTTPRoute{
|
||||
ServiceType: v1.ServiceTypeClusterIP,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
PreFn: func(t *testing.T, s *solverFixture) {
|
||||
expectedService, err := buildService(s.Challenge)
|
||||
if err != nil {
|
||||
t.Errorf("expectedService returned an error whilst building test fixture: %v", err)
|
||||
}
|
||||
// create a reactor that fails the test if a service is created
|
||||
s.Builder.FakeKubeClient().PrependReactor("create", "services", func(action coretesting.Action) (handled bool, ret runtime.Object, err error) {
|
||||
service := action.(coretesting.CreateAction).GetObject().(*v1.Service)
|
||||
// clear service name as we don't know it yet in the expectedService
|
||||
service.Name = ""
|
||||
if !reflect.DeepEqual(service, expectedService) {
|
||||
t.Errorf("Expected %v to equal %v", service, expectedService)
|
||||
}
|
||||
return false, ret, nil
|
||||
})
|
||||
|
||||
s.Builder.Sync()
|
||||
},
|
||||
CheckFn: func(t *testing.T, s *solverFixture, args ...interface{}) {
|
||||
resp := args[0].(*v1.Service)
|
||||
err := args[1]
|
||||
if resp == nil && err == nil {
|
||||
t.Errorf("unexpected service = nil")
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
services, err := s.Solver.serviceLister.List(labels.NewSelector())
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error listing services: %v", err)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if len(services) != 1 {
|
||||
t.Errorf("unexpected %d services in lister: %+v", len(services), services)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
if !reflect.DeepEqual(services[0], resp) {
|
||||
t.Errorf("Expected %v to equal %v", services[0], resp)
|
||||
}
|
||||
if services[0].Spec.Type != v1.ServiceTypeClusterIP {
|
||||
t.Errorf("expected service type %q, but was %q", v1.ServiceTypeClusterIP, services[0].Spec.Type)
|
||||
}
|
||||
},
|
||||
Err: false,
|
||||
},
|
||||
}
|
||||
for name, test := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user