use of joynr.SubscriptionRequest in project joynr by bmwcarit.
the class PublicationManagerTest method addPublicationWithExpiryDate.
@SuppressWarnings("unchecked")
@Test(timeout = 3000)
public void addPublicationWithExpiryDate() throws Exception {
long pubicationActiveForMs = 300;
OnChangeSubscriptionQos qos = new OnChangeSubscriptionQos();
qos.setMinIntervalMs(0);
qos.setValidityMs(pubicationActiveForMs);
qos.setPublicationTtlMs(1000);
SubscriptionRequest subscriptionRequest = new SubscriptionRequest(SUBSCRIPTION_ID, "location", qos);
when(providerDirectory.get(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(providerContainer);
when(providerDirectory.contains(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(true);
publicationManager.addSubscriptionRequest(PROXY_PARTICIPANT_ID, PROVIDER_PARTICIPANT_ID, subscriptionRequest);
publicationManager.attributeValueChanged(SUBSCRIPTION_ID, valueToPublish);
// sending initial value plus the attributeValueChanged
verify(dispatcher, times(2)).sendSubscriptionPublication(eq(PROVIDER_PARTICIPANT_ID), (Set<String>) argThat(contains(PROXY_PARTICIPANT_ID)), any(SubscriptionPublication.class), any(MessagingQos.class));
Thread.sleep(pubicationActiveForMs);
reset(dispatcher);
publicationManager.attributeValueChanged(SUBSCRIPTION_ID, valueToPublish);
verify(dispatcher, timeout(300).times(0)).sendSubscriptionPublication(eq(PROVIDER_PARTICIPANT_ID), (Set<String>) argThat(contains(PROXY_PARTICIPANT_ID)), any(SubscriptionPublication.class), any(MessagingQos.class));
}
use of joynr.SubscriptionRequest in project joynr by bmwcarit.
the class PublicationManagerTest method startAndStopPeriodicPublication.
@SuppressWarnings("unchecked")
@Test(timeout = 3000)
public void startAndStopPeriodicPublication() throws Exception {
int period = 200;
int testLengthMax = 3000;
PeriodicSubscriptionQos qos = new PeriodicSubscriptionQos();
qos.setPeriodMs(200).setValidityMs(testLengthMax).setPublicationTtlMs(testLengthMax);
SubscriptionRequest subscriptionRequest = new SubscriptionRequest(SUBSCRIPTION_ID, "location", qos);
when(providerDirectory.get(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(providerContainer);
when(providerDirectory.contains(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(true);
publicationManager.addSubscriptionRequest(PROXY_PARTICIPANT_ID, PROVIDER_PARTICIPANT_ID, subscriptionRequest);
verify(dispatcher, timeout(period * 5).times(6)).sendSubscriptionPublication(eq(PROVIDER_PARTICIPANT_ID), (Set<String>) argThat(contains(PROXY_PARTICIPANT_ID)), any(SubscriptionPublication.class), any(MessagingQos.class));
reset(dispatcher);
publicationManager.stopPublication(SUBSCRIPTION_ID);
verify(dispatcher, timeout(testLengthMax).times(0)).sendSubscriptionPublication(eq(PROVIDER_PARTICIPANT_ID), (Set<String>) argThat(contains(PROXY_PARTICIPANT_ID)), any(SubscriptionPublication.class), any(MessagingQos.class));
}
use of joynr.SubscriptionRequest in project joynr by bmwcarit.
the class PublicationManagerTest method delayBroadcastPublicationBurstsForOnChangeSubscriptions.
@SuppressWarnings("unchecked")
@Test(timeout = 4000)
public void delayBroadcastPublicationBurstsForOnChangeSubscriptions() throws Exception {
int subscriptionLength = 500;
int minIntervalMs = 100;
OnChangeSubscriptionQos qos = new OnChangeSubscriptionQos();
qos.setMinIntervalMs(minIntervalMs);
qos.setValidityMs(subscriptionLength);
qos.setPublicationTtlMs(400);
String subscriptionId = "subscriptionId";
String proxyId = "proxyId";
String providerId = "providerId";
String broadcastName = "location";
ProviderDirectory providerDirectory = mock(ProviderDirectory.class);
SubscriptionRequest subscriptionRequest = new BroadcastSubscriptionRequest(subscriptionId, broadcastName, new BroadcastFilterParameters(), qos);
PublicationManager publicationManager = new PublicationManagerImpl(attributePollInterpreter, dispatcher, providerDirectory, cleanupScheduler, Mockito.mock(SubscriptionRequestStorage.class), shutdownNotifier);
when(providerDirectory.get(eq(providerId))).thenReturn(providerContainer);
when(providerDirectory.contains(eq(providerId))).thenReturn(true);
publicationManager.addSubscriptionRequest(proxyId, providerId, subscriptionRequest);
List<BroadcastFilter> noFilters = Lists.newArrayList();
publicationManager.broadcastOccurred(subscriptionId, noFilters, 0);
int nrIterations = 10;
for (int i = 1; i <= nrIterations; i++) {
publicationManager.broadcastOccurred(subscriptionId, noFilters, i);
}
Thread.sleep(minIntervalMs);
publicationManager.broadcastOccurred(subscriptionId, noFilters, nrIterations + 1);
verify(dispatcher, times(2)).sendSubscriptionPublication(eq(providerId), (Set<String>) argThat(contains(proxyId)), any(SubscriptionPublication.class), any(MessagingQos.class));
verify(dispatcher).sendSubscriptionReply(anyString(), anyString(), any(SubscriptionReply.class), any(MessagingQos.class));
Thread.sleep(subscriptionLength);
verifyNoMoreInteractions(dispatcher);
reset(dispatcher);
}
use of joynr.SubscriptionRequest in project joynr by bmwcarit.
the class PublicationManagerTest method delayAttributePublicationBurstsForOnChangeSubscriptions.
@SuppressWarnings("unchecked")
@Test(timeout = 4000)
public void delayAttributePublicationBurstsForOnChangeSubscriptions() throws Exception {
int subscriptionLength = 500;
OnChangeSubscriptionQos qos = new OnChangeSubscriptionQos();
qos.setMinIntervalMs(400);
qos.setValidityMs(subscriptionLength);
qos.setPublicationTtlMs(400);
String subscriptionId = "subscriptionId";
String proxyId = "proxyId";
String providerId = "providerId";
String attributeName = "location";
ProviderDirectory providerDirectory = mock(ProviderDirectory.class);
SubscriptionRequest subscriptionRequest = new SubscriptionRequest(subscriptionId, attributeName, qos);
PublicationManager publicationManager = new PublicationManagerImpl(attributePollInterpreter, dispatcher, providerDirectory, cleanupScheduler, Mockito.mock(SubscriptionRequestStorage.class), shutdownNotifier);
when(providerDirectory.get(eq(providerId))).thenReturn(providerContainer);
when(providerDirectory.contains(eq(providerId))).thenReturn(true);
final Semaphore onReceiveSemaphore = new Semaphore(0);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) {
onReceiveSemaphore.release();
return null;
}
}).when(dispatcher).sendSubscriptionPublication(eq(providerId), (Set<String>) argThat(contains(proxyId)), any(SubscriptionPublication.class), any(MessagingQos.class));
publicationManager.addSubscriptionRequest(proxyId, providerId, subscriptionRequest);
/* a burst of attribute changes only leads to one publication send out */
for (int i = 0; i < 3; i++) {
publicationManager.attributeValueChanged(subscriptionId, i);
}
assertTrue(onReceiveSemaphore.tryAcquire(2, subscriptionLength + 1000, TimeUnit.MILLISECONDS));
assertFalse(onReceiveSemaphore.tryAcquire(1, Math.max(subscriptionLength, 200), TimeUnit.MILLISECONDS));
}
use of joynr.SubscriptionRequest in project joynr by bmwcarit.
the class PublicationManagerTest method broadcastPublicationIsSent.
@SuppressWarnings("unchecked")
@Test
public void broadcastPublicationIsSent() throws Exception {
publicationManager = new PublicationManagerImpl(attributePollInterpreter, dispatcher, providerDirectory, cleanupScheduler, Mockito.mock(SubscriptionRequestStorage.class), shutdownNotifier);
long minInterval_ms = 0;
long ttl = 1000;
testBroadcastInterface.LocationUpdateWithSpeedSelectiveBroadcastFilterParameters filterParameters = new testBroadcastInterface.LocationUpdateWithSpeedSelectiveBroadcastFilterParameters();
OnChangeSubscriptionQos qos = new OnChangeSubscriptionQos().setMinIntervalMs(minInterval_ms).setExpiryDateMs(SubscriptionQos.NO_EXPIRY_DATE).setPublicationTtlMs(ttl);
;
SubscriptionRequest subscriptionRequest = new BroadcastSubscriptionRequest(SUBSCRIPTION_ID, "subscribedToName", filterParameters, qos);
when(providerDirectory.get(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(providerContainer);
when(providerDirectory.contains(eq(PROVIDER_PARTICIPANT_ID))).thenReturn(true);
publicationManager.addSubscriptionRequest(PROXY_PARTICIPANT_ID, PROVIDER_PARTICIPANT_ID, subscriptionRequest);
GpsLocation location = new GpsLocation(1.0, 2.0, 3.0, GpsFixEnum.MODE2D, 4.0, 5.0, 6.0, 7.0, 9l, 10l, 11);
double speed = 100;
publicationManager.broadcastOccurred(subscriptionRequest.getSubscriptionId(), new ArrayList<BroadcastFilter>(), location, speed);
ArgumentCaptor<SubscriptionPublication> publicationCaptured = ArgumentCaptor.forClass(SubscriptionPublication.class);
ArgumentCaptor<MessagingQos> qosCaptured = ArgumentCaptor.forClass(MessagingQos.class);
verify(dispatcher).sendSubscriptionPublication(eq(PROVIDER_PARTICIPANT_ID), (Set<String>) argThat(contains(PROXY_PARTICIPANT_ID)), publicationCaptured.capture(), qosCaptured.capture());
List<?> response = (List<?>) publicationCaptured.getValue().getResponse();
assertEquals(location, response.get(0));
assertEquals(speed, response.get(1));
assertEquals(ttl, qosCaptured.getValue().getRoundTripTtl_ms());
}
Aggregations