@ -38,10 +38,7 @@ import (
func TestLoadBalancerClass ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -220,10 +217,7 @@ func TestLoadBalancerClass(t *testing.T) {
func TestTailnetTargetFQDNAnnotation ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
tailnetTargetFQDN := "foo.bar.ts.net."
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
@ -333,10 +327,7 @@ func TestTailnetTargetFQDNAnnotation(t *testing.T) {
func TestTailnetTargetIPAnnotation ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
tailnetTargetIP := "100.66.66.66"
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
@ -431,12 +422,12 @@ func TestTailnetTargetIPAnnotation(t *testing.T) {
} )
expectReconciled ( t , sr , "default" , "test" )
// // synchronous StatefulSet deletion triggers a requeue. But, the StatefulSet
// // didn't create any child resources since this is all faked, so the
// // deletion goes through immediately.
// synchronous StatefulSet deletion triggers a requeue. But, the StatefulSet
// didn't create any child resources since this is all faked, so the
// deletion goes through immediately.
expectReconciled ( t , sr , "default" , "test" )
expectMissing [ appsv1 . StatefulSet ] ( t , fc , "operator-ns" , shortName )
// // The deletion triggers another reconcile, to finish the cleanup.
// The deletion triggers another reconcile, to finish the cleanup.
expectReconciled ( t , sr , "default" , "test" )
expectMissing [ appsv1 . StatefulSet ] ( t , fc , "operator-ns" , shortName )
expectMissing [ corev1 . Service ] ( t , fc , "operator-ns" , shortName )
@ -446,10 +437,7 @@ func TestTailnetTargetIPAnnotation(t *testing.T) {
func TestTailnetTargetIPAnnotation_IPCouldNotBeParsed ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -517,10 +505,7 @@ func TestTailnetTargetIPAnnotation_IPCouldNotBeParsed(t *testing.T) {
func TestTailnetTargetIPAnnotation_InvalidIP ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -588,10 +573,7 @@ func TestTailnetTargetIPAnnotation_InvalidIP(t *testing.T) {
func TestAnnotations ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -695,10 +677,7 @@ func TestAnnotations(t *testing.T) {
func TestAnnotationIntoLB ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -828,10 +807,7 @@ func TestAnnotationIntoLB(t *testing.T) {
func TestLBIntoAnnotation ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -966,10 +942,7 @@ func TestLBIntoAnnotation(t *testing.T) {
func TestCustomHostname ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -1078,10 +1051,7 @@ func TestCustomHostname(t *testing.T) {
func TestCustomPriorityClassName ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -1333,10 +1303,7 @@ func TestProxyClassForService(t *testing.T) {
WithStatusSubresource ( pc ) .
Build ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -1425,10 +1392,7 @@ func TestProxyClassForService(t *testing.T) {
func TestDefaultLoadBalancer ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -1482,10 +1446,7 @@ func TestDefaultLoadBalancer(t *testing.T) {
func TestProxyFirewallMode ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -1563,14 +1524,70 @@ func Test_isMagicDNSName(t *testing.T) {
}
}
func Test_HeadlessService ( t * testing . T ) {
fc := fake . NewFakeClient ( )
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
ssr : & tailscaleSTSReconciler {
Client : fc ,
} ,
logger : zl . Sugar ( ) ,
clock : clock ,
recorder : record . NewFakeRecorder ( 100 ) ,
}
mustCreate ( t , fc , & corev1 . Service {
ObjectMeta : metav1 . ObjectMeta {
Name : "test" ,
Namespace : "default" ,
UID : types . UID ( "1234-UID" ) ,
Annotations : map [ string ] string {
AnnotationExpose : "true" ,
} ,
} ,
Spec : corev1 . ServiceSpec {
ClusterIP : "None" ,
Type : corev1 . ServiceTypeClusterIP ,
} ,
} )
expectReconciled ( t , sr , "default" , "test" )
t0 := conditionTime ( clock )
want := & corev1 . Service {
ObjectMeta : metav1 . ObjectMeta {
Name : "test" ,
Namespace : "default" ,
UID : types . UID ( "1234-UID" ) ,
Annotations : map [ string ] string {
AnnotationExpose : "true" ,
} ,
} ,
Spec : corev1 . ServiceSpec {
ClusterIP : "None" ,
Type : corev1 . ServiceTypeClusterIP ,
} ,
Status : corev1 . ServiceStatus {
Conditions : [ ] metav1 . Condition { {
Type : string ( tsapi . ProxyReady ) ,
Status : metav1 . ConditionFalse ,
LastTransitionTime : t0 ,
Reason : reasonProxyInvalid ,
Message : ` unable to provision proxy resources: invalid Service: headless Services are not supported. ` ,
} } ,
} ,
}
expectEqual ( t , fc , want )
}
func Test_serviceHandlerForIngress ( t * testing . T ) {
const tailscaleIngressClassName = "tailscale"
fc := fake . NewFakeClient ( )
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
// 1. An event on a headless Service for a tailscale Ingress results in
// the Ingress being reconciled.
@ -1700,10 +1717,7 @@ func Test_serviceHandlerForIngress(t *testing.T) {
func Test_serviceHandlerForIngress_multipleIngressClasses ( t * testing . T ) {
fc := fake . NewFakeClient ( )
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
svc := & corev1 . Service {
ObjectMeta : metav1 . ObjectMeta { Name : "backend" , Namespace : "default" } ,
@ -1735,10 +1749,7 @@ func Test_serviceHandlerForIngress_multipleIngressClasses(t *testing.T) {
}
func Test_clusterDomainFromResolverConf ( t * testing . T ) {
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
tests := [ ] struct {
name string
conf * resolvconffile . Config
@ -1806,10 +1817,7 @@ func Test_clusterDomainFromResolverConf(t *testing.T) {
func Test_authKeyRemoval ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
// 1. A new Service that should be exposed via Tailscale gets created, a Secret with a config that contains auth
// key is generated.
@ -1874,10 +1882,7 @@ func Test_authKeyRemoval(t *testing.T) {
func Test_externalNameService ( t * testing . T ) {
fc := fake . NewFakeClient ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
// 1. A External name Service that should be exposed via Tailscale gets
// created.
@ -1974,10 +1979,7 @@ func Test_metricsResourceCreation(t *testing.T) {
WithStatusSubresource ( pc ) .
Build ( )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,
@ -2048,10 +2050,7 @@ func TestIgnorePGService(t *testing.T) {
_ , _ , fc , _ , _ := setupServiceTest ( t )
ft := & fakeTSClient { }
zl , err := zap . NewDevelopment ( )
if err != nil {
t . Fatal ( err )
}
zl := zap . Must ( zap . NewDevelopment ( ) )
clock := tstest . NewClock ( tstest . ClockOpts { } )
sr := & ServiceReconciler {
Client : fc ,