Repository: juddi Updated Branches: refs/heads/master d7854c235 -> bacfa9353
JUDDI-873 fixed JUDDI-242 stubbing out remaining replication items Project: http://git-wip-us.apache.org/repos/asf/juddi/repo Commit: http://git-wip-us.apache.org/repos/asf/juddi/commit/bacfa935 Tree: http://git-wip-us.apache.org/repos/asf/juddi/tree/bacfa935 Diff: http://git-wip-us.apache.org/repos/asf/juddi/diff/bacfa935 Branch: refs/heads/master Commit: bacfa9353a1c6bd29093c4c4652044cb4fae3f64 Parents: d7854c2 Author: Alex <[email protected]> Authored: Fri Dec 12 18:36:22 2014 -0500 Committer: Alex <[email protected]> Committed: Fri Dec 12 18:36:22 2014 -0500 ---------------------------------------------------------------------- .../juddi/api/impl/UDDIReplicationImpl.java | 33 +- .../juddi/api/impl/UDDISubscriptionImpl.java | 32 +- .../juddi/replication/ReplicationNotifier.java | 13 +- .../subscription/SubscriptionNotifier.java | 3 +- ...090_SubscriptionListenerIntegrationTest.java | 536 ++++++++++++------- ..._RMISubscriptionListenerIntegrationTest.java | 20 +- .../org/apache/juddi/samples/UddiSubscribe.java | 56 +- .../samples/UddiSubscribeAssertionStatus.java | 3 +- 8 files changed, 482 insertions(+), 214 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java index 80e4082..c7d1192 100644 --- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java +++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIReplicationImpl.java @@ -51,6 +51,8 @@ import org.apache.juddi.model.BindingTemplate; import org.apache.juddi.model.BusinessEntity; import org.apache.juddi.model.BusinessService; import org.apache.juddi.model.Operator; +import org.apache.juddi.model.PublisherAssertion; +import org.apache.juddi.model.PublisherAssertionId; import org.apache.juddi.model.Tmodel; import static org.apache.juddi.replication.ReplicationNotifier.FetchEdges; import org.apache.juddi.v3.client.UDDIService; @@ -229,7 +231,7 @@ public class UDDIReplicationImpl extends AuthenticatedService implements UDDIRep //get the high water marks for this node //ok now get all the changes - //done TODO replace with last known record from the given node + //done replace with last known record from the given node //for (int xx = 0; xx < poll.getChangesAvailable().getHighWaterMark().size(); xx++) { // logger.info("Node " + poll.getChangesAvailable().getHighWaterMark().get(xx).getNodeID() // + " USN " + poll.getChangesAvailable().getHighWaterMark().get(xx).getOriginatingUSN()); @@ -451,10 +453,37 @@ public class UDDIReplicationImpl extends AuthenticatedService implements UDDIRep //<editor-fold defaultstate="collapsed" desc="changeRecordPublisherAssertion"> if (rec.getChangeRecordPublisherAssertion() != null) { -//TODO implement + + //TODO are publisher assertions owned by a given node? + PublisherAssertionId paid = new PublisherAssertionId(rec.getChangeRecordPublisherAssertion().getPublisherAssertion().getFromKey(), rec.getChangeRecordPublisherAssertion().getPublisherAssertion().getToKey()); + org.apache.juddi.model.PublisherAssertion model = em.find(org.apache.juddi.model.PublisherAssertion.class, paid); + if (model != null) { + //permission check? + } + model = new PublisherAssertion(); + + MappingApiToModel.mapPublisherAssertion(rec.getChangeRecordPublisherAssertion().getPublisherAssertion(), model); + model.setModified(rec.getChangeRecordPublisherAssertion().getModified().toGregorianCalendar().getTime()); + em.persist(model); + } //</editor-fold> + if (rec.getChangeRecordNewDataConditional() != null) { + //TODO + + } + if (rec.getChangeRecordNull() != null) { + //TODO + } + if (rec.getChangeRecordCorrection() != null) { + //TODO + + } + if (rec.getChangeRecordConditionFailed() != null) { + //TODO + + } tx.commit(); } catch (Exception drfm) { http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java index ac5d19e..5012ce5 100644 --- a/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java +++ b/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISubscriptionImpl.java @@ -42,9 +42,11 @@ import org.apache.juddi.config.Property; import org.apache.juddi.jaxb.JAXBMarshaller; import org.apache.juddi.mapping.MappingApiToModel; import org.apache.juddi.mapping.MappingModelToApi; +import org.apache.juddi.model.PublisherAssertion; import org.apache.juddi.model.SubscriptionChunkToken; import org.apache.juddi.model.SubscriptionMatch; import org.apache.juddi.model.UddiEntityPublisher; +import org.apache.juddi.query.FindBusinessByPublisherQuery; import org.apache.juddi.query.FindSubscriptionByPublisherQuery; import org.apache.juddi.v3.error.ErrorMessage; import org.apache.juddi.v3.error.FatalErrorException; @@ -725,12 +727,30 @@ public class UDDISubscriptionImpl extends AuthenticatedService implements UDDISu // The coverage period doesn't apply here (basically because publisher assertions don't keep operational info). // TODO, JUDDI-873 edit they do now, rewrite this query GetAssertionStatusReport getAssertionStatusReport = subscriptionFilter.getGetAssertionStatusReport(); - - List<AssertionStatusItem> assertionList = PublicationHelper.getAssertionStatusItemList(publisher, getAssertionStatusReport.getCompletionStatus(), em); - - AssertionStatusReport assertionStatusReport = new AssertionStatusReport(); - for(AssertionStatusItem asi : assertionList) - assertionStatusReport.getAssertionStatusItem().add(asi); + List<?> businessKeysFound = null; + businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound); + + AssertionStatusReport assertionStatusReport = new AssertionStatusReport(); + + List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = org.apache.juddi.query.FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, getAssertionStatusReport.getCompletionStatus()); + //if (pubAssertionList==null) + // return result; + for (org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) { + + if (startPointDate.after(modelPubAssertion.getModified())) { + continue; + } + + if (endPointDate.before(modelPubAssertion.getModified())) { + continue; + } + org.uddi.api_v3.AssertionStatusItem apiAssertionStatusItem = new org.uddi.api_v3.AssertionStatusItem(); + + MappingModelToApi.mapAssertionStatusItem(modelPubAssertion, apiAssertionStatusItem, businessKeysFound); + + assertionStatusReport.getAssertionStatusItem().add(apiAssertionStatusItem); + } + result.setAssertionStatusReport(assertionStatusReport); } http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java index d71f2bd..b724ae5 100644 --- a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java +++ b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java @@ -120,7 +120,7 @@ public class ReplicationNotifier extends TimerTask { em.close(); } - log.info("ChangeRecord: " + j.getId() + "," + j.getEntityKey() + "," + j.getNodeID() + "," + j.getOriginatingUSN() + "," + j.getRecordType().toString()); + log.debug("ChangeRecord: " + j.getId() + "," + j.getEntityKey() + "," + j.getNodeID() + "," + j.getOriginatingUSN() + "," + j.getRecordType().toString()); org.uddi.repl_v3.ReplicationConfiguration repcfg = FetchEdges(); //TODO figure out what this statement means 7.5.3 @@ -131,7 +131,7 @@ public class ReplicationNotifier extends TimerTask { * of the registry. */ if (repcfg == null) { - log.info("No replication configuration is defined!"); + log.debug("No replication configuration is defined!"); return; } @@ -184,7 +184,7 @@ public class ReplicationNotifier extends TimerTask { try { x.notifyChangeRecordsAvailable(req); - log.info("Successfully sent change record available message to " + s); + log.debug("Successfully sent change record available message to " + s); } catch (Exception ex) { log.warn("Unable to send change notification to " + s, ex); } @@ -196,11 +196,14 @@ public class ReplicationNotifier extends TimerTask { if (queue == null) { queue = new ConcurrentLinkedQueue(); } + //TODO revisie this + if (!queue.isEmpty()) + log.info("Replication, Notifying nodes of new change records. " + queue.size() + " queued"); + //TODO check for replication config changes while (!queue.isEmpty()) { //for each change at this node - log.info("Replication, Notifying nodes of new change records. " + queue.size() + " remaining"); - + ChangeRecord j = queue.poll(); ProcessChangeRecord(j); http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java b/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java index 3dc0771..cdfd79d 100644 --- a/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java +++ b/juddi-core/src/main/java/org/apache/juddi/subscription/SubscriptionNotifier.java @@ -280,7 +280,8 @@ public class SubscriptionNotifier extends TimerTask { if (resultList.getBindingDetail() != null || resultList.getBusinessDetail() != null || resultList.getBusinessList() != null || resultList.getServiceDetail() != null || resultList.getServiceList() != null || resultList.getTModelDetail() != null - || resultList.getTModelList() != null || resultList.getRelatedBusinessesList() != null) { + || resultList.getTModelList() != null || resultList.getRelatedBusinessesList() != null + || resultList.getAssertionStatusReport() !=null) { return true; } //When the response is 'brief', or when there are deleted only keyBags are used. http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/test/java/org/apache/juddi/api/impl/API_090_SubscriptionListenerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_090_SubscriptionListenerIntegrationTest.java b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_090_SubscriptionListenerIntegrationTest.java index 4409e27..fa5c3ab 100644 --- a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_090_SubscriptionListenerIntegrationTest.java +++ b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_090_SubscriptionListenerIntegrationTest.java @@ -39,200 +39,352 @@ import org.uddi.v3_service.UDDISecurityPortType; import com.dumbster.smtp.SimpleSmtpServer; import com.dumbster.smtp.SmtpMessage; +import java.util.ArrayList; +import java.util.List; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.ws.Holder; +import org.apache.juddi.v3.client.UDDIConstants; +import org.apache.juddi.v3.tck.TckCommon; +import org.junit.Assume; +import org.junit.Ignore; +import org.uddi.api_v3.AddPublisherAssertions; +import org.uddi.api_v3.BusinessEntity; +import org.uddi.api_v3.CompletionStatus; +import org.uddi.api_v3.DeletePublisherAssertions; +import org.uddi.api_v3.GetAssertionStatusReport; +import org.uddi.api_v3.KeyedReference; +import org.uddi.api_v3.PublisherAssertion; +import org.uddi.sub_v3.DeleteSubscription; +import org.uddi.sub_v3.Subscription; +import org.uddi.sub_v3.SubscriptionFilter; +import org.uddi.v3_service.UDDIInquiryPortType; +import org.uddi.v3_service.UDDIPublicationPortType; +import org.uddi.v3_service.UDDISubscriptionPortType; /** * @author <a href="mailto:[email protected]">Tom Cunningham</a> */ -public class API_090_SubscriptionListenerIntegrationTest -{ - private static final Log logger = LogFactory.getLog(API_090_SubscriptionListenerIntegrationTest.class); - private static API_010_PublisherTest api010 = new API_010_PublisherTest(); - private static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl()); - private static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl()); - private static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl()); - private static TckSubscriptionListener tckSubscriptionListener = new TckSubscriptionListener(new UDDISubscriptionImpl(), new UDDIPublicationImpl()); - private static Endpoint endPoint; - private static String authInfoJoe = null; - private static SimpleSmtpServer mailServer; - private static Integer smtpPort = 25; - private static Integer httpPort = 80; - - @AfterClass - public static void stopManager() throws ConfigurationException { - //manager.stop(); - //shutting down the TCK SubscriptionListener - endPoint.stop(); - Registry.stop(); - mailServer.stop(); - } - - @BeforeClass - public static void startManager() throws ConfigurationException { - Registry.start(); - try { - smtpPort = 9700 + new Random().nextInt(99); - httpPort = 9600 + new Random().nextInt(99); - System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.host", "localhost"); - System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.port", String.valueOf(smtpPort)); - System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.from", "[email protected]"); - mailServer = SimpleSmtpServer.start(smtpPort); - //bring up the TCK HTTP SubscriptionListener - String httpEndpoint = "http://localhost:" + httpPort + "/tcksubscriptionlistener"; - System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint); - endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl()); - logger.debug("Getting auth tokens.."); - - api010.saveJoePublisher(); - UDDISecurityPortType security = new UDDISecurityImpl(); - authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword()); - Assert.assertNotNull(authInfoJoe); - - } catch (Exception e) { - logger.error(e.getMessage(), e); - Assert.fail(e.getMessage()); - } - } - - @Test - public void joePublisherUpdateService_HTTP() { - try { - tckTModel.saveJoePublisherTmodel(authInfoJoe); - tckBusiness.saveJoePublisherBusiness(authInfoJoe); - //Saving the binding template that will be called by the server for a subscription event - tckBusinessService.saveJoePublisherService(authInfoJoe); - //Saving the HTTP Listener Service - tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_HTTP_SERVICE_XML, httpPort, "localhost"); - //Saving the HTTP Subscription - tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_XML); - //Changing the service we subscribed to "JoePublisherService" - Thread.sleep(1000); - logger.info("Updating Service ********** "); - tckBusinessService.updateJoePublisherService(authInfoJoe, "foo"); - - //waiting up to 100 seconds for the listener to notice the change. - for (int i=0; i<200; i++) { - Thread.sleep(500); - System.out.print("."); - if (UDDISubscriptionListenerImpl.notificationCount > 0) { - logger.info("Received HTTP Notification"); - break; - } - } - if (UDDISubscriptionListenerImpl.notificationCount == 0) { - Assert.fail("No HttpNotification was sent"); - } - if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name xml:lang=\"en\">Service One</name>")) { - Assert.fail("Notification does not contain the correct service"); - } - - } catch (Exception e) { - logger.error("No exceptions please."); - e.printStackTrace(); - - Assert.fail(); - } finally { - tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_KEY); - tckBusinessService.deleteJoePublisherService(authInfoJoe); - tckBusiness.deleteJoePublisherBusiness(authInfoJoe); - tckTModel.deleteJoePublisherTmodel(authInfoJoe); - } - } - - @Test - public void joePublisherUpdateService_SMTP() { - try { - tckTModel.saveJoePublisherTmodel(authInfoJoe); - tckBusiness.saveJoePublisherBusiness(authInfoJoe); - //Saving the binding template that will be called by the server for a subscription event - tckBusinessService.saveJoePublisherService(authInfoJoe); - //Saving the SMTP Listener Service - tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_SMTP_SERVICE_XML, 0, "localhost"); - //Saving the SMTP Subscription - tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_SMTP_XML); - //Changing the service we subscribed to "JoePublisherService" - Thread.sleep(1000); - logger.info("Updating Service ********** "); - tckBusinessService.updateJoePublisherService(authInfoJoe, "foo"); - - //waiting up to 100 seconds for the listener to notice the change. - for (int i=0; i<200; i++) { - Thread.sleep(500); - System.out.print("."); - if (mailServer.getReceivedEmailSize() > 0) { - logger.info("Received Email Notification"); - break; - } - } - if (mailServer.getReceivedEmailSize() == 0) { - Assert.fail("No SmtpNotification was sent"); - } - @SuppressWarnings("rawtypes") - Iterator emailIter = mailServer.getReceivedEmail(); - SmtpMessage email = (SmtpMessage)emailIter.next(); - System.out.println("Subject:" + email.getHeaderValue("Subject")); - System.out.println("Body:" + email.getBody()); - - if (!email.getBody().contains("Service One")) { - Assert.fail("Notification does not contain the correct service"); - } - - } catch (Exception e) { - logger.error("No exceptions please."); - e.printStackTrace(); - - Assert.fail(); - } finally { - tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_SMTP_KEY); - tckBusinessService.deleteJoePublisherService(authInfoJoe); - tckBusiness.deleteJoePublisherBusiness(authInfoJoe); - tckTModel.deleteJoePublisherTmodel(authInfoJoe); - } - } - - - @Test - public void joePublisherUpdateBusiness_HTTP() { - try { - tckTModel.saveJoePublisherTmodel(authInfoJoe); - tckBusiness.saveJoePublisherBusiness(authInfoJoe); - tckBusinessService.saveJoePublisherService(authInfoJoe); - //Saving the Listener Service - tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_HTTP_SERVICE_XML, httpPort, "localhost"); - //Saving the Subscription - tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_XML); - //Changing the service we subscribed to "JoePublisherService" - Thread.sleep(1000); - logger.info("Deleting Business ********** "); - tckBusiness.updateJoePublisherBusiness(authInfoJoe); - - //waiting up to 100 seconds for the listener to notice the change. - String test=""; - for (int i=0; i<200; i++) { - Thread.sleep(500); - System.out.print("."); - if (UDDISubscriptionListenerImpl.notificationCount > 0) { - logger.info("Received Notification"); - break; - } else { - System.out.print(test); - } - } - if (UDDISubscriptionListenerImpl.notificationCount == 0) { - Assert.fail("No Notification was sent"); - } - if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name xml:lang=\"en\">Service One</name>")) { - Assert.fail("Notification does not contain the correct service"); - } - - } catch (Exception e) { - logger.error("No exceptions please."); - e.printStackTrace(); - - Assert.fail(); - } finally { - tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_KEY); - tckTModel.deleteJoePublisherTmodel(authInfoJoe); - } - } - +public class API_090_SubscriptionListenerIntegrationTest { + + private static final Log logger = LogFactory.getLog(API_090_SubscriptionListenerIntegrationTest.class); + private static API_010_PublisherTest api010 = new API_010_PublisherTest(); + private static TckTModel tckTModel = new TckTModel(new UDDIPublicationImpl(), new UDDIInquiryImpl()); + static UDDIPublicationPortType publication = new UDDIPublicationImpl(); + static UDDISubscriptionPortType subscription = new UDDISubscriptionImpl(); + private static TckBusiness tckBusiness = new TckBusiness(new UDDIPublicationImpl(), new UDDIInquiryImpl()); + private static TckBusinessService tckBusinessService = new TckBusinessService(new UDDIPublicationImpl(), new UDDIInquiryImpl()); + private static TckSubscriptionListener tckSubscriptionListener = new TckSubscriptionListener(new UDDISubscriptionImpl(), new UDDIPublicationImpl()); + private static Endpoint endPoint; + private static String authInfoJoe = null; + private static String authInfoMary = null; + private static SimpleSmtpServer mailServer; + + private static Integer smtpPort = 25; + private static Integer httpPort = 80; + + @AfterClass + public static void stopManager() throws ConfigurationException { + //manager.stop(); + //shutting down the TCK SubscriptionListener + endPoint.stop(); + Registry.stop(); + mailServer.stop(); + } + static String httpEndpoint = null; + + @BeforeClass + public static void startManager() throws ConfigurationException { + Registry.start(); + try { + smtpPort = 9700 + new Random().nextInt(99); + httpPort = 9600 + new Random().nextInt(99); + System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.host", "localhost"); + System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.port", String.valueOf(smtpPort)); + System.setProperty(Property.DEFAULT_JUDDI_EMAIL_PREFIX + "mail.smtp.from", "[email protected]"); + mailServer = SimpleSmtpServer.start(smtpPort); + //bring up the TCK HTTP SubscriptionListener + httpEndpoint = "http://localhost:" + httpPort + "/tcksubscriptionlistener"; + System.out.println("Bringing up SubscriptionListener endpoint at " + httpEndpoint); + endPoint = Endpoint.publish(httpEndpoint, new UDDISubscriptionListenerImpl()); + logger.debug("Getting auth tokens.."); + + api010.saveJoePublisher(); + api010.saveMaryPublisher(); + UDDISecurityPortType security = new UDDISecurityImpl(); + authInfoJoe = TckSecurity.getAuthToken(security, TckPublisher.getJoePublisherId(), TckPublisher.getJoePassword()); + Assert.assertNotNull(authInfoJoe); + + authInfoMary = TckSecurity.getAuthToken(security, TckPublisher.getMaryPublisherId(), TckPublisher.getMaryPassword()); + Assert.assertNotNull(authInfoMary); + + } catch (Exception e) { + logger.error(e.getMessage(), e); + Assert.fail(e.getMessage()); + } + } + + @Test + public void joePublisherUpdateService_HTTP() { + try { + tckTModel.saveJoePublisherTmodel(authInfoJoe); + tckBusiness.saveJoePublisherBusiness(authInfoJoe); + //Saving the binding template that will be called by the server for a subscription event + tckBusinessService.saveJoePublisherService(authInfoJoe); + //Saving the HTTP Listener Service + tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_HTTP_SERVICE_XML, httpPort, "localhost"); + //Saving the HTTP Subscription + tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_XML); + //Changing the service we subscribed to "JoePublisherService" + Thread.sleep(1000); + logger.info("Updating Service ********** "); + tckBusinessService.updateJoePublisherService(authInfoJoe, "foo"); + + //waiting up to 100 seconds for the listener to notice the change. + for (int i = 0; i < 200; i++) { + Thread.sleep(500); + System.out.print("."); + if (UDDISubscriptionListenerImpl.notificationCount > 0) { + logger.info("Received HTTP Notification"); + break; + } + } + if (UDDISubscriptionListenerImpl.notificationCount == 0) { + Assert.fail("No HttpNotification was sent"); + } + if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name xml:lang=\"en\">Service One</name>")) { + Assert.fail("Notification does not contain the correct service"); + } + + } catch (Exception e) { + logger.error("No exceptions please."); + e.printStackTrace(); + + Assert.fail(); + } finally { + tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_KEY); + tckBusinessService.deleteJoePublisherService(authInfoJoe); + tckBusiness.deleteJoePublisherBusiness(authInfoJoe); + tckTModel.deleteJoePublisherTmodel(authInfoJoe); + } + } + + @Test + public void joePublisherUpdateService_SMTP() { + try { + tckTModel.saveJoePublisherTmodel(authInfoJoe); + tckBusiness.saveJoePublisherBusiness(authInfoJoe); + //Saving the binding template that will be called by the server for a subscription event + tckBusinessService.saveJoePublisherService(authInfoJoe); + //Saving the SMTP Listener Service + tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_SMTP_SERVICE_XML, 0, "localhost"); + //Saving the SMTP Subscription + tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_SMTP_XML); + //Changing the service we subscribed to "JoePublisherService" + Thread.sleep(1000); + logger.info("Updating Service ********** "); + tckBusinessService.updateJoePublisherService(authInfoJoe, "foo"); + + //waiting up to 100 seconds for the listener to notice the change. + for (int i = 0; i < 200; i++) { + Thread.sleep(500); + System.out.print("."); + if (mailServer.getReceivedEmailSize() > 0) { + logger.info("Received Email Notification"); + break; + } + } + if (mailServer.getReceivedEmailSize() == 0) { + Assert.fail("No SmtpNotification was sent"); + } + @SuppressWarnings("rawtypes") + Iterator emailIter = mailServer.getReceivedEmail(); + SmtpMessage email = (SmtpMessage) emailIter.next(); + System.out.println("Subject:" + email.getHeaderValue("Subject")); + System.out.println("Body:" + email.getBody()); + + if (!email.getBody().contains("Service One")) { + Assert.fail("Notification does not contain the correct service"); + } + + } catch (Exception e) { + logger.error("No exceptions please."); + e.printStackTrace(); + + Assert.fail(); + } finally { + tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_SMTP_KEY); + tckBusinessService.deleteJoePublisherService(authInfoJoe); + tckBusiness.deleteJoePublisherBusiness(authInfoJoe); + tckTModel.deleteJoePublisherTmodel(authInfoJoe); + } + } + + @Test + public void joePublisherUpdateBusiness_HTTP() { + try { + tckTModel.saveJoePublisherTmodel(authInfoJoe); + tckBusiness.saveJoePublisherBusiness(authInfoJoe); + tckBusinessService.saveJoePublisherService(authInfoJoe); + //Saving the Listener Service + tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_HTTP_SERVICE_XML, httpPort, "localhost"); + //Saving the Subscription + tckSubscriptionListener.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_XML); + //Changing the service we subscribed to "JoePublisherService" + Thread.sleep(1000); + logger.info("Deleting Business ********** "); + tckBusiness.updateJoePublisherBusiness(authInfoJoe); + + //waiting up to 100 seconds for the listener to notice the change. + String test = ""; + for (int i = 0; i < 200; i++) { + Thread.sleep(500); + System.out.print("."); + if (UDDISubscriptionListenerImpl.notificationCount > 0) { + logger.info("Received Notification"); + break; + } else { + System.out.print(test); + } + } + if (UDDISubscriptionListenerImpl.notificationCount == 0) { + Assert.fail("No Notification was sent"); + } + if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name xml:lang=\"en\">Service One</name>")) { + Assert.fail("Notification does not contain the correct service"); + } + + } catch (Exception e) { + logger.error("No exceptions please."); + e.printStackTrace(); + + Assert.fail(); + } finally { + tckSubscriptionListener.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_KEY); + tckTModel.deleteJoePublisherTmodel(authInfoJoe); + } + } + + /** + * PUBLISHERASSERTION tests joe want's updates on when someone asserts + * that they own his business + * + * @throws Exception + */ + @Test + //@Ignore + public void joePublisherUpdate_PUBLISHERASSERTION_DETAIL_TO() throws Exception { + + logger.info("joePublisherUpdate_HTTP_PUBLISHERASSERTION_DETAIL_TO"); + + UDDISubscriptionListenerImpl.notifcationMap.clear(); + UDDISubscriptionListenerImpl.notificationCount=0; + Holder<List<Subscription>> holder = null; + try { + + tckTModel.saveJoePublisherTmodel(authInfoJoe); + //tckTModelJoe.saveTModels(authInfoJoe, TckTModel.JOE_PUBLISHER_TMODEL_XML_SUBSCRIPTION3); + + tckTModel.saveMaryPublisherTmodel(authInfoMary); + BusinessEntity saveMaryPublisherBusiness = tckBusiness.saveMaryPublisherBusiness(authInfoMary); + + tckBusiness.saveJoePublisherBusiness(authInfoJoe); + tckBusinessService.saveJoePublisherService(authInfoJoe); + //Saving the Listener Service + String bindingkey = tckSubscriptionListener.saveService(authInfoJoe, TckSubscriptionListener.LISTENER_HTTP_SERVICE_XML, httpPort, "localhost"); + + //Saving the Subscription + holder = new Holder<List<Subscription>>(); + holder.value = new ArrayList<Subscription>(); + Subscription sub = new Subscription(); + sub.setBindingKey(bindingkey); + sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(5000)); + sub.setSubscriptionFilter(new SubscriptionFilter()); + sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_FROM_KEY_INCOMPLETE); + + holder.value.add(sub); + subscription.saveSubscription(authInfoJoe, holder); + logger.info("subscription saved for " + holder.value.get(0).getSubscriptionKey()); + //tckSubscriptionListenerJoe.saveNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION3_XML); + //Changing the service we subscribed to "JoePublisherService" + Thread.sleep(1000); + logger.info("saving Mary's publisher assertion********** "); + AddPublisherAssertions pa = new AddPublisherAssertions(); + pa.setAuthInfo(authInfoMary); + PublisherAssertion pas = new PublisherAssertion(); + pas.setToKey(TckBusiness.MARY_BUSINESS_KEY); + pas.setFromKey(TckBusiness.JOE_BUSINESS_KEY); + pas.setKeyedReference(new KeyedReference(UDDIConstants.RELATIONSHIPS, "parent", "parent-child")); + pa.getPublisherAssertion().add(pas); + + publication.addPublisherAssertions(pa); + boolean found = verifyDelivery(TckBusiness.MARY_BUSINESS_KEY); + + DeletePublisherAssertions deletePublisherAssertions = new DeletePublisherAssertions(); + deletePublisherAssertions.setAuthInfo(authInfoMary); + deletePublisherAssertions.getPublisherAssertion().add(pas); + publication.deletePublisherAssertions(deletePublisherAssertions); + if (!found) { + + Assert.fail("Notification does not contain the correct service."); + } + + } catch (Exception e) { + logger.error("No exceptions please."); + e.printStackTrace(); + + Assert.fail(); + } finally { + //tckSubscriptionListenerJoe.deleteNotifierSubscription(authInfoJoe, TckSubscriptionListener.SUBSCRIPTION_KEY); + DeleteSubscription ds = new DeleteSubscription(); + ds.setAuthInfo(authInfoJoe); + ds.getSubscriptionKey().add(holder.value.get(0).getSubscriptionKey()); + subscription.deleteSubscription(ds); + tckBusiness.deleteMaryPublisherBusiness(authInfoMary); + tckTModel.deleteMaryPublisherTmodel(authInfoMary); + + tckBusinessService.deleteJoePublisherService(authInfoJoe); + tckBusiness.deleteJoePublisherBusiness(authInfoJoe); + tckTModel.deleteJoePublisherTmodel(authInfoJoe); + tckTModel.deleteTModel(authInfoJoe, TckTModel.JOE_PUBLISHER_TMODEL_SUBSCRIPTION3_TMODEL_KEY, TckTModel.JOE_PUBLISHER_TMODEL_XML_SUBSCRIPTION3); + + } + } + + public static boolean verifyDelivery(String findMe) { + for (int i = 0; i < TckPublisher.getSubscriptionTimeout(); i++) { + try { + if (UDDISubscriptionListenerImpl.notificationCount > 0) { + Iterator<String> it = UDDISubscriptionListenerImpl.notifcationMap.values().iterator(); + + while (it.hasNext()) { + String test = it.next(); + if (test.toLowerCase().contains(findMe.toLowerCase())) { + return true; + } + } + } + Thread.sleep(1000); + } catch (Exception ex) { + ex.printStackTrace(); + } + System.out.print("."); + //if (UDDISubscriptionListenerImpl.notificationCount > 0) { } + } + logger.info("RX " + UDDISubscriptionListenerImpl.notificationCount + " notifications"); + Iterator<String> it = UDDISubscriptionListenerImpl.notifcationMap.values().iterator(); + boolean found = false; + + while (it.hasNext()) { + String test = it.next(); + if (TckCommon.isDebug()) { + logger.info("Notification: " + test); + } + if (test.toLowerCase().contains(findMe.toLowerCase())) { + found = true; + } + } + return found; + } + } http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-core/src/test/java/org/apache/juddi/api/impl/API_091_RMISubscriptionListenerIntegrationTest.java ---------------------------------------------------------------------- diff --git a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_091_RMISubscriptionListenerIntegrationTest.java b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_091_RMISubscriptionListenerIntegrationTest.java index ef864c1..35c98d2 100644 --- a/juddi-core/src/test/java/org/apache/juddi/api/impl/API_091_RMISubscriptionListenerIntegrationTest.java +++ b/juddi-core/src/test/java/org/apache/juddi/api/impl/API_091_RMISubscriptionListenerIntegrationTest.java @@ -20,6 +20,8 @@ import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; +import java.util.Iterator; +import java.util.Map; import java.util.Random; import org.apache.commons.configuration.ConfigurationException; @@ -115,6 +117,8 @@ public class API_091_RMISubscriptionListenerIntegrationTest @Test public void joePublisher() { try { + UDDISubscriptionListenerImpl.notifcationMap.clear(); + UDDISubscriptionListenerImpl.notificationCount=0; tckTModel.saveJoePublisherTmodel(authInfoJoe); tckBusiness.saveJoePublisherBusiness(authInfoJoe); tckBusinessService.saveJoePublisherService(authInfoJoe); @@ -126,7 +130,17 @@ public class API_091_RMISubscriptionListenerIntegrationTest tckBusinessService.updateJoePublisherService(authInfoJoe, "foo"); //waiting up to 100 seconds for the listener to notice the change. - String test=""; + boolean found=API_090_SubscriptionListenerIntegrationTest.verifyDelivery("Service One"); + if (!found) + { + logger.warn("The test failed, dumping any received notifications"); + Iterator<Map.Entry<Integer, String>> iterator = UDDISubscriptionListenerImpl.notifcationMap.entrySet().iterator(); + while (iterator.hasNext()){ + logger.info("Notification RX: " +iterator.next().getValue()); + } + } + Assert.assertTrue("Notification failed " +UDDISubscriptionListenerImpl.notificationCount + " items returned" , found); + /*String test=""; for (int i=0; i<200; i++) { Thread.sleep(500); System.out.print("."); @@ -139,9 +153,9 @@ public class API_091_RMISubscriptionListenerIntegrationTest if (UDDISubscriptionListenerImpl.notificationCount == 0) { Assert.fail("No Notification was sent"); } - if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("<name xml:lang=\"en\">Service One</name>")) { + if (!UDDISubscriptionListenerImpl.notifcationMap.get(0).contains("foo")) { Assert.fail("Notification does not contain the correct service"); - } + }*/ } catch (Exception e) { e.printStackTrace(); http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribe.java ---------------------------------------------------------------------- diff --git a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribe.java b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribe.java index 3541a0c..38306ab 100644 --- a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribe.java +++ b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribe.java @@ -139,16 +139,64 @@ public class UddiSubscribe implements ISubscriptionCallback, Runnable { System.out.println("Registered FindTModel subscription key: " + (subscriptionTM.getSubscriptionKey()) + " bindingkey: " + subscriptionTM.getBindingKey()); + sub = new Subscription(); + sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(1000)); + sub.setBindingKey(start.getBindingKey()); + sub.setSubscriptionFilter(new SubscriptionFilter()); + sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_COMPLETE); + + Subscription subscriptionPA = clerk.register(sub, clerk.getUDDINode().getApiNode()); + + System.out.println("Registered Completed PublisherAssertion subscription key: " + (subscriptionPA.getSubscriptionKey()) + " bindingkey: " + subscriptionTM.getBindingKey()); + + sub = new Subscription(); + sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(1000)); + sub.setBindingKey(start.getBindingKey()); + sub.setSubscriptionFilter(new SubscriptionFilter()); + sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_FROM_KEY_INCOMPLETE); + + Subscription subscriptionPA2 = clerk.register(sub, clerk.getUDDINode().getApiNode()); + + System.out.println("Registered FROM incomplete PublisherAssertion subscription key: " + (subscriptionPA2.getSubscriptionKey()) + " bindingkey: " + subscriptionTM.getBindingKey()); + + sub = new Subscription(); + sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(1000)); + sub.setBindingKey(start.getBindingKey()); + sub.setSubscriptionFilter(new SubscriptionFilter()); + sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_TO_KEY_INCOMPLETE); + + Subscription subscriptionPA3 = clerk.register(sub, clerk.getUDDINode().getApiNode()); + + System.out.println("Registered TO incomplete PublisherAssertion subscription key: " + (subscriptionPA3.getSubscriptionKey()) + " bindingkey: " + subscriptionTM.getBindingKey()); + + sub = new Subscription(); + sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(1000)); + sub.setBindingKey(start.getBindingKey()); + sub.setSubscriptionFilter(new SubscriptionFilter()); + sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_BOTH_INCOMPLETE); + + Subscription subscriptionPA4 = clerk.register(sub, clerk.getUDDINode().getApiNode()); + + System.out.println("Registered recently deleted PublisherAssertion subscription key: " + (subscriptionPA4.getSubscriptionKey()) + " bindingkey: " + subscriptionTM.getBindingKey()); + System.out.println("Waiting for callbacks. Now would be a good time to launch either another program or juddi-gui to make some changes. Press any key to stop!"); //Thread hook = new Thread(this); - // Runtime.getRuntime().addShutdownHook(hook); - - System.in.read(); - + // Runtime.getRuntime().addShutdownHook(hook); + + System.in.read(); + SubscriptionCallbackListener.stop(client, "default", start.getBindingKey()); clerk.unRegisterSubscription(subscriptionBiz.getSubscriptionKey()); clerk.unRegisterSubscription(subscriptionSvc.getSubscriptionKey()); clerk.unRegisterSubscription(subscriptionTM.getSubscriptionKey()); + clerk.unRegisterSubscription(subscriptionPA.getSubscriptionKey()); + clerk.unRegisterSubscription(subscriptionPA2.getSubscriptionKey()); + clerk.unRegisterSubscription(subscriptionPA3.getSubscriptionKey()); + clerk.unRegisterSubscription(subscriptionPA4.getSubscriptionKey()); clerk.unRegisterTModel(createKeyGenator.getTModelKey()); http://git-wip-us.apache.org/repos/asf/juddi/blob/bacfa935/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribeAssertionStatus.java ---------------------------------------------------------------------- diff --git a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribeAssertionStatus.java b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribeAssertionStatus.java index 19839d9..58f241f 100644 --- a/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribeAssertionStatus.java +++ b/juddi-examples/more-uddi-samples/src/main/java/org/apache/juddi/samples/UddiSubscribeAssertionStatus.java @@ -105,8 +105,9 @@ public class UddiSubscribeAssertionStatus implements ISubscriptionCallback, Runn sub.setBindingKey(start.getBindingKey()); sub.setSubscriptionFilter(new SubscriptionFilter()); sub.getSubscriptionFilter().setGetAssertionStatusReport(new GetAssertionStatusReport()); + //it's optional - + //sub.getSubscriptionFilter().getGetAssertionStatusReport().setCompletionStatus(CompletionStatus.STATUS_COMPLETE); Subscription subscriptionBiz = clerk.register(sub, clerk.getUDDINode().getApiNode()); System.out.println("Registered GetAssertionStatus subscription key: " + (subscriptionBiz.getSubscriptionKey()) + " bindingkey: " + subscriptionBiz.getBindingKey()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
