1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  package ch.qos.logback.classic.turbo;
11  
12  import static org.junit.Assert.*;
13  
14  import org.junit.Test;
15  
16  import ch.qos.logback.core.spi.FilterReply;
17  
18  
19  public class DuplicateMessageFilterTest {
20  
21    
22    @Test
23    public void smoke() {
24      DuplicateMessageFilter dmf = new DuplicateMessageFilter();
25      dmf.setAllowedRepetitions(0);
26      dmf.start();
27      assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "x", null, null));
28      assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "y", null, null));
29      assertEquals(FilterReply.DENY, dmf.decide(null, null, null, "x", null, null));
30      assertEquals(FilterReply.DENY, dmf.decide(null, null, null, "y", null, null));
31    }
32    
33    @Test
34    public void memoryLoss() {
35      DuplicateMessageFilter dmf = new DuplicateMessageFilter();
36      dmf.setAllowedRepetitions(1);
37      dmf.setCacheSize(1);
38      dmf.start();
39      assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "a", null, null));
40      assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "b", null, null));
41      assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "a", null, null));
42    }
43  
44    
45    @Test
46    public void many() {
47      DuplicateMessageFilter dmf = new DuplicateMessageFilter();
48      dmf.setAllowedRepetitions(0);
49      int cacheSize = 10;
50      int margin  = 2;
51      dmf.setCacheSize(cacheSize);
52      dmf.start();
53      for(int i = 0; i < cacheSize+margin; i++) {
54        assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "a"+i, null, null));
55      }
56      for(int i = cacheSize-1; i >= margin; i--) {
57        assertEquals(FilterReply.DENY, dmf.decide(null, null, null, "a"+i, null, null));
58      }
59      for(int i = margin-1; i >= 0; i--) {
60        assertEquals(FilterReply.NEUTRAL, dmf.decide(null, null, null, "a"+i, null, null));
61      }
62    }
63  }