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  }