org.sipfoundry.sipxconfig.admin.dialplan.CustomDialingRuleTest.java Source code

Java tutorial

Introduction

Here is the source code for org.sipfoundry.sipxconfig.admin.dialplan.CustomDialingRuleTest.java

Source

/*
 *
 *
 * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a Contributor Agreement.
 * Contributors retain copyright to elements licensed under a Contributor Agreement.
 * Licensed to the User under the LGPL license.
 *
 * $
 */
package org.sipfoundry.sipxconfig.admin.dialplan;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.TimeZone;

import junit.framework.JUnit4TestAdapter;
import org.apache.commons.lang.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.sipfoundry.sipxconfig.TestHelper;
import org.sipfoundry.sipxconfig.admin.ScheduledDay;
import org.sipfoundry.sipxconfig.admin.dialplan.attendant.WorkingTime;
import org.sipfoundry.sipxconfig.admin.dialplan.attendant.WorkingTime.WorkingHours;
import org.sipfoundry.sipxconfig.admin.dialplan.config.FullTransform;
import org.sipfoundry.sipxconfig.admin.dialplan.config.Transform;
import org.sipfoundry.sipxconfig.admin.forwarding.GeneralSchedule;
import org.sipfoundry.sipxconfig.admin.forwarding.Schedule;
import org.sipfoundry.sipxconfig.gateway.Gateway;
import org.sipfoundry.sipxconfig.permission.Permission;
import org.sipfoundry.sipxconfig.permission.PermissionManagerImpl;
import org.sipfoundry.sipxconfig.permission.PermissionName;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

/**
 * CustomDialingRuleTest
 */
public class CustomDialingRuleTest {

    public static junit.framework.Test suite() {
        return new JUnit4TestAdapter(CustomDialingRuleTest.class);
    }

    private static final int PATTERN_COUNT = 10;
    private static final String[] GATEWAYS = { "10.2.3.4", "10.4.5.6" };

    private static final int[] PORTS = { 0, 5090 };

    private static final String[] GATEWAYADDRESSES = { "10.2.3.4", "10.4.5.6:5090" };

    private static final String[] PREFIXES = { null, "43" };

    private CustomDialingRule m_rule;
    private List m_patternsList;
    private Schedule m_schedule;

    @Before
    public void setUp() throws Exception {
        m_schedule = new GeneralSchedule();
        m_schedule.setName("Custom schedule");
        WorkingHours[] hours = new WorkingHours[1];
        WorkingTime wt = new WorkingTime();
        hours[0] = new WorkingHours();
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        cal.set(2006, Calendar.DECEMBER, 31, 10, 12);
        hours[0].setStart(cal.getTime());
        cal.set(2006, Calendar.DECEMBER, 31, 11, 88);
        hours[0].setStop(cal.getTime());
        hours[0].setEnabled(true);
        hours[0].setDay(ScheduledDay.WEDNESDAY);
        wt.setWorkingHours(hours);
        wt.setEnabled(true);
        m_schedule.setWorkingTime(wt);
        DialPattern[] dialPatterns = new DialPattern[PATTERN_COUNT];
        for (int i = 0; i < dialPatterns.length; i++) {
            DialPattern p = new DialPattern();
            p.setPrefix("91");
            p.setDigits(i + 2);
            dialPatterns[i] = p;
        }
        m_patternsList = Arrays.asList(dialPatterns);

        m_rule = new CustomDialingRule();
        m_rule.setDialPatterns(m_patternsList);

        for (int i = 0; i < GATEWAYS.length; i++) {
            Gateway gateway = new Gateway();
            gateway.setUniqueId();
            gateway.setAddress(GATEWAYS[i]);
            gateway.setPrefix(PREFIXES[i]);
            gateway.setAddressPort(PORTS[i]);
            m_rule.addGateway(gateway);
        }

        m_rule.setEnabled(true);
        m_rule.setCallPattern(new CallPattern("999", CallDigits.VARIABLE_DIGITS));
    }

    @Test
    public void testGetPatterns() {
        String[] patterns = m_rule.getPatterns();
        assertEquals(PATTERN_COUNT, patterns.length);
        for (int i = 0; i < patterns.length; i++) {
            String p = patterns[i];
            assertTrue(p.startsWith("91"));
        }
    }

    @Test
    public void testGetTransforms() {
        Transform[] transforms = m_rule.getTransforms();
        assertEquals(GATEWAYS.length, transforms.length);
        for (int i = 0; i < GATEWAYS.length; i++) {
            assertTrue(transforms[i] instanceof FullTransform);
            FullTransform full = (FullTransform) transforms[i];
            String[] fieldParams = full.getFieldParams();
            assertEquals(1, fieldParams.length);
            assertTrue(fieldParams[0].startsWith("q="));
            assertEquals(full.getHeaderParams()[0], "expires=60");
            assertEquals(GATEWAYADDRESSES[i], full.getHost());
            EmergencyRuleTest.assertUrlParams(full.getUrlParams());
            assertTrue(full.getUser().startsWith(StringUtils.defaultString(PREFIXES[i]) + "999"));
        }
    }

    @Test
    public void testGetTransformsWithSchedule() {
        m_rule.setSchedule(m_schedule);
        Transform[] transforms = m_rule.getTransforms();
        assertEquals(GATEWAYS.length, transforms.length);
        for (int i = 0; i < GATEWAYS.length; i++) {
            assertTrue(transforms[i] instanceof FullTransform);
            FullTransform full = (FullTransform) transforms[i];
            String[] fieldParams = full.getFieldParams();
            assertEquals(2, fieldParams.length);
            assertTrue(fieldParams[0].startsWith("q="));
            assertTrue(fieldParams[1].startsWith("sipx-ValidTime="));
            assertEquals(full.getHeaderParams()[0], "expires=60");
            assertEquals(GATEWAYADDRESSES[i], full.getHost());
            EmergencyRuleTest.assertUrlParams(full.getUrlParams());
            assertTrue(full.getUser().startsWith(StringUtils.defaultString(PREFIXES[i]) + "999"));
        }
    }

