This project has retired. For details please refer to its Attic page.
JUDDI_101_ClientSubscriptionCallbackAPIIntegrationTest xref
View Javadoc
1   /*
2    * Copyright 2014 The Apache Software Foundation.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.apache.juddi.v3.tck;
17  
18  import java.util.ArrayList;
19  import java.util.Iterator;
20  import java.util.List;
21  import java.util.Map;
22  import javax.xml.datatype.DatatypeFactory;
23  import org.apache.commons.configuration.ConfigurationException;
24  import org.apache.commons.logging.Log;
25  import org.apache.commons.logging.LogFactory;
26  import org.apache.juddi.api_v3.Node;
27  import org.apache.juddi.jaxb.PrintUDDI;
28  import org.apache.juddi.v3.client.UDDIConstants;
29  import org.apache.juddi.v3.client.config.UDDIClerk;
30  import org.apache.juddi.v3.client.config.UDDIClient;
31  import org.apache.juddi.v3.client.subscription.ISubscriptionCallback;
32  import org.apache.juddi.v3.client.subscription.SubscriptionCallbackListener;
33  import org.apache.juddi.v3_service.JUDDIApiPortType;
34  import org.junit.AfterClass;
35  import org.junit.Assert;
36  import org.junit.Assume;
37  import org.junit.BeforeClass;
38  import org.junit.Ignore;
39  import org.junit.Test;
40  import org.uddi.api_v3.BindingTemplate;
41  import org.uddi.api_v3.BusinessEntity;
42  import org.uddi.api_v3.BusinessService;
43  import org.uddi.api_v3.BusinessServices;
44  import org.uddi.api_v3.FindBusiness;
45  import org.uddi.api_v3.FindQualifiers;
46  import org.uddi.api_v3.Name;
47  import org.uddi.api_v3.TModel;
48  import org.uddi.sub_v3.Subscription;
49  import org.uddi.sub_v3.SubscriptionFilter;
50  import org.uddi.sub_v3.SubscriptionResultsList;
51  import org.uddi.v3_service.UDDISecurityPortType;
52  
53  /**
54   *
55   * @author Alex O'Ree
56   */
57  public class JUDDI_101_ClientSubscriptionCallbackAPIIntegrationTest implements ISubscriptionCallback {
58  
59          private static final Log logger = LogFactory.getLog(JUDDI_101_ClientSubscriptionCallbackAPIIntegrationTest.class);
60          private static UDDIClient manager;
61          private static UDDIClerk clerk;
62          private static UDDISecurityPortType security = null;
63          private static JUDDIApiPortType publisher = null;
64  
65          private static String authInfo = null;
66  
67          @AfterClass
68          public static void stopManager() throws ConfigurationException {
69  
70          }
71  
72          @BeforeClass
73          public static void startManager() throws ConfigurationException {
74                  if (!TckPublisher.isEnabled()) return;
75                  manager = new UDDIClient();
76                  manager.start();
77                  Iterator<Node> iterator = manager.getClientConfig().getUDDINodeList().iterator();
78                  while (iterator.hasNext()){
79                          Node next = iterator.next();
80                          logger.info("NODE " + next.getClientName() + " " + next.getName() + " " + next.getProxyTransport());
81                  }
82                  Iterator<Map.Entry<String, UDDIClerk>> iterator1 = manager.getClientConfig().getUDDIClerks().entrySet().iterator();
83                  while (iterator1.hasNext()){
84                          Map.Entry<String, UDDIClerk> next = iterator1.next();
85                          logger.info("CLERK " + next.getKey() + " " + next.getValue().getName());
86                  }
87                  clerk = manager.getClerk("uddiv3");
88                  clerk.setPassword(TckPublisher.getJoePassword());
89                  clerk.setPublisher(TckPublisher.getJoePublisherId());
90                  clerk.setIsPasswordEncrypted(false);
91                  try {
92                          //logger.debug("Getting auth tokens..");
93                  } catch (Exception e) {
94                          logger.error(e.getMessage(), e);
95                          Assert.fail(e.getMessage());
96                  }
97                  JUDDI_300_MultiNodeIntegrationTest.testSetupReplicationConfig();
98          }
99  
100         @Test
101         @Ignore
102         public void SubscriptionCallbackTest1() throws Exception {
103                 //first some setup
104                 if (!TckPublisher.isEnabled()) return;
105                 reset();
106 
107                 TModel createKeyGenator = UDDIClerk.createKeyGenator("somebusiness", "A test key domain SubscriptionCallbackTest1", "SubscriptionCallbackTest1");
108                 Assert.assertNotNull(createKeyGenator);
109                 clerk.register(createKeyGenator);
110                 logger.info("Registered tModel keygen: " + createKeyGenator.getTModelKey());
111 
112                 //setup the business to attach to
113                 BusinessEntity be = new BusinessEntity();
114                 be.setBusinessKey("uddi:somebusiness:somebusinesskey");
115                 be.getName().add(new Name("somebusiness SubscriptionCallbackTest1", null));
116                 be.setBusinessServices(new BusinessServices());
117                 BusinessService bs = new BusinessService();
118                 bs.setBusinessKey("uddi:somebusiness:somebusinesskey");
119                 bs.setServiceKey("uddi:somebusiness:someservicekey");
120                 bs.getName().add(new Name("service SubscriptionCallbackTest1", null));
121                 be.getBusinessServices().getBusinessService().add(bs);
122                 BusinessEntity register = clerk.register(be);
123                 logger.info("Registered business keygen: " + register.getBusinessKey());
124 
125                 //start up our listener
126                 BindingTemplate start = SubscriptionCallbackListener.start(manager, "uddiv3");
127                 Assert.assertNotNull(start);
128 
129                 if (TckCommon.isDebug()) {
130                         PrintUDDI<BindingTemplate> p = new PrintUDDI<BindingTemplate>();
131                         logger.info(p.print(start));
132                 }
133 
134                 //register for callbacks
135                 SubscriptionCallbackListener.registerCallback(this);
136 
137                 Subscription sub = new Subscription();
138 
139                 sub.setNotificationInterval(DatatypeFactory.newInstance().newDuration(1000));
140                 sub.setBindingKey(start.getBindingKey());
141                 sub.setSubscriptionFilter(new SubscriptionFilter());
142                 sub.getSubscriptionFilter().setFindBusiness(new FindBusiness());
143                 sub.getSubscriptionFilter().getFindBusiness().setFindQualifiers(new FindQualifiers());
144                 sub.getSubscriptionFilter().getFindBusiness().getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
145                 sub.getSubscriptionFilter().getFindBusiness().getName().add(new Name(UDDIConstants.WILDCARD, null));
146 
147                 Subscription subscription = clerk.register(sub);
148                 if (TckCommon.isDebug()) {
149                         PrintUDDI<Subscription> p2 = new PrintUDDI<Subscription>();
150                         logger.info(p2.print(subscription));
151                 }
152                 Assert.assertNotNull(subscription);
153                 Assert.assertNotNull(subscription.getBindingKey());
154                 Assert.assertNotNull(subscription.getSubscriptionKey());
155                 logger.info("Registered subscription key: " + (subscription.getSubscriptionKey()) + " bindingkey: " + subscription.getBindingKey());
156 
157                 //fetch the business just to verify binding registration
158                 BusinessEntity businessDetail = clerk.getBusinessDetail("uddi:somebusiness:somebusinesskey");
159                 Assert.assertNotNull(businessDetail);
160                 Assert.assertNotNull(businessDetail.getBusinessKey());
161                 Assert.assertNotNull(businessDetail.getBusinessServices());
162                 Assert.assertNotNull(businessDetail.getBusinessServices().getBusinessService().get(0));
163                 Assert.assertNotNull(businessDetail.getBusinessServices().getBusinessService().get(0).getBindingTemplates());
164                 Assert.assertNotNull(businessDetail.getBusinessServices().getBusinessService().get(0).getBindingTemplates().getBindingTemplate().get(0));
165                 if (TckCommon.isDebug()) {
166                         PrintUDDI<BusinessEntity> p2 = new PrintUDDI<BusinessEntity>();
167                         logger.info(p2.print(businessDetail));
168                 }
169 
170                 //trigger the callback
171                 BusinessEntity trigger = new BusinessEntity();
172                 trigger.getName().add(new Name("somebusiness trigger SubscriptionCallbackTest1", null));
173                 BusinessEntity triggered = clerk.register(trigger);
174                 //wait up to 30 seconds or until we get something
175                 long wait = TckPublisher.getSubscriptionTimeout();
176                 while (wait > 0 && notifications == 0) {
177                         Thread.sleep(1000);
178                         System.out.print(".");
179                         wait--;
180                 }
181 
182                 logger.info("Callback check." + notifications);
183                 //Thread.sleep(2000);
184                 SubscriptionCallbackListener.stop(manager, "uddiv3", start.getBindingKey());
185                 clerk.unRegisterSubscription(subscription.getSubscriptionKey());
186                 clerk.unRegisterTModel(createKeyGenator.getTModelKey());
187 
188                 clerk.unRegisterBusiness(triggered.getBusinessKey());
189                 clerk.unRegisterBusiness(businessDetail.getBusinessKey());
190                 //verify
191                 logger.info("Callback check." + notifications);
192                 Assert.assertTrue("No notifications received! " + notifications, notifications > 0);
193 
194         }
195 
196         private static void reset() {
197                 notifications = 0;
198                 notificationsMessages.clear();
199                 logger.info("Callback check." + notifications);
200         }
201         private static int notifications = 0;
202         private static List<SubscriptionResultsList> notificationsMessages = new ArrayList<SubscriptionResultsList>();
203 
204         @Override
205         public void handleCallback(SubscriptionResultsList body) {
206                 if (TckCommon.isDebug()) {
207                         PrintUDDI<SubscriptionResultsList> p2 = new PrintUDDI<SubscriptionResultsList>();
208                         logger.info(p2.print(body));
209                 }
210 
211                 notifications++;
212                 notificationsMessages.add(body);
213 
214                 logger.info("Callback received." + notifications);
215         }
216 
217         @Override
218         public void notifyEndpointStopped() {
219                 logger.info("Notify endpoints stopped");
220         }
221 
222 }