3838import oracle .kubernetes .operator .LabelConstants ;
3939import oracle .kubernetes .operator .TuningParameters ;
4040import oracle .kubernetes .operator .calls .unprocessable .UnrecoverableErrorBuilderImpl ;
41+ import oracle .kubernetes .operator .logging .LoggingFacade ;
42+ import oracle .kubernetes .operator .logging .LoggingFactory ;
4143import oracle .kubernetes .operator .rest .ScanCacheStub ;
4244import oracle .kubernetes .operator .wlsconfig .WlsClusterConfig ;
4345import oracle .kubernetes .operator .wlsconfig .WlsDomainConfig ;
7678import static oracle .kubernetes .operator .KubernetesConstants .HTTP_INTERNAL_ERROR ;
7779import static oracle .kubernetes .operator .ProcessingConstants .DOMAIN_INTROSPECTOR_JOB ;
7880import static oracle .kubernetes .operator .ProcessingConstants .DOMAIN_TOPOLOGY ;
81+ import static oracle .kubernetes .operator .ProcessingConstants .INTROSPECTION_ERROR ;
7982import static oracle .kubernetes .operator .ProcessingConstants .JOBWATCHER_COMPONENT_NAME ;
8083import static oracle .kubernetes .operator .ProcessingConstants .JOB_POD_NAME ;
8184import static oracle .kubernetes .operator .helpers .KubernetesTestSupport .DOMAIN ;
8285import static oracle .kubernetes .operator .helpers .KubernetesTestSupport .JOB ;
8386import static oracle .kubernetes .operator .helpers .Matchers .hasEnvVar ;
8487import static oracle .kubernetes .operator .helpers .PodHelperTestBase .CUSTOM_COMMAND_SCRIPT ;
8588import static oracle .kubernetes .operator .helpers .PodHelperTestBase .CUSTOM_MOUNT_PATH ;
89+ import static oracle .kubernetes .operator .logging .MessageKeys .DOMAIN_FATAL_ERROR ;
8690import static oracle .kubernetes .operator .logging .MessageKeys .INTROSPECTOR_JOB_FAILED ;
8791import static oracle .kubernetes .operator .logging .MessageKeys .INTROSPECTOR_JOB_FAILED_DETAIL ;
92+ import static oracle .kubernetes .operator .logging .MessageKeys .INTROSPECTOR_MAX_ERRORS_EXCEEDED ;
8893import static oracle .kubernetes .operator .logging .MessageKeys .JOB_CREATED ;
8994import static oracle .kubernetes .operator .logging .MessageKeys .JOB_DELETED ;
9095import static oracle .kubernetes .operator .logging .MessageKeys .NO_CLUSTER_IN_DOMAIN ;
9196import static oracle .kubernetes .utils .LogMatcher .containsFine ;
9297import static oracle .kubernetes .utils .LogMatcher .containsInfo ;
9398import static oracle .kubernetes .utils .LogMatcher .containsWarning ;
99+ import static oracle .kubernetes .utils .OperatorUtils .onSeparateLines ;
94100import static oracle .kubernetes .weblogic .domain .model .AuxiliaryImage .AUXILIARY_IMAGE_DEFAULT_INIT_CONTAINER_COMMAND ;
95101import static oracle .kubernetes .weblogic .domain .model .AuxiliaryImage .AUXILIARY_IMAGE_INIT_CONTAINER_NAME_PREFIX ;
96102import static oracle .kubernetes .weblogic .domain .model .AuxiliaryImage .AUXILIARY_IMAGE_VOLUME_NAME_PREFIX ;
110116
111117@ SuppressWarnings ({"SameParameterValue" })
112118class DomainIntrospectorJobTest {
119+ private static final LoggingFacade LOGGER = LoggingFactory .getLogger ("Operator" , "Operator" );
120+
113121 private static final String NODEMGR_HOME = "/u01/nodemanager" ;
114122 private static final String OVERRIDES_CM = "overrides-config-map" ;
115123 private static final String OVERRIDE_SECRET_1 = "override-secret-1" ;
@@ -125,6 +133,8 @@ class DomainIntrospectorJobTest {
125133 IntStream .rangeClosed (1 , MAX_SERVERS ).mapToObj (n -> MS_PREFIX + n ).toArray (String []::new );
126134 private static final String SEVERE_PROBLEM = "really bad" ;
127135 private static final String SEVERE_MESSAGE = "@[SEVERE] " + SEVERE_PROBLEM ;
136+ private static final String FATAL_PROBLEM = "FatalIntrospectorError: really bad" ;
137+ private static final String FATAL_MESSAGE = "@[SEVERE] " + FATAL_PROBLEM ;
128138 private static final String INFO_MESSAGE = "@[INFO] just letting you know" ;
129139 public static final String TEST_VOLUME_NAME = "test" ;
130140 private static final String JOB_UID = "FAILED_JOB" ;
@@ -857,6 +867,66 @@ void whenJobLogContainsSevereErrorAndStatusHasDifferentJobUID_incrementFailureCo
857867 assertThat (getUpdatedDomain ().getStatus ().getIntrospectJobFailureCount (), equalTo (2 ));
858868 }
859869
870+ @ Test
871+ void whenJobLogContainsSevereErrorAndRetriesLeft_domainStatusHasExpectedMessage () {
872+ createIntrospectionLog (SEVERE_MESSAGE );
873+
874+ testSupport .runSteps (JobHelper .readDomainIntrospectorPodLog (terminalStep ));
875+
876+ assertThat (getUpdatedDomain ().getStatus ().getMessage (), equalTo (
877+ createRetryStatusMessage ("Introspection failed on try 1 of 2." , SEVERE_PROBLEM )));
878+ }
879+
880+ @ NotNull
881+ private String createRetryStatusMessage (String retryStatusMessage , String severeProblem ) {
882+ return onSeparateLines (retryStatusMessage , INTROSPECTION_ERROR , severeProblem );
883+ }
884+
885+ @ Test
886+ void whenJobLogContainsFatalError_domainStatusHasExpectedMessage () {
887+ createIntrospectionLog (FATAL_MESSAGE );
888+
889+ testSupport .runSteps (JobHelper .readDomainIntrospectorPodLog (terminalStep ));
890+
891+ final Domain updatedDomain = testSupport .<Domain >getResources (DOMAIN ).get (0 );
892+
893+ assertThat (updatedDomain .getStatus ().getMessage (),
894+ equalTo (createRetryStatusMessage (LOGGER .formatMessage (DOMAIN_FATAL_ERROR ), FATAL_PROBLEM )));
895+ }
896+
897+ @ Test
898+ void whenJobLogContainsSevereErrorAndNumberOfRetriesExceedsMaxLimit_domainStatusHasExpectedMessage () {
899+ createIntrospectionLog (SEVERE_MESSAGE );
900+
901+ getUpdatedDomain ().setStatus (createDomainStatusWithIntrospectJobFailureCount (2 ));
902+
903+ testSupport .runSteps (JobHelper .readDomainIntrospectorPodLog (terminalStep ));
904+
905+ assertThat (getUpdatedDomain ().getStatus ().getMessage (),
906+ equalTo (createRetryStatusMessage (LOGGER .formatMessage (INTROSPECTOR_MAX_ERRORS_EXCEEDED , 2 ),
907+ SEVERE_PROBLEM )));
908+ }
909+
910+ private void createIntrospectionLog (String logMessage ) {
911+ createIntrospectionLog (logMessage , true );
912+ }
913+
914+ private void createIntrospectionLog (String logMessage , boolean ignoreLogMessages ) {
915+ if (ignoreLogMessages ) {
916+ consoleHandlerMemento .ignoreMessage (getJobFailedMessageKey ());
917+ consoleHandlerMemento .ignoreMessage (getJobFailedDetailMessageKey ());
918+ }
919+ testSupport .defineResources (createIntrospectorJob ());
920+ IntrospectionTestUtils .defineResources (testSupport , logMessage );
921+ testSupport .addToPacket (DOMAIN_INTROSPECTOR_JOB , testSupport .getResourceWithName (JOB , getJobName ()));
922+ }
923+
924+ private DomainStatus createDomainStatusWithIntrospectJobFailureCount (int failureCount ) {
925+ final DomainStatus status = new DomainStatus ();
926+ status .withIntrospectJobFailureCount (failureCount );
927+ return status ;
928+ }
929+
860930 // create job
861931 // add job uid to status
862932 // do NOT create pod log
0 commit comments