@@ -341,6 +341,7 @@ mod tests {
341341 product_image_selection:: ResolvedProductImage ,
342342 resources:: { CpuLimits , MemoryLimits , PvcConfig , Resources } ,
343343 } ,
344+ crd:: listener:: { self } ,
344345 deep_merger:: ObjectOverrides ,
345346 k8s_openapi:: {
346347 api:: core:: v1:: {
@@ -364,8 +365,8 @@ mod tests {
364365 use crate :: {
365366 built_info,
366367 controller:: {
367- ContextNames , DereferencedObjects , ValidatedCluster , ValidatedLogging ,
368- ValidatedOpenSearchConfig ,
368+ ContextNames , DereferencedObjects , ValidatedCluster , ValidatedDiscoveryEndpoint ,
369+ ValidatedLogging , ValidatedOpenSearchConfig ,
369370 } ,
370371 crd:: { NodeRoles , OpenSearchKeystoreKey , v1alpha1} ,
371372 framework:: {
@@ -375,9 +376,10 @@ mod tests {
375376 } ,
376377 role_utils:: { GenericProductSpecificCommonConfig , RoleGroupConfig } ,
377378 types:: {
379+ common:: Port ,
378380 kubernetes:: {
379- ConfigMapName , ListenerClassName , NamespaceName , SecretClassName , SecretKey ,
380- SecretName ,
381+ ConfigMapName , Hostname , ListenerClassName , NamespaceName , SecretClassName ,
382+ SecretKey , SecretName ,
381383 } ,
382384 operator:: {
383385 ClusterName , ControllerName , OperatorName , ProductName , ProductVersion ,
@@ -389,11 +391,7 @@ mod tests {
389391
390392 #[ test]
391393 fn test_validate_ok ( ) {
392- let dereferenced_objects = DereferencedObjects {
393- maybe_discovery_service_listener : None ,
394- } ;
395-
396- let result = validate ( & context_names ( ) , & cluster ( ) , & dereferenced_objects) ;
394+ let result = validate ( & context_names ( ) , & cluster ( ) , & dereferenced_objects ( ) ) ;
397395
398396 assert_eq ! (
399397 Some ( ValidatedCluster :: new(
@@ -610,7 +608,10 @@ mod tests {
610608 key: SecretKey :: from_str_unsafe( "my-keystore-file" )
611609 }
612610 } ] ,
613- None
611+ Some ( ValidatedDiscoveryEndpoint {
612+ hostname: Hostname :: from_str_unsafe( "my-opensearch.default.svc.cluster.local" ) ,
613+ port: Port ( 9200 ) ,
614+ } )
614615 ) ) ,
615616 result. ok( )
616617 ) ;
@@ -620,6 +621,7 @@ mod tests {
620621 fn test_validate_err_get_cluster_name ( ) {
621622 test_validate_err (
622623 |cluster| cluster. metadata . name = None ,
624+ |_| ( ) ,
623625 ErrorDiscriminants :: GetClusterName ,
624626 ) ;
625627 }
@@ -628,6 +630,7 @@ mod tests {
628630 fn test_validate_err_get_cluster_namespace ( ) {
629631 test_validate_err (
630632 |cluster| cluster. metadata . namespace = None ,
633+ |_| ( ) ,
631634 ErrorDiscriminants :: GetClusterNamespace ,
632635 ) ;
633636 }
@@ -636,6 +639,7 @@ mod tests {
636639 fn test_validate_err_get_cluster_uid ( ) {
637640 test_validate_err (
638641 |cluster| cluster. metadata . uid = None ,
642+ |_| ( ) ,
639643 ErrorDiscriminants :: GetClusterUid ,
640644 ) ;
641645 }
@@ -648,6 +652,7 @@ mod tests {
648652 serde_json:: from_str ( r#"{"productVersion": "invalid product version"}"# )
649653 . expect ( "should be a valid ProductImage structure" )
650654 } ,
655+ |_| ( ) ,
651656 ErrorDiscriminants :: ResolveProductImage ,
652657 ) ;
653658 }
@@ -668,6 +673,7 @@ mod tests {
668673 . role_groups
669674 . insert ( "invalid role-group name" . to_owned ( ) , role_group) ;
670675 } ,
676+ |_| ( ) ,
671677 ErrorDiscriminants :: ParseRoleGroupName ,
672678 ) ;
673679 }
@@ -690,6 +696,7 @@ mod tests {
690696 ) ]
691697 . into ( )
692698 } ,
699+ |_| ( ) ,
693700 ErrorDiscriminants :: ValidateLoggingConfig ,
694701 ) ;
695702 }
@@ -703,6 +710,7 @@ mod tests {
703710 . cluster_config
704711 . vector_aggregator_config_map_name = None
705712 } ,
713+ |_| ( ) ,
706714 ErrorDiscriminants :: GetVectorAggregatorConfigMapName ,
707715 ) ;
708716 }
@@ -714,6 +722,7 @@ mod tests {
714722 cluster. spec . nodes . config . config . graceful_shutdown_timeout =
715723 Some ( Duration :: from_secs ( u64:: MAX ) )
716724 } ,
725+ |_| ( ) ,
717726 ErrorDiscriminants :: TerminationGracePeriodTooLong ,
718727 ) ;
719728 }
@@ -728,20 +737,91 @@ mod tests {
728737 ) ]
729738 . into ( )
730739 } ,
740+ |_| ( ) ,
731741 ErrorDiscriminants :: ParseEnvironmentVariable ,
732742 ) ;
733743 }
734744
745+ #[ test]
746+ fn test_validate_err_parse_listener_status_hostname ( ) {
747+ test_validate_err (
748+ |_| ( ) ,
749+ |dereferenced_objects| {
750+ dereferenced_objects. maybe_discovery_service_listener =
751+ Some ( listener:: v1alpha1:: Listener {
752+ metadata : ObjectMeta :: default ( ) ,
753+ spec : listener:: v1alpha1:: ListenerSpec :: default ( ) ,
754+ status : Some ( listener:: v1alpha1:: ListenerStatus {
755+ ingress_addresses : Some ( vec ! [ listener:: v1alpha1:: ListenerIngress {
756+ address: "invalid hostname" . to_owned( ) ,
757+ address_type: listener:: v1alpha1:: AddressType :: Hostname ,
758+ ports: [ ( "http" . to_owned( ) , 9200 ) ] . into( ) ,
759+ } ] ) ,
760+ ..listener:: v1alpha1:: ListenerStatus :: default ( )
761+ } ) ,
762+ } ) ;
763+ } ,
764+ ErrorDiscriminants :: ParseListenerStatusHostname ,
765+ ) ;
766+ }
767+
768+ #[ test]
769+ fn test_validate_err_get_listener_status_port ( ) {
770+ test_validate_err (
771+ |_| ( ) ,
772+ |dereferenced_objects| {
773+ dereferenced_objects. maybe_discovery_service_listener =
774+ Some ( listener:: v1alpha1:: Listener {
775+ metadata : ObjectMeta :: default ( ) ,
776+ spec : listener:: v1alpha1:: ListenerSpec :: default ( ) ,
777+ status : Some ( listener:: v1alpha1:: ListenerStatus {
778+ ingress_addresses : Some ( vec ! [ listener:: v1alpha1:: ListenerIngress {
779+ address: "my-opensearch.default.svc.cluster.local" . to_owned( ) ,
780+ address_type: listener:: v1alpha1:: AddressType :: Hostname ,
781+ // Validation should fail because the http port is expected.
782+ ports: [ ( "transport" . to_owned( ) , 9300 ) ] . into( ) ,
783+ } ] ) ,
784+ ..listener:: v1alpha1:: ListenerStatus :: default ( )
785+ } ) ,
786+ } ) ;
787+ } ,
788+ ErrorDiscriminants :: GetListenerStatusPort ,
789+ ) ;
790+ }
791+
792+ #[ test]
793+ fn test_validate_err_parse_listener_status_port ( ) {
794+ test_validate_err (
795+ |_| ( ) ,
796+ |dereferenced_objects| {
797+ dereferenced_objects. maybe_discovery_service_listener =
798+ Some ( listener:: v1alpha1:: Listener {
799+ metadata : ObjectMeta :: default ( ) ,
800+ spec : listener:: v1alpha1:: ListenerSpec :: default ( ) ,
801+ status : Some ( listener:: v1alpha1:: ListenerStatus {
802+ ingress_addresses : Some ( vec ! [ listener:: v1alpha1:: ListenerIngress {
803+ address: "my-opensearch.default.svc.cluster.local" . to_owned( ) ,
804+ address_type: listener:: v1alpha1:: AddressType :: Hostname ,
805+ ports: [ ( "http" . to_owned( ) , -1 ) ] . into( ) ,
806+ } ] ) ,
807+ ..listener:: v1alpha1:: ListenerStatus :: default ( )
808+ } ) ,
809+ } ) ;
810+ } ,
811+ ErrorDiscriminants :: ParseListenerStatusPort ,
812+ ) ;
813+ }
814+
735815 fn test_validate_err (
736- f : fn ( & mut v1alpha1:: OpenSearchCluster ) -> ( ) ,
816+ change_cluster : fn ( & mut v1alpha1:: OpenSearchCluster ) -> ( ) ,
817+ change_dereferenced_objects : fn ( & mut DereferencedObjects ) -> ( ) ,
737818 expected_err : ErrorDiscriminants ,
738819 ) {
739820 let mut cluster = cluster ( ) ;
740- f ( & mut cluster) ;
821+ change_cluster ( & mut cluster) ;
741822
742- let dereferenced_objects = DereferencedObjects {
743- maybe_discovery_service_listener : None ,
744- } ;
823+ let mut dereferenced_objects = dereferenced_objects ( ) ;
824+ change_dereferenced_objects ( & mut dereferenced_objects) ;
745825
746826 let result = validate ( & context_names ( ) , & cluster, & dereferenced_objects) ;
747827
@@ -905,4 +985,22 @@ mod tests {
905985 status : None ,
906986 }
907987 }
988+
989+ fn dereferenced_objects ( ) -> DereferencedObjects {
990+ DereferencedObjects {
991+ maybe_discovery_service_listener : Some ( listener:: v1alpha1:: Listener {
992+ metadata : ObjectMeta :: default ( ) ,
993+ spec : listener:: v1alpha1:: ListenerSpec :: default ( ) ,
994+ status : Some ( listener:: v1alpha1:: ListenerStatus {
995+ ingress_addresses : Some ( vec ! [ listener:: v1alpha1:: ListenerIngress {
996+ // TODO Check if it is the FQDN
997+ address: "my-opensearch.default.svc.cluster.local" . to_owned( ) ,
998+ address_type: listener:: v1alpha1:: AddressType :: Hostname ,
999+ ports: [ ( "http" . to_owned( ) , 9200 ) ] . into( ) ,
1000+ } ] ) ,
1001+ ..listener:: v1alpha1:: ListenerStatus :: default ( )
1002+ } ) ,
1003+ } ) ,
1004+ }
1005+ }
9081006}
0 commit comments