github.com/grahambrereton-form3/tilt@v0.10.18/internal/testutils/servicebuilder/servicebuilder.go (about) 1 package servicebuilder 2 3 import ( 4 "fmt" 5 "testing" 6 7 v1 "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/apimachinery/pkg/types" 10 11 "github.com/windmilleng/tilt/internal/k8s" 12 "github.com/windmilleng/tilt/pkg/model" 13 ) 14 15 type ServiceBuilder struct { 16 t testing.TB 17 manifest model.Manifest 18 19 uid types.UID 20 port int32 21 nodePort int32 22 ip string 23 } 24 25 func New(t testing.TB, manifest model.Manifest) ServiceBuilder { 26 return ServiceBuilder{ 27 t: t, 28 manifest: manifest, 29 } 30 } 31 32 func (sb ServiceBuilder) WithUID(uid types.UID) ServiceBuilder { 33 sb.uid = uid 34 return sb 35 } 36 37 func (sb ServiceBuilder) WithPort(port int32) ServiceBuilder { 38 sb.port = port 39 return sb 40 } 41 42 func (sb ServiceBuilder) WithNodePort(port int32) ServiceBuilder { 43 sb.nodePort = port 44 return sb 45 } 46 47 func (sb ServiceBuilder) WithIP(ip string) ServiceBuilder { 48 sb.ip = ip 49 return sb 50 } 51 52 func (sb ServiceBuilder) name() string { 53 return fmt.Sprintf("%s-service", sb.manifest.Name) 54 } 55 56 func (sb ServiceBuilder) getUid() types.UID { 57 if sb.uid != "" { 58 return sb.uid 59 } 60 return types.UID(fmt.Sprintf("%s-uid", sb.name())) 61 } 62 63 func (sb ServiceBuilder) Build() *v1.Service { 64 ports := []v1.ServicePort{} 65 if sb.port != 0 || sb.nodePort != 0 { 66 ports = append(ports, v1.ServicePort{Port: sb.port, NodePort: sb.nodePort}) 67 } 68 ingress := []v1.LoadBalancerIngress{} 69 if sb.ip != "" { 70 ingress = append(ingress, v1.LoadBalancerIngress{IP: sb.ip}) 71 } 72 73 return &v1.Service{ 74 ObjectMeta: metav1.ObjectMeta{ 75 Name: sb.name(), 76 Labels: k8s.NewTiltLabelMap(), 77 UID: sb.getUid(), 78 }, 79 Spec: v1.ServiceSpec{Ports: ports}, 80 Status: v1.ServiceStatus{ 81 LoadBalancer: v1.LoadBalancerStatus{Ingress: ingress}, 82 }, 83 } 84 }