Skip to content

Commit

Permalink
Merge pull request #2762 from RestComm/restcomm-1581
Browse files Browse the repository at this point in the history
Restcomm-1581 - patch for Regex NumberLengthComparator
  • Loading branch information
gvagenas committed Jan 18, 2018
2 parents 6c55daf + f14b3a7 commit 15c2960
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,8 @@ class NumberLengthComparator implements Comparator<IncomingPhoneNumber> {
@Override
public int compare(IncomingPhoneNumber o1, IncomingPhoneNumber o2) {
//put o2 first to make longest first in coll
return Integer.compare(o2.getPhoneNumber().length(), o1.getPhoneNumber().length());
int comparison = Integer.compare(o2.getPhoneNumber().length(), o1.getPhoneNumber().length());
return comparison == 0 ? -1 : comparison;
}

}
Expand Down Expand Up @@ -359,6 +360,7 @@ private NumberSelectionResult findByRegex(List<String> numberQueries,
logger.debug(String.format("Found %d Regex IncomingPhone numbers.", regexList.size()));
}
//order by regex length

Set<IncomingPhoneNumber> regexSet = new TreeSet<IncomingPhoneNumber>(new NumberLengthComparator());
regexSet.addAll(regexList);
if (regexList != null && regexList.size() > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,55 @@ public void testRegexMatch() {
Assert.assertEquals(longestRegex, found.getPhoneNumber());
inOrder.verify(numDao, times(2)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
inOrder.verify(numDao, times(1)).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
}

@Test
public void testRegexMatch2() {
Sid srcSid = Sid.generate(Sid.Type.ORGANIZATION);
Sid destSid = srcSid;
String regex1 = "123456*";
String regex2 = "554433*";
String regex3 = "778899*";
String regex4 = "987456*";
String regex5 = "987456789*";
String regex6 = "12*";
String regex7 = "*";
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
List<IncomingPhoneNumber> numbers = new ArrayList();
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
builder.setPhoneNumber(regex1);
numbers.add(builder.build());
builder.setPhoneNumber(regex2);
numbers.add(builder.build());
builder.setPhoneNumber(regex3);
numbers.add(builder.build());
builder.setPhoneNumber(regex4);
numbers.add(builder.build());
builder.setPhoneNumber(regex5);
numbers.add(builder.build());
builder.setPhoneNumber(regex6);
numbers.add(builder.build());
builder.setPhoneNumber(regex7);
numbers.add(builder.build());
IncomingPhoneNumbersDao numDao = Mockito.mock(IncomingPhoneNumbersDao.class);
when(numDao.getTotalIncomingPhoneNumbers((IncomingPhoneNumberFilter) any())).
thenReturn(1,1);
when(numDao.getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any())).
thenReturn(emptyNumbers, emptyNumbers);
when(numDao.getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any())).
thenReturn(numbers);
InOrder inOrder = inOrder(numDao);
NumberSelectorService service = new NumberSelectorService(numDao);

IncomingPhoneNumber found = service.searchNumber("987456", srcSid, destSid);

Assert.assertNotNull(found);
Assert.assertEquals(regex4, found.getPhoneNumber());
inOrder.verify(numDao, times(3)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
inOrder.verify(numDao, times(1)).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
}


@Test
public void testRegexMatchFromNullSrcOrg() {
Sid srcSid = null;
Expand Down

0 comments on commit 15c2960

Please sign in to comment.