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:
Jake Sanders 2021-08-19 14:52:23 +01:00
parent 326783ca32
commit f1ac6efade
No known key found for this signature in database
GPG Key ID: 7E708D7933B84690

View File

@ -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) {