package com.netflix.suro.routing.filter; import com.google.common.collect.Maps; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import java.util.Map; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; public class PathValueMessageFilterTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testPositiveSelection() { MockRequestTrace requestTrace = Mockito.mock(MockRequestTrace.class); when(requestTrace.getClientInfoHostName()).thenReturn("localhost"); Map<String, Object> clientInfoMap = Maps.newHashMap(); clientInfoMap.put("clientName", "client"); clientInfoMap.put("clientId", (long) 10); when(requestTrace.getClientInfoMap()).thenReturn(clientInfoMap); // Test numerical values can be filtered MessageFilter filter = new PathValueMessageFilter("//clientInfoMap/clientId", new NumericValuePredicate(5, ">")); assertTrue("Filter should return true as the client ID is 10, greater than 5", filter.apply(requestTrace)); // Test string value can be filtered filter = new PathValueMessageFilter("//clientInfoMap/clientName", new StringValuePredicate("client")); assertTrue("Filter should return true as client name is 'client'", filter.apply(requestTrace)); // Test attribute is supported filter = new PathValueMessageFilter("//@clientInfoHostName", new StringValuePredicate("localhost")); assertTrue("Filter should return tre as clientInfoHostName is localhost", filter.apply(requestTrace)); } @Test public void testNonExistentValueShouldBeFiltered(){ MockRequestTrace requestTrace = Mockito.mock(MockRequestTrace.class); MessageFilter filter = new PathValueMessageFilter("//whatever", new StringValuePredicate("whatever")); assertFalse(filter.apply(requestTrace)); } @Test public void testNullValueCanBeAccepted(){ MockRequestTrace requestTrace = Mockito.mock(MockRequestTrace.class); MessageFilter filter = new PathValueMessageFilter("//whatever", NullValuePredicate.INSTANCE); assertTrue(filter.apply(requestTrace)); } }