Java实现模拟路由功能

来源:互联网 发布:游戏攻略软件 编辑:程序博客网 时间:2024/06/04 19:02

本文实现根据路由表适配最优的号段,选择路由器。选择路由的规则:

 1、号段num和网元都不能重复

  2、号段num不能重复

  3、选择号码适配长度最长的网元为路由目的地

RouterService.java

package com.discover.router;import java.util.HashMap;import java.util.Iterator;import java.util.Map.Entry;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;/** * 简易路由器 * @author Administrator * */public class RouterService {    HashMap<String, String> routerInfoMap = new HashMap<String, String>();    /**     * 载入路由表规则:     * 1、号段num和网元都不能重复     * 2、号段num不能重复     * @param routerRule 路由规则     * @return     */    public boolean loadRule(String routerRule) {        try {            Document doc = DocumentHelper.parseText(routerRule);            Element routertable = doc.getRootElement();            Iterator routerIterator = routertable.elementIterator("router");            while(routerIterator.hasNext())            {                Element router = (Element) routerIterator.next();                String num = router.elementTextTrim("num");                String net = router.elementTextTrim("net");                if(num.isEmpty()||net.isEmpty())                {                    return false;                }                                if(routerInfoMap.containsKey(num))                {                    return false;                }                else {                    routerInfoMap.put(num, net);                }                            }        } catch (Exception e) {            return false;        }                return true;    }        /**     * 选择路由     * 1、选择号码适配长度最长的网元为路由目的地     * @param phone 电话号码     * @return     */    public String selRouter(String phone) {        Iterator iterator = routerInfoMap.entrySet().iterator();        String num = "";        String net = "";        while (iterator.hasNext()) {            Entry<String, String> entry = (Entry<String, String>)iterator.next();            String key = entry.getKey();            if(phone.indexOf(key)>-1)            {                if(key.length()>num.length())                {                    net = entry.getValue();                }            }        }                return net;    }}



采用JUnit对路由模拟器进行测试

TestRouterService.java

package com.discover.test;import junit.framework.TestCase;import com.discover.router.RouterService;/** * @author Administrator * */public class TestRouterService extends TestCase {    public void testcase1() {        RouterService routerService = new RouterService();        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"            +"<routertable><router><num></num><net>router1</net></router></routertable>";        assertEquals(false, routerService.loadRule(routerRule));    }        public void testcase2() {        RouterService routerService = new RouterService();        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"            +"<routertable><router><num>13567</num><net></net></router></routertable>";        assertEquals(false, routerService.loadRule(routerRule));    }        public void testcase3() {        RouterService routerService = new RouterService();        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"            +"<routertable><router><num>13567</num><net>router1</net></router>"        +"<router><num>13567</num><net>router2</net></router></routertable>";        assertEquals(false, routerService.loadRule(routerRule));    }        public void testcase4() {        RouterService routerService = new RouterService();        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"            +"<routertable><router><num>13562</num><net>router1</net></router></routertable>";        assertEquals(true, routerService.loadRule(routerRule));        assertEquals("router1", routerService.selRouter("13562779908"));    }            public void testcase5() {        RouterService routerService = new RouterService();        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"            +"<routertable><router><num>13562</num><net>router1</net></router>"            +"<router><num>135627</num><net>router2</net></router></routertable>";        assertEquals(true, routerService.loadRule(routerRule));        assertEquals("router2", routerService.selRouter("13562779908"));    }}


 测试结果:


 

0 0
原创粉丝点击