blob: 9191a10449b143e5ab24772c9e28bf2255800965 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.jmx;
import java.util.LinkedHashSet;
import javax.management.Notification;
import javax.management.NotificationFilter;
import org.apache.camel.Exchange;
import org.apache.camel.component.jmx.beans.ISimpleMXBean;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Tests that the NotificationFilter is applied if configured
*/
public class JMXNotificationFilterTest extends SimpleBeanFixture {
/**
* we'll track the rejected messages so we know what got filtered
*/
private LinkedHashSet<Notification> mRejected = new LinkedHashSet<Notification>();
@Test
public void testNotificationFilter() throws Exception {
ISimpleMXBean bean = getSimpleMXBean();
assertEquals("no notifications should have been filtered at this point", 0, mRejected.size());
// we should only get 5 messages, which is 1/2 the number of times we touched the object.
// The 1/2 is due to the behavior of the test NotificationFilter implemented below
getMockFixture().getMockEndpoint().setExpectedMessageCount(5);
for (int i = 0; i < 10; i++) {
bean.touch();
}
getMockFixture().waitForMessages();
assertEquals("5 notifications should have been filtered", 5, mRejected.size());
// assert that all of the rejected ones are odd and accepted ones even
for (Notification rejected : mRejected) {
assertEquals(1, rejected.getSequenceNumber() % 2);
}
for (Exchange received : getMockFixture().getMockEndpoint().getReceivedExchanges()) {
Notification n = (Notification) received.getIn().getBody();
assertEquals(0, n.getSequenceNumber() % 2);
}
}
@Override
protected JMXUriBuilder buildFromURI() {
// use the raw format so we can we can get the Notification and assert on the sequence
return super.buildFromURI().withNotificationFilter("#myFilter").withFormat("raw");
}
@SuppressWarnings("serial")
@Override
protected void initRegistry() {
super.initRegistry();
// initialize the registry with our filter
getRegistry().put("myFilter", new NotificationFilter() {
public boolean isNotificationEnabled(Notification aNotification) {
// only accept even notifications
boolean enabled = aNotification.getSequenceNumber() % 2 == 0;
if (!enabled) {
mRejected.add(aNotification);
}
return enabled;
}
});
}
}