/*
* 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.List;
import junit.framework.TestCase;
import org.asteriskjava.fastagi.internal.AgiReplyImpl;
public class AgiReplyImplTest extends TestCase
{
private List<String> lines;
@Override
protected void setUp()
{
this.lines = new ArrayList<String>();
}
public void testBuildReply()
{
AgiReplyImpl reply;
lines.add("200 result=49");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect result", 49, reply.getResultCode());
assertEquals("Incorrect result as character", '1', reply.getResultCodeAsChar());
assertEquals("Incorrect result when get via getAttribute()", "49", reply.getAttribute("result"));
}
public void testBuildReplyWithAdditionalAttribute()
{
AgiReplyImpl reply;
lines.add("200 result=49 endpos=2240");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect result", 49, reply.getResultCode());
assertEquals("Incorrect result as character", '1', reply.getResultCodeAsChar());
assertEquals("Incorrect result when get via getAttribute()", "49", reply.getAttribute("result"));
assertEquals("Incorrect endpos attribute", "2240", reply.getAttribute("endpos"));
}
public void testBuildReplyWithMultipleAdditionalAttribute()
{
AgiReplyImpl reply;
lines.add("200 result=49 startpos=1234 endpos=2240");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect result", 49, reply.getResultCode());
assertEquals("Incorrect result as character", '1', reply.getResultCodeAsChar());
assertEquals("Incorrect result when get via getAttribute()", "49", reply.getAttribute("result"));
assertEquals("Incorrect startpos attribute", "1234", reply.getAttribute("startpos"));
assertEquals("Incorrect endpos attribute", "2240", reply.getAttribute("endpos"));
}
public void testBuildReplyWithParenthesis()
{
AgiReplyImpl reply;
lines.add("200 result=1 ((hello)(world))");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect result", 1, reply.getResultCode());
assertEquals("Incorrect parenthesis", "(hello)(world)", reply.getExtra());
}
public void testBuildReplyWithAdditionalAttributeAndParenthesis()
{
AgiReplyImpl reply;
lines.add("200 result=1 ((hello)(world)) endpos=2240");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect result", 1, reply.getResultCode());
assertEquals("Incorrect parenthesis", "(hello)(world)", reply.getExtra());
assertEquals("Incorrect endpos attribute", "2240", reply.getAttribute("endpos"));
}
public void testBuildReplyInvalidOrUnknownCommand()
{
AgiReplyImpl reply;
lines.add("510 Invalid or unknown command");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_INVALID_OR_UNKNOWN_COMMAND, reply.getStatus());
}
public void testBuildReplyInvalidCommandSyntax()
{
AgiReplyImpl reply;
lines.add("520-Invalid command syntax. Proper usage follows:");
lines.add(" Usage: DATABASE DEL <family> <key>");
lines.add(" Deletes an entry in the Asterisk database for a");
lines.add(" given family and key.");
lines.add(" Returns 1 if succesful, 0 otherwise");
lines.add("520 End of proper usage.");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_INVALID_COMMAND_SYNTAX, reply.getStatus());
assertEquals("Incorrect synopsis", "DATABASE DEL <family> <key>", reply.getSynopsis());
assertEquals("Incorrect usage",
"Deletes an entry in the Asterisk database for a given family and key. Returns 1 if succesful, 0 otherwise",
reply.getUsage());
}
public void testBuildReplyInvalidCommandSyntaxWithOnlyUsage()
{
AgiReplyImpl reply;
lines.add("520-Invalid command syntax. Proper usage follows:");
lines.add(" Usage: DATABASE DEL <family> <key>");
lines.add(" Deletes an entry in the Asterisk database for a");
lines.add(" given family and key.");
lines.add(" Returns 1 if succesful, 0 otherwise");
lines.add("520 End of proper usage.");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_INVALID_COMMAND_SYNTAX, reply.getStatus());
// due to the lazy initialization in use this getUsage() could fail if we don't call it before getSynopsis()
assertEquals("Incorrect usage",
"Deletes an entry in the Asterisk database for a given family and key. Returns 1 if succesful, 0 otherwise",
reply.getUsage());
assertEquals("Incorrect synopsis", "DATABASE DEL <family> <key>", reply.getSynopsis());
}
public void testBuildReplyWithLeadingSpace()
{
AgiReplyImpl reply;
lines.add("200 result= (timeout)");
reply = new AgiReplyImpl(lines);
assertEquals("Incorrect status", AgiReplyImpl.SC_SUCCESS, reply.getStatus());
assertEquals("Incorrect extra", "timeout", reply.getExtra());
}
}