From 460ac888ecdfe2c520af5c65c3f1e2a105e7d546 Mon Sep 17 00:00:00 2001 From: "ANTARYAMI.PANIGRAHI@ORACLE.COM" Date: Fri, 10 Sep 2021 02:11:56 +0000 Subject: [PATCH 1/4] Modify the jms serrvlet code --- .../src/application/JmsServlet.java | 42 ++++++++++++++----- .../mdbtopic/src/application/MdbTopic.java | 2 +- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java index 86f6be2bb2a..c6c62c4ff66 100644 --- a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java +++ b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java @@ -37,6 +37,9 @@ public class JmsServlet extends HttpServlet { + private static int s1count=0; + private static int s2count=0; + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @@ -113,8 +116,6 @@ protected void doGet(HttpServletRequest request, out.println("Receiving message from ["+destination+"]"); Message msg=null; int count = 0; - int s1count=0; - int s2count=0; JMSConsumer consumer = (JMSConsumer) context.createConsumer(d); do { // msg = consumer.receiveNoWait(); @@ -129,22 +130,41 @@ protected void doGet(HttpServletRequest request, } } while( msg != null); - out.println("Found ("+s1count+") message from [managed-server1]"); - out.println("Found ("+s2count+") message from [managed-server2]"); - + out.println("Recorded ("+s1count+") message from [managed-server1]"); + out.println("Recorded ("+s2count+") message from [managed-server2]"); + + // Intermittently, in a single attempts all 20 messages are not + // received on accouting Queue. So the logic is modified to make sure + // the accounting Queue get 20 messages all together with multiple + // attempts. Here the s1count, s2count variables have been made static + // to keep a record of the message received from managed-server1 and + // managed-server2 of domain2 respectively. + + int ccount = s1count + s2count; + if ( ccount == rcount ) { + // reset the message counter once all messages are received + s1count=0; + s2count=0; + if ( s1count == s2count ) + out.println("Messages are distributed across MDB instances"); + else + out.println("Messages are NOT distributed across MDB instances"); + } else { + out.println("Total messages received so far is ["+ccount+"]"); + out.println("Waiting for more messages to appears on accounting queue"); + } + } + /** if ( count == rcount ) { out.println("Drained ("+count+") message from ["+destination+"]"); - if ( s1count == s2count ) out.println("Messages are distributed across MDB instances"); else out.println("Messages are NOT distributed across MDB instances"); - } else { - out.println("Found ("+count+") message on ["+destination+"] instead of ["+rcount+"]"); - } - } - + out.println("Found ("+count+") message instead of ["+rcount+"]"); + } + **/ } catch (Exception e) { out.println("Send/Receive FAILED with Unknown Exception " + e); e.printStackTrace(); diff --git a/integration-tests/src/test/resources/apps/mdbtopic/src/application/MdbTopic.java b/integration-tests/src/test/resources/apps/mdbtopic/src/application/MdbTopic.java index e2d4684fb16..54c5929ae6a 100644 --- a/integration-tests/src/test/resources/apps/mdbtopic/src/application/MdbTopic.java +++ b/integration-tests/src/test/resources/apps/mdbtopic/src/application/MdbTopic.java @@ -93,7 +93,7 @@ public void onMessage (Message msg) { JMSContext context = cf.createContext(); tmsg = context.createTextMessage("(On Server) " + serverRuntime.getName()); context.createProducer().send(rq,tmsg); - System.out.println("["+dateFormat.format(date)+"] message added to [@FWD_DEST_URL@]"); + System.out.println("["+dateFormat.format(date)+"] message forwarded to [t3://domain1-admin-server:7001]"); } catch (Exception e) { e.printStackTrace (); } From 4e58ceb64b1d3ee01cb8fa72f04da47f1f190118 Mon Sep 17 00:00:00 2001 From: "ANTARYAMI.PANIGRAHI@ORACLE.COM" Date: Mon, 13 Sep 2021 22:08:18 +0000 Subject: [PATCH 2/4] Removed the commented code --- .../src/application/JmsServlet.javax | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax diff --git a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax new file mode 100644 index 00000000000..86f6be2bb2a --- /dev/null +++ b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax @@ -0,0 +1,164 @@ +// Copyright (c) 2021, Oracle and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +package application; + +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.annotation.WebInitParam; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServlet; +import java.text.SimpleDateFormat; +import java.text.DateFormat; + +import java.util.Hashtable; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSConsumer; +import javax.jms.JMSContext; +import javax.jms.JMSException; +import javax.jms.JMSProducer; +import javax.jms.MessageConsumer; +import javax.jms.JMSRuntimeException; +import javax.jms.Message; + +import javax.transaction.UserTransaction; +import weblogic.transaction.TransactionHelper; + +@WebServlet(name="JmsServlet", urlPatterns={"/jmstest"}, + initParams={ @WebInitParam(name="simpleParam", value="paramValue") } ) + +public class JmsServlet extends HttpServlet { + + protected void doGet(HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/plain"); + PrintWriter out = response.getWriter(); + String action = ""; + String destination = ""; + String cfactory = "weblogic.jms.ConnectionFactory"; + String url = "t3://localhost:7001"; + String host = "localhost"; + String port = "7001"; + int scount = 10; + int rcount = 20; + + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + java.util.Date date = new java.util.Date(); + + try { + + action = request.getParameter("action"); + out.println("Action ["+action+"]"); + + destination = request.getParameter("dest"); + out.println("Destination ["+destination+"]"); + + if (request.getParameter("host") != null ) + host = request.getParameter("host"); + + if (request.getParameter("port") != null ) + port = request.getParameter("port"); + + url = "t3://"+host+":"+port; + + // Override if url parameter is provided + if (request.getParameter("url") != null ) + url = request.getParameter("url"); + + out.println("Url ["+url+"]"); + + if (request.getParameter("cf") != null ) + cfactory = request.getParameter("cf"); + + out.println("ConnectionFactory ["+cfactory+"]"); + + if (request.getParameter("scount") != null ) + scount = Integer.parseInt(request.getParameter("scount")); + + if (request.getParameter("rcount") != null ) + scount = Integer.parseInt(request.getParameter("rcount")); + + Hashtable h = new Hashtable(); + h.put(Context.INITIAL_CONTEXT_FACTORY, + "weblogic.jndi.WLInitialContextFactory"); + h.put(Context.PROVIDER_URL,url); + h.put(Context.SECURITY_PRINCIPAL, "weblogic"); + h.put(Context.SECURITY_CREDENTIALS, "welcome1"); + Context cxt = null; + cxt = new InitialContext(h); + out.println("Got Initial Context from " + url); + Destination d = (Destination)cxt.lookup(destination); + out.println("Destination Lookup Successful "); + ConnectionFactory qcf= (ConnectionFactory)cxt.lookup(cfactory); + out.println("ConnectionFactory Lookup Successful"); + + JMSContext context = qcf.createContext(); + + if ( action.equals("send") ) { + out.println("Sending ("+scount+") message to ["+destination+"]"); + String msg = "["+dateFormat.format(date)+"] Welcome to WebLogic Kubenates Operator"; + for ( int i=0; i Date: Tue, 14 Sep 2021 17:03:15 +0000 Subject: [PATCH 3/4] remove unused files --- .../src/application/JmsServlet.java | 14 +- .../src/application/JmsServlet.javax | 164 ------------------ 2 files changed, 2 insertions(+), 176 deletions(-) delete mode 100644 integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax diff --git a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java index c6c62c4ff66..ec59e6d120b 100644 --- a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java +++ b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java @@ -133,12 +133,13 @@ protected void doGet(HttpServletRequest request, out.println("Recorded ("+s1count+") message from [managed-server1]"); out.println("Recorded ("+s2count+") message from [managed-server2]"); - // Intermittently, in a single attempts all 20 messages are not + // Intermittently, in a single attempt all 20 messages are not // received on accouting Queue. So the logic is modified to make sure // the accounting Queue get 20 messages all together with multiple // attempts. Here the s1count, s2count variables have been made static // to keep a record of the message received from managed-server1 and // managed-server2 of domain2 respectively. + // Finally it make sure that s1count and s2count are same int ccount = s1count + s2count; if ( ccount == rcount ) { @@ -154,17 +155,6 @@ protected void doGet(HttpServletRequest request, out.println("Waiting for more messages to appears on accounting queue"); } } - /** - if ( count == rcount ) { - out.println("Drained ("+count+") message from ["+destination+"]"); - if ( s1count == s2count ) - out.println("Messages are distributed across MDB instances"); - else - out.println("Messages are NOT distributed across MDB instances"); - } else { - out.println("Found ("+count+") message instead of ["+rcount+"]"); - } - **/ } catch (Exception e) { out.println("Send/Receive FAILED with Unknown Exception " + e); e.printStackTrace(); diff --git a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax deleted file mode 100644 index 86f6be2bb2a..00000000000 --- a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.javax +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) 2021, Oracle and/or its affiliates. -// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - -package application; - -import java.io.IOException; -import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.annotation.WebInitParam; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServlet; -import java.text.SimpleDateFormat; -import java.text.DateFormat; - -import java.util.Hashtable; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSConsumer; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.JMSProducer; -import javax.jms.MessageConsumer; -import javax.jms.JMSRuntimeException; -import javax.jms.Message; - -import javax.transaction.UserTransaction; -import weblogic.transaction.TransactionHelper; - -@WebServlet(name="JmsServlet", urlPatterns={"/jmstest"}, - initParams={ @WebInitParam(name="simpleParam", value="paramValue") } ) - -public class JmsServlet extends HttpServlet { - - protected void doGet(HttpServletRequest request, - HttpServletResponse response) - throws ServletException, IOException { - response.setContentType("text/plain"); - PrintWriter out = response.getWriter(); - String action = ""; - String destination = ""; - String cfactory = "weblogic.jms.ConnectionFactory"; - String url = "t3://localhost:7001"; - String host = "localhost"; - String port = "7001"; - int scount = 10; - int rcount = 20; - - DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - java.util.Date date = new java.util.Date(); - - try { - - action = request.getParameter("action"); - out.println("Action ["+action+"]"); - - destination = request.getParameter("dest"); - out.println("Destination ["+destination+"]"); - - if (request.getParameter("host") != null ) - host = request.getParameter("host"); - - if (request.getParameter("port") != null ) - port = request.getParameter("port"); - - url = "t3://"+host+":"+port; - - // Override if url parameter is provided - if (request.getParameter("url") != null ) - url = request.getParameter("url"); - - out.println("Url ["+url+"]"); - - if (request.getParameter("cf") != null ) - cfactory = request.getParameter("cf"); - - out.println("ConnectionFactory ["+cfactory+"]"); - - if (request.getParameter("scount") != null ) - scount = Integer.parseInt(request.getParameter("scount")); - - if (request.getParameter("rcount") != null ) - scount = Integer.parseInt(request.getParameter("rcount")); - - Hashtable h = new Hashtable(); - h.put(Context.INITIAL_CONTEXT_FACTORY, - "weblogic.jndi.WLInitialContextFactory"); - h.put(Context.PROVIDER_URL,url); - h.put(Context.SECURITY_PRINCIPAL, "weblogic"); - h.put(Context.SECURITY_CREDENTIALS, "welcome1"); - Context cxt = null; - cxt = new InitialContext(h); - out.println("Got Initial Context from " + url); - Destination d = (Destination)cxt.lookup(destination); - out.println("Destination Lookup Successful "); - ConnectionFactory qcf= (ConnectionFactory)cxt.lookup(cfactory); - out.println("ConnectionFactory Lookup Successful"); - - JMSContext context = qcf.createContext(); - - if ( action.equals("send") ) { - out.println("Sending ("+scount+") message to ["+destination+"]"); - String msg = "["+dateFormat.format(date)+"] Welcome to WebLogic Kubenates Operator"; - for ( int i=0; i Date: Tue, 14 Sep 2021 22:10:39 +0000 Subject: [PATCH 4/4] Added beforeEach --- .../kubernetes/ItCrossDomainTransaction.java | 53 ++++++++----------- .../ItIstioCrossDomainTransaction.java | 21 ++++++-- .../src/application/JmsServlet.java | 9 ++-- 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItCrossDomainTransaction.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItCrossDomainTransaction.java index 80dbcb61f1f..85f816a3646 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItCrossDomainTransaction.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItCrossDomainTransaction.java @@ -34,6 +34,7 @@ import oracle.weblogic.kubernetes.logging.LoggingFacade; import oracle.weblogic.kubernetes.utils.ExecResult; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -53,7 +54,7 @@ import static oracle.weblogic.kubernetes.assertions.TestAssertions.domainExists; import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppIsActive; import static oracle.weblogic.kubernetes.utils.BuildApplication.buildApplication; -import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkServiceExists; +import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil; import static oracle.weblogic.kubernetes.utils.DbUtils.getDBNodePort; @@ -66,8 +67,6 @@ import static oracle.weblogic.kubernetes.utils.ImageUtils.createSecretForBaseImages; import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry; import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator; -import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodExists; -import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodReady; import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName; import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity; import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword; @@ -156,10 +155,26 @@ public static void initAll(@Namespaces(3) List namespaces) { // install and verify operator installAndVerifyOperator(opNamespace, domain1Namespace, domain2Namespace); - buildApplicationsAndDomains(); } + /** + * Verify all server pods are running. + * Verify k8s services for all servers are created. + */ + @BeforeEach + public void beforeEach() { + int replicaCount = 2; + for (int i = 1; i <= replicaCount; i++) { + checkPodReadyAndServiceExists(domain2ManagedServerPrefix + i, + domainUid2, domain2Namespace); + } + for (int i = 1; i <= replicaCount; i++) { + checkPodReadyAndServiceExists(domain1ManagedServerPrefix + i, + domainUid1, domain1Namespace); + } + } + private static void updatePropertyFile() { //create a temporary directory to copy and update the properties file Path target = Paths.get(PROPS_TEMP_DIR); @@ -482,38 +497,16 @@ private static void createDomain(String domainUid, String domainNamespace, Strin ); // check admin server pod exists + // check admin server services created logger.info("Check for admin server pod {0} existence in namespace {1}", adminServerPodName, domainNamespace); - checkPodExists(adminServerPodName, domainUid, domainNamespace); - + checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace); // check managed server pods exist - for (int i = 1; i <= replicaCount; i++) { - logger.info("Check for managed server pod {0} existence in namespace {1}", - managedServerPrefix + i, domainNamespace); - checkPodExists(managedServerPrefix + i, domainUid, domainNamespace); - } - - // check admin server pod is ready - logger.info("Wait for admin server pod {0} to be ready in namespace {1}", - adminServerPodName, domainNamespace); - checkPodReady(adminServerPodName, domainUid, domainNamespace); - - // check managed server pods are ready - for (int i = 1; i <= replicaCount; i++) { - logger.info("Wait for managed server pod {0} to be ready in namespace {1}", - managedServerPrefix + i, domainNamespace); - checkPodReady(managedServerPrefix + i, domainUid, domainNamespace); - } - - logger.info("Check admin service {0} is created in namespace {1}", - adminServerPodName, domainNamespace); - checkServiceExists(adminServerPodName, domainNamespace); - // check managed server services created for (int i = 1; i <= replicaCount; i++) { - logger.info("Check managed server service {0} is created in namespace {1}", + logger.info("Check for managed server pod {0} existence in namespace {1}", managedServerPrefix + i, domainNamespace); - checkServiceExists(managedServerPrefix + i, domainNamespace); + checkPodReadyAndServiceExists(managedServerPrefix + i, domainUid, domainNamespace); } logger.info("Getting node port"); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioCrossDomainTransaction.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioCrossDomainTransaction.java index d2faa66738a..99a309b4bdf 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioCrossDomainTransaction.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioCrossDomainTransaction.java @@ -34,6 +34,7 @@ import oracle.weblogic.kubernetes.logging.LoggingFacade; import oracle.weblogic.kubernetes.utils.ExecResult; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -55,6 +56,7 @@ import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppIsActive; import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppUsingHostHeader; import static oracle.weblogic.kubernetes.utils.BuildApplication.buildApplication; +import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkServiceExists; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil; @@ -162,12 +164,26 @@ public static void initAll(@Namespaces(3) List namespaces) { assertDoesNotThrow(() -> addLabelsToNamespace(domain1Namespace,labelMap)); assertDoesNotThrow(() -> addLabelsToNamespace(domain2Namespace,labelMap)); assertDoesNotThrow(() -> addLabelsToNamespace(opNamespace,labelMap)); - // install and verify operator installAndVerifyOperator(opNamespace, domain1Namespace, domain2Namespace); - buildApplicationsAndDomains(); + } + /** + * Verify all server pods are running. + * Verify k8s services for all servers are created. + */ + @BeforeEach + public void beforeEach() { + int replicaCount = 2; + for (int i = 1; i <= replicaCount; i++) { + checkPodReadyAndServiceExists(domain2ManagedServerPrefix + i, + domainUid2, domain2Namespace); + } + for (int i = 1; i <= replicaCount; i++) { + checkPodReadyAndServiceExists(domain1ManagedServerPrefix + i, + domainUid1, domain1Namespace); + } } private static void updatePropertyFile() { @@ -539,7 +555,6 @@ private static void createDomain(String domainUid, String domainNamespace, Strin managedServerPrefix + i, domainNamespace); checkPodReady(managedServerPrefix + i, domainUid, domainNamespace); } - } private static void createDomainResource(String domainUid, String domNamespace, String adminSecretName, diff --git a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java index ec59e6d120b..00dd45c24a1 100644 --- a/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java +++ b/integration-tests/src/test/resources/apps/jmsservlet/src/application/JmsServlet.java @@ -143,13 +143,14 @@ protected void doGet(HttpServletRequest request, int ccount = s1count + s2count; if ( ccount == rcount ) { + if ( s1count == s2count ) { + out.println("Messages are distributed across MDB instances"); + } else { + out.println("Messages are NOT distributed across MDB instances"); + } // reset the message counter once all messages are received s1count=0; s2count=0; - if ( s1count == s2count ) - out.println("Messages are distributed across MDB instances"); - else - out.println("Messages are NOT distributed across MDB instances"); } else { out.println("Total messages received so far is ["+ccount+"]"); out.println("Waiting for more messages to appears on accounting queue");