    @Test
    public void testGetRouteHeader() {
        Gateway g = new Gateway() {
            @Override
            public String getRoute() {
                return "bongo.example.org";
            }
        };
        m_rule.setGateways(Collections.singletonList(g));
        Transform[] transforms = m_rule.getTransforms();
        assertEquals(1, transforms.length);
        FullTransform full = (FullTransform) transforms[0];
        assertEquals(2, full.getHeaderParams().length);
        assertEquals("route=bongo.example.org", full.getHeaderParams()[0]);
    }

    @Test
    public void testNoGateways() {
        CustomDialingRule rule = new CustomDialingRule();
        rule.setDialPatterns(m_patternsList);
        rule.setEnabled(true);
        rule.setCallPattern(new CallPattern("999", CallDigits.VARIABLE_DIGITS));

        String[] patterns = rule.getPatterns();
        assertEquals(PATTERN_COUNT, patterns.length);
        for (int i = 0; i < patterns.length; i++) {
            String p = patterns[i];
            assertTrue(p.startsWith("91"));
        }

        Transform[] transforms = rule.getTransforms();
        assertEquals(1, transforms.length);
        FullTransform tr = (FullTransform) transforms[0];
        assertEquals("999{vdigits}", tr.getUser());
        assertNull(tr.getFieldParams());
        assertNull(tr.getHost());
    }

    @Test
    public void testNoGatewaysWithSchedule() {
        CustomDialingRule rule = new CustomDialingRule();
        rule.setDialPatterns(m_patternsList);
        rule.setEnabled(true);
        rule.setCallPattern(new CallPattern("999", CallDigits.VARIABLE_DIGITS));
        rule.setSchedule(m_schedule);

        String[] patterns = rule.getPatterns();
        assertEquals(PATTERN_COUNT, patterns.length);
        for (int i = 0; i < patterns.length; i++) {
            String p = patterns[i];
            assertTrue(p.startsWith("91"));
        }

        Transform[] transforms = rule.getTransforms();
        assertEquals(1, transforms.length);
        FullTransform tr = (FullTransform) transforms[0];
        assertEquals("999{vdigits}", tr.getUser());
        String[] fieldParams = tr.getFieldParams();
        assertTrue(fieldParams[0].startsWith("sipx-ValidTime="));
        assertNull(tr.getHost());
    }

    @Test
    public void testGetTransformedPatternsVariable() throws Exception {
        CustomDialingRule rule = new CustomDialingRule();
        rule.setDialPatterns(m_patternsList);
        rule.setEnabled(true);
        rule.setCallPattern(new CallPattern("77", CallDigits.VARIABLE_DIGITS));

        String[] patterns = rule.getTransformedPatterns(new Gateway());
        assertEquals(PATTERN_COUNT, patterns.length);
        String suffix = "xx";
        for (int i = 0; i < patterns.length; i++) {
            assertEquals("77" + suffix, patterns[i]);
            suffix = suffix + "x";
        }
    }

    @Test
    public void testGetTransformedPatternsFixed() throws Exception {
        CustomDialingRule rule = new CustomDialingRule();
        rule.setDialPatterns(m_patternsList);
        rule.setEnabled(true);
        rule.setCallPattern(new CallPattern("77", CallDigits.FIXED_DIGITS));

        String[] patterns = rule.getTransformedPatterns(new Gateway());
        assertEquals(PATTERN_COUNT, patterns.length);
        String suffix = "xx";
        for (int i = 0; i < patterns.length; i++) {
            assertEquals("7791" + suffix, patterns[i]);
            suffix = suffix + "x";
        }
    }

    @Test
    public void testGetTransformedPatternsNoDigits() throws Exception {
        CustomDialingRule rule = new CustomDialingRule();
        rule.setDialPatterns(m_patternsList);
        rule.setEnabled(true);
        rule.setCallPattern(new CallPattern("77", CallDigits.NO_DIGITS));

        String[] patterns = rule.getTransformedPatterns(new Gateway());
        assertEquals(1, patterns.length);
        assertEquals("77", patterns[0]);
    }

    @Test
    public void testSetPermissionNames() throws Exception {
        PermissionManagerImpl pm = new PermissionManagerImpl();
        pm.setModelFilesContext(TestHelper.getModelFilesContext());

        Permission[] permissions = {
                pm.getPermissionByName(Permission.Type.CALL, PermissionName.VOICEMAIL.getName()),
                pm.getPermissionByName(Permission.Type.CALL, PermissionName.LONG_DISTANCE_DIALING.getName()) };

        String names[] = { "Voicemail", "LongDistanceDialing" };

        CustomDialingRule rule = new CustomDialingRule();
        try {
            rule.setPermissions(Arrays.asList(permissions));
            rule.getPermissions();
            fail("Illegal state exception expected.");
        } catch (IllegalStateException e) {
            // ok
        }

        rule.setPermissionManager(pm);
        rule.setPermissions(Arrays.asList(permissions));
        List<Permission> perms = rule.getPermissions();
        assertEquals(names.length, perms.size());
        assertTrue(perms.contains(permissions[0]));
        assertTrue(perms.contains(permissions[1]));
    }

    @Test
    public void testGetCallTag() {
        CustomDialingRule rule = new CustomDialingRule();
        assertSame(CallTag.CUST, rule.getCallTag());
    }
}