@@ -735,6 +735,77 @@ func TestReconcile_LicenseUsesInternalHTTPURLWhenTLSEnabled(t *testing.T) {
735735 }
736736}
737737
738+ func TestReconcile_LicenseUsesHTTPSWhenTLSAndServicePort443 (t * testing.T ) {
739+ ensureGatewaySchemeRegistered (t )
740+ ctx := context .Background ()
741+
742+ licenseSecret := & corev1.Secret {
743+ ObjectMeta : metav1.ObjectMeta {Name : "test-license-tls-443-url-secret" , Namespace : "default" },
744+ Data : map [string ][]byte {
745+ coderv1alpha1 .DefaultLicenseSecretKey : []byte ("license-jwt-tls-443-url" ),
746+ },
747+ }
748+ if err := k8sClient .Create (ctx , licenseSecret ); err != nil {
749+ t .Fatalf ("create license secret: %v" , err )
750+ }
751+ t .Cleanup (func () {
752+ _ = k8sClient .Delete (ctx , licenseSecret )
753+ })
754+
755+ cp := & coderv1alpha1.CoderControlPlane {
756+ ObjectMeta : metav1.ObjectMeta {Name : "test-license-tls-443-url" , Namespace : "default" },
757+ Spec : coderv1alpha1.CoderControlPlaneSpec {
758+ ExtraEnv : []corev1.EnvVar {{
759+ Name : "CODER_PG_CONNECTION_URL" ,
760+ Value : "postgres://example/license-tls-443-url" ,
761+ }},
762+ Service : coderv1alpha1.ServiceSpec {Port : 443 },
763+ TLS : coderv1alpha1.TLSSpec {
764+ SecretNames : []string {"coder-internal-tls-443-secret" },
765+ },
766+ LicenseSecretRef : & coderv1alpha1.SecretKeySelector {Name : licenseSecret .Name },
767+ },
768+ }
769+ if err := k8sClient .Create (ctx , cp ); err != nil {
770+ t .Fatalf ("create test CoderControlPlane: %v" , err )
771+ }
772+ t .Cleanup (func () {
773+ _ = k8sClient .Delete (ctx , cp )
774+ })
775+
776+ provisioner := & fakeOperatorAccessProvisioner {token : "operator-token-license-tls-443-url" }
777+ uploader := & fakeLicenseUploader {}
778+ r := & controller.CoderControlPlaneReconciler {
779+ Client : k8sClient ,
780+ Scheme : scheme ,
781+ OperatorAccessProvisioner : provisioner ,
782+ LicenseUploader : uploader ,
783+ }
784+
785+ if _ , err := r .Reconcile (ctx , ctrl.Request {NamespacedName : types.NamespacedName {Name : cp .Name , Namespace : cp .Namespace }}); err != nil {
786+ t .Fatalf ("first reconcile control plane: %v" , err )
787+ }
788+ deployment := & appsv1.Deployment {}
789+ if err := k8sClient .Get (ctx , types.NamespacedName {Name : cp .Name , Namespace : cp .Namespace }, deployment ); err != nil {
790+ t .Fatalf ("get reconciled deployment: %v" , err )
791+ }
792+ deployment .Status .ReadyReplicas = 1
793+ deployment .Status .Replicas = 1
794+ if err := k8sClient .Status ().Update (ctx , deployment ); err != nil {
795+ t .Fatalf ("update deployment status: %v" , err )
796+ }
797+
798+ if _ , err := r .Reconcile (ctx , ctrl.Request {NamespacedName : types.NamespacedName {Name : cp .Name , Namespace : cp .Namespace }}); err != nil {
799+ t .Fatalf ("second reconcile control plane: %v" , err )
800+ }
801+ if len (uploader .calls ) != 1 {
802+ t .Fatalf ("expected one license upload call, got %d" , len (uploader .calls ))
803+ }
804+ if got := uploader .calls [0 ].coderURL ; got != "https://test-license-tls-443-url.default.svc.cluster.local:443" {
805+ t .Fatalf ("expected license upload URL %q, got %q" , "https://test-license-tls-443-url.default.svc.cluster.local:443" , got )
806+ }
807+ }
808+
738809func TestReconcile_LicenseReuploadsWhenBackendHasNoLicenses (t * testing.T ) {
739810 ensureGatewaySchemeRegistered (t )
740811 ctx := context .Background ()
0 commit comments