Skip to content

Commit ccce41e

Browse files
authored
Merge pull request #2762 from RestComm/restcomm-1581
Restcomm-1581 - patch for Regex NumberLengthComparator
2 parents 9b3f310 + 0584b6e commit ccce41e

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/NumberSelectorService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,8 @@ class NumberLengthComparator implements Comparator<IncomingPhoneNumber> {
328328
@Override
329329
public int compare(IncomingPhoneNumber o1, IncomingPhoneNumber o2) {
330330
//put o2 first to make longest first in coll
331-
return Integer.compare(o2.getPhoneNumber().length(), o1.getPhoneNumber().length());
331+
int comparison = Integer.compare(o2.getPhoneNumber().length(), o1.getPhoneNumber().length());
332+
return comparison == 0 ? -1 : comparison;
332333
}
333334

334335
}
@@ -359,6 +360,7 @@ private NumberSelectionResult findByRegex(List<String> numberQueries,
359360
logger.debug(String.format("Found %d Regex IncomingPhone numbers.", regexList.size()));
360361
}
361362
//order by regex length
363+
362364
Set<IncomingPhoneNumber> regexSet = new TreeSet<IncomingPhoneNumber>(new NumberLengthComparator());
363365
regexSet.addAll(regexList);
364366
if (regexList != null && regexList.size() > 0) {

restcomm/restcomm.interpreter/src/test/java/org/restcomm/connect/interpreter/NumberSelectorServiceTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,55 @@ public void testRegexMatch() {
252252
Assert.assertEquals(longestRegex, found.getPhoneNumber());
253253
inOrder.verify(numDao, times(2)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
254254
inOrder.verify(numDao, times(1)).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
255+
}
255256

257+
@Test
258+
public void testRegexMatch2() {
259+
Sid srcSid = Sid.generate(Sid.Type.ORGANIZATION);
260+
Sid destSid = srcSid;
261+
String regex1 = "123456*";
262+
String regex2 = "554433*";
263+
String regex3 = "778899*";
264+
String regex4 = "987456*";
265+
String regex5 = "987456789*";
266+
String regex6 = "12*";
267+
String regex7 = "*";
268+
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
269+
List<IncomingPhoneNumber> numbers = new ArrayList();
270+
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
271+
builder.setPhoneNumber(regex1);
272+
numbers.add(builder.build());
273+
builder.setPhoneNumber(regex2);
274+
numbers.add(builder.build());
275+
builder.setPhoneNumber(regex3);
276+
numbers.add(builder.build());
277+
builder.setPhoneNumber(regex4);
278+
numbers.add(builder.build());
279+
builder.setPhoneNumber(regex5);
280+
numbers.add(builder.build());
281+
builder.setPhoneNumber(regex6);
282+
numbers.add(builder.build());
283+
builder.setPhoneNumber(regex7);
284+
numbers.add(builder.build());
285+
IncomingPhoneNumbersDao numDao = Mockito.mock(IncomingPhoneNumbersDao.class);
286+
when(numDao.getTotalIncomingPhoneNumbers((IncomingPhoneNumberFilter) any())).
287+
thenReturn(1,1);
288+
when(numDao.getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any())).
289+
thenReturn(emptyNumbers, emptyNumbers);
290+
when(numDao.getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any())).
291+
thenReturn(numbers);
292+
InOrder inOrder = inOrder(numDao);
293+
NumberSelectorService service = new NumberSelectorService(numDao);
294+
295+
IncomingPhoneNumber found = service.searchNumber("987456", srcSid, destSid);
296+
297+
Assert.assertNotNull(found);
298+
Assert.assertEquals(regex4, found.getPhoneNumber());
299+
inOrder.verify(numDao, times(3)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
300+
inOrder.verify(numDao, times(1)).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
256301
}
257302

303+
258304
@Test
259305
public void testRegexMatchFromNullSrcOrg() {
260306
Sid srcSid = null;

0 commit comments

Comments
 (0)