Skip to content

Commit

Permalink
Merge branch 'master' into restcomm-1581
Browse files Browse the repository at this point in the history
# Conflicts:
#	restcomm/restcomm.interpreter/src/test/java/org/restcomm/connect/interpreter/NumberSelectorServiceTest.java
  • Loading branch information
gvagenas committed Jan 18, 2018
2 parents 935f865 + 6c55daf commit f14b3a7
Show file tree
Hide file tree
Showing 6 changed files with 1,831 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ public NumberSelectionResult searchNumberWithResult(String phone,
if (numberfound.number == null) {
//only use regex if perfect match didnt worked
if (destinationOrganizationSid != null
&& destinationOrganizationSid.equals(sourceOrganizationSid)
&& (sourceOrganizationSid == null || destinationOrganizationSid.equals(sourceOrganizationSid))
&& phone.matches("[\\d,*,#,+]+")) {
//check regex if source and dest orgs are the same
//only use regex if org available
Expand All @@ -296,7 +296,26 @@ public NumberSelectionResult searchNumberWithResult(String phone,
}
}
}
}
if (numberfound.number == null) {
if (logger.isDebugEnabled()) {
StringBuffer stringBuffer = new StringBuffer();

stringBuffer.append("NumberSelectionService didn't match a number because: ");

if (destinationOrganizationSid == null) {
stringBuffer.append(" - Destination Org is null - ");
} else if (sourceOrganizationSid != null && !destinationOrganizationSid.equals(sourceOrganizationSid)) {
stringBuffer.append(" - Source Org is NOT null and DOESN'T match the Destination Org - ");
} else if (!phone.matches("[\\d,*,#,+]+")) {
String msg = String.format(" - Phone %s doesn't match regex \"[\\\\d,*,#,+]+\" - ", phone);
stringBuffer.append(msg);
} else {
String msg = String.format(" - Phone %s didn't match any of the Regex - ",phone);
stringBuffer.append(msg);
}
logger.debug(stringBuffer.toString());
}
}
return numberfound;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,4 +301,95 @@ public void testRegexMatch2() {
}


@Test
public void testRegexMatchFromNullSrcOrg() {
Sid srcSid = null;
Sid destSid = Sid.generate(Sid.Type.ORGANIZATION);
String regex = "12.*";
String longestRegex = "123.*";
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
List<IncomingPhoneNumber> numbers = new ArrayList();
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
builder.setPhoneNumber(regex);
numbers.add(builder.build());
builder.setPhoneNumber(longestRegex);
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("1234", srcSid, destSid);

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

@Test
public void testRegexFailToMatchBecauseOfPhone() {
Sid srcSid = null;
Sid destSid = Sid.generate(Sid.Type.ORGANIZATION);
String regex = "12.*";
String longestRegex = "123.*";
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
List<IncomingPhoneNumber> numbers = new ArrayList();
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
builder.setPhoneNumber(regex);
numbers.add(builder.build());
builder.setPhoneNumber(longestRegex);
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("7788", srcSid, destSid);

Assert.assertNull(found);
inOrder.verify(numDao, times(4)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
inOrder.verify(numDao, never()).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
}


@Test
public void testRegexFailToMatchBecauseDestOrgNull() {
Sid srcSid = Sid.generate(Sid.Type.ORGANIZATION);
Sid destSid = null;
String regex = "12.*";
String longestRegex = "123.*";
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
List<IncomingPhoneNumber> numbers = new ArrayList();
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
builder.setPhoneNumber(regex);
numbers.add(builder.build());
builder.setPhoneNumber(longestRegex);
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("1234", srcSid, destSid);

Assert.assertNull(found);
inOrder.verify(numDao, times(2)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
inOrder.verify(numDao, never()).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
}
}
31 changes: 31 additions & 0 deletions restcomm/restcomm.interpreter/src/test/resources/log4j.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
<!--keep logs under maven target dir for git ginore and cleaning -->
<!--use arquillian system property to make file names unique across forks -->
<param name="file" value="target/logs/sip-server${arquillian_sip_port}.log" />
<param name="MaxFileSize" value="20000KB" />
<!-- Keep one backup file -->
<param name="MaxBackupIndex" value="20" />
<param name="append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p %t %l - %m%n" />
</layout>
</appender>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %p %t %l - %m%n" />
</layout>
</appender>
<logger name="org.mobicents.servlet.sip.annotations">
<level value="INFO" />
</logger>
<root>
<priority value="DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="rolling-file" />
</root>
</log4j:configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import static javax.servlet.sip.SipServletResponse.SC_OK;
import static javax.servlet.sip.SipServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED;
import static javax.servlet.sip.SipServletResponse.SC_UNAUTHORIZED;
import static javax.servlet.sip.SipServletResponse.SC_BUSY_EVERYWHERE;
import static javax.servlet.sip.SipServletResponse.SC_BUSY_HERE;
import static org.restcomm.connect.commons.util.HexadecimalUtils.toHex;

import java.io.IOException;
Expand Down Expand Up @@ -311,7 +313,11 @@ public void onReceive(final Object message) throws Exception {
}
} else if (message instanceof SipServletResponse) {
SipServletResponse response = (SipServletResponse) message;
if (response.getStatus()>400 && response.getMethod().equalsIgnoreCase("OPTIONS")) {
int responseStatusCode = response.getStatus();
if (responseStatusCode > 400
// https://telestax.atlassian.net/browse/RESTCOMM-1582: Fix for User Agent that reply with BUSY when they are in a call
&& (responseStatusCode != SC_BUSY_HERE && responseStatusCode != SC_BUSY_EVERYWHERE)
&& response.getMethod().equalsIgnoreCase("OPTIONS")) {
removeRegistration(response);
} else if (actAsImsUa && response.getMethod().equalsIgnoreCase(REGISTER)) {
proxyResponseFromIms(message, response);
Expand Down

0 comments on commit f14b3a7

Please sign in to comment.