/* * Copyright 2004-2006 Stefan Reuter * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.asteriskjava.fastagi.internal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import junit.framework.TestCase; import org.asteriskjava.fastagi.AgiRequest; import org.asteriskjava.fastagi.internal.AgiRequestImpl; public class AgiRequestImplTest extends TestCase { @Override protected void setUp() { } @SuppressWarnings("deprecation") public void testBuildRequest() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network: yes"); lines.add("agi_network_script: myscript.agi"); lines.add("agi_request: agi://host/myscript.agi"); lines.add("agi_channel: SIP/1234-d715"); lines.add("agi_language: en"); lines.add("agi_type: SIP"); lines.add("agi_uniqueid: 1110023416.6"); lines.add("agi_callerid: John Doe<1234>"); lines.add("agi_dnid: 8870"); lines.add("agi_rdnis: 9876"); lines.add("agi_context: local"); lines.add("agi_extension: 8870"); lines.add("agi_priority: 1"); lines.add("agi_enhanced: 0.0"); lines.add("agi_accountcode: "); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi", request.getRequestURL()); assertEquals("incorrect channel", "SIP/1234-d715", request.getChannel()); assertEquals("incorrect uniqueId", "SIP/1234-d715", request.getChannel()); assertEquals("incorrect type", "SIP", request.getType()); assertEquals("incorrect uniqueId", "1110023416.6", request.getUniqueId()); assertEquals("incorrect language", "en", request.getLanguage()); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdName", "John Doe", request.getCallerIdName()); assertEquals("incorrect dnid", "8870", request.getDnid()); assertEquals("incorrect rdnis", "9876", request.getRdnis()); assertEquals("incorrect context", "local", request.getContext()); assertEquals("incorrect extension", "8870", request.getExtension()); assertEquals("incorrect priority", new Integer(1), request.getPriority()); assertEquals("incorrect enhanced", Boolean.FALSE, request.getEnhanced()); assertNull("incorrect accountCode must not be set", request.getAccountCode()); } public void testBuildRequestWithAccountCode() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network: yes"); lines.add("agi_network_script: myscript.agi"); lines.add("agi_accountcode: 12345"); request = new AgiRequestImpl(lines); assertEquals("incorrect accountCode", "12345", request.getAccountCode()); } @SuppressWarnings("deprecation") public void testBuildRequestWithoutCallerIdName() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: 1234"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); //assertNull("callerIdName must not be set", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestWithoutCallerIdNameButBracket() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: <1234>"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertNull("callerIdName must not be set", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestWithoutCallerIdNameButBracketAndQuotesAndSpace() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: \"\" <1234>"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertNull("callerIdName must not be set", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestWithQuotedCallerIdName() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: \"John Doe\"<1234>"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertEquals("incorrect callerIdName", "John Doe", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestWithQuotedCallerIdNameAndSpace() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: \"John Doe\" <1234>"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertEquals("incorrect callerIdName", "John Doe", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestWithoutCallerId() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: "); request = new AgiRequestImpl(lines); assertNull("callerId must not be set", request.getCallerId()); assertNull("callerIdNumber must not be set", request.getCallerIdNumber()); assertNull("callerIdName must not be set", request.getCallerIdName()); } /* * Asterisk 1.2 now uses agi_callerid and agi_calleridname so we don't need to process * it ourselves. */ @SuppressWarnings("deprecation") public void testBuildRequestCallerIdAsterisk12() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: 1234"); lines.add("agi_calleridname: John Doe"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertEquals("incorrect callerIdName", "John Doe", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestCallerIdAsterisk12WithUnknownCallerId() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: unknown"); lines.add("agi_calleridname: John Doe"); request = new AgiRequestImpl(lines); assertNull("callerId must not be set if \"unknown\"", request.getCallerId()); assertNull("callerIdNumber must not be set if \"unknown\"", request.getCallerIdNumber()); assertEquals("incorrect callerIdName", "John Doe", request.getCallerIdName()); } @SuppressWarnings("deprecation") public void testBuildRequestCallerIdAsterisk12WithUnknownCallerIdName() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_callerid: 1234"); lines.add("agi_calleridname: unknown"); request = new AgiRequestImpl(lines); assertEquals("incorrect callerId", "1234", request.getCallerId()); assertEquals("incorrect callerIdNumber", "1234", request.getCallerIdNumber()); assertNull("callerIdName must not be set if \"unknown\"", request.getCallerIdName()); } public void testBuildRequestCallerIdWithUnknownDnid() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_dnid: unknown"); request = new AgiRequestImpl(lines); assertNull("dnid must not be set if \"unknown\"", request.getDnid()); } public void testBuildRequestCallerIdWithUnknownRdnis() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_rdnis: unknown"); request = new AgiRequestImpl(lines); assertNull("rdnis must not be set if \"unknown\"", request.getRdnis()); } public void testBuildRequestWithNullEnvironment() { try { new AgiRequestImpl((List<String>) null); fail("No IllegalArgumentException thrown."); } catch (IllegalArgumentException e) { } } public void testBuildRequestWithUnusualInput() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("var without agi prefix: a value"); lines.add("agi_without_colon another value"); lines.add("agi_without_space_after_colon:"); lines.add("agi_channel: SIP/1234-a892"); request = new AgiRequestImpl(lines); assertEquals("incorrect channel", "SIP/1234-a892", request.getChannel()); } public void testBuildRequestWithoutParameters() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi"); lines.add("agi_request: agi://host/myscript.agi"); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi", request.getRequestURL()); assertEquals("incorrect value for unset parameter 'param1'", null, request.getParameter("param1")); assertEquals("incorrect values for unset parameter 'param1'", null, request.getParameterValues("param1")); assertNotNull("getParameterMap() must not return null", request.getParameterMap()); assertEquals("incorrect size of getParameterMap()", 0, request.getParameterMap().size()); } public void testBuildRequestWithSingleValueParameters() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi?param1=value1¶m2=value2"); lines.add("agi_request: agi://host/myscript.agi?param1=value1¶m2=value2"); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi?param1=value1¶m2=value2", request.getRequestURL()); assertEquals("incorrect value for parameter 'param1'", "value1", request.getParameter("param1")); assertEquals("incorrect value for parameter 'param2'", "value2", request.getParameter("param2")); assertEquals("incorrect value for unset parameter 'param3'", null, request.getParameter("param3")); assertEquals("incorrect size of getParameterMap()", 2, request.getParameterMap().size()); assertEquals("incorrect value for parameter 'param1' when obtained from map", "value1", ((String[]) request.getParameterMap().get("param1"))[0]); } public void testBuildRequestWithMultiValueParameter() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi?param1=value1¶m1=value2"); lines.add("agi_request: agi://host/myscript.agi?param1=value1¶m1=value2"); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi?param1=value1¶m1=value2", request.getRequestURL()); assertEquals("incorrect number of values for parameter 'param1'", 2, request.getParameterValues("param1").length); assertEquals("incorrect value[0] for parameter 'param1'", "value1", request.getParameterValues("param1")[0]); assertEquals("incorrect value[1] for parameter 'param1'", "value2", request.getParameterValues("param1")[1]); } public void testBuildRequestWithEmptyValueParameter() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi?param1"); lines.add("agi_request: agi://host/myscript.agi?param1"); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi?param1", request.getRequestURL()); assertEquals("incorrect value for parameter 'param1'", "", request.getParameter("param1")); assertEquals("incorrect number of values for parameter 'param1'", 1, request.getParameterValues("param1").length); assertEquals("incorrect value[0] for parameter 'param1'", "", request.getParameterValues("param1")[0]); } public void testBuildRequestWithUrlEncodedParameter() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi?param1=my%20value"); lines.add("agi_request: agi://host/myscript.agi?param1=my%20value"); request = new AgiRequestImpl(lines); assertEquals("incorrect script", "myscript.agi", request.getScript()); assertEquals("incorrect requestURL", "agi://host/myscript.agi?param1=my%20value", request.getRequestURL()); assertEquals("incorrect value for parameter 'param1'", "my value", request.getParameter("param1")); } public void testGetParameter() { List<String> lines; AgiRequest request; lines = new ArrayList<String>(); lines.add("agi_network_script: myscript.agi?param1=my%20value"); lines.add("agi_request: agi://host/myscript.agi?param1=my%20value"); request = new AgiRequestImpl(lines); assertEquals("incorrect requestURL", "agi://host/myscript.agi?param1=my%20value", request.getRequestURL()); assertEquals("incorrect value for parameter 'param1'", "my value", request.getParameter("param1")); } }