-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dp2Capo SIP 服务器功能与测试计划 #199
Comments
测试计划通讯包发送接收
(以上对应测试用例TC-SIP-14) 编码方式
登录,多租户应用
通道资源控制
(以上1)2)3)对应测试用例TC-SIP-12)
(以上对应测试用例TC-SIP-13) |
SIP Server 自动清理休眠 TCP 连接的算法考虑就是一般 SIP Client 可能会假定 TCP 连接一直存在。如果休眠两分钟以后 SIP Server 自动 Close TCP 连接,那么后面 SIP Client 再次进行请求的时候就会报错 (closed by remote peer),为此,SIP Client 需要有所准备,要专门增加遇到这种情况重试的代码。而且重新 Connect TCP 连接以后,还要补一次 Login 才行。这里需要专门提醒一下 SIP Client 的开发商增强一下这个功能,方能适应 Server 这个做法。 如果利用 TcpServer 的现有代码,统一对所有 TCP 连接进行一次检查和清理,并没有区分是哪些实例的 TCP 连接,可能还无法满足实际需求。因为实际场景中,可能会出现某个单位的 SIP Client 支持这种自动恢复 TCP 连接,另外一个单位的 SIP Client 不支持的情况。所以这个参数不应该是一个全局参数,而是应该每个实例单独配置,可以启用可以不启用。那还涉及到修改配置界面和参数体系。另外基础的清理扫描函数,可能从技术上来说要给增加一个回调函数参数,在回调函数里面具体判断哪些实例是需要清理,哪些不需要清理,然后区别动作。 (以上对应测试用例TC-SIP-15) |
关于 SIP Login 和 ScStatus 请求顺序问题SIP 2 协议里面规定,如果 SIP Server 要启用 Login 功能,那么 Login 必须是一个 TCP 连接的第一个请求。有一些 SIP Client 实现中,会在 Login 以前先调用 ScStatus,这是不符合 SIP 2 协议规定的。 dp2Capo 中的 SIP Server 功能,因为要实现多租户模式,所以 SIP Client 在 ScStatus 以前,必须通过 Login 先告知 SIP Server 自己关注的是那个实例(登录的用户名字符串中包含了实例名),然后 ScStatus 才能根据实例里面配置的 dp2library 服务器信息,加上 Login 请求传递来的 用户名,去登录 dp2library 获得 dp2library 的活跃信息。所以这种时候 dp2Capo 强烈在意 Login 和 ScStatus 的先后顺序。当然 SIP 2 协议的规定本身是满足多租户的这种场景要求的。 上面说的是一般多实例情况。如果 dp2Capo 安装后,只配置了一个实例,那么上述要求有所降低。即便 ScStatus 先于 Login 调用,那么 SIP Server 也能假定当前一定是访问唯一的这个实例,应该是可以允许这种用法(即 ScStatus 先于 Login 调用)。但因为 ScStatus 调用时需要访问 dp2library 服务器,所以这里要求这个唯一的实例的 SIP 参数里面,定义了匿名访问账户名和密码。如果没有定义这个匿名访问账户,则 ScStatus 请求先于 Login 的情况将返回错误。(对应测试用例TC-SIP-05) |
实例中 SIP 参数配置的改进稍早版本中,一个实例的 SIP 参数,只有一组。为了适应一个 dp2library 中多个分馆的场景,最新版本改进为一个实例的 SIP 参数,是一个对照表,由若干 dp2library 用户名各对应一组 SIP 参数。 注意 dp2library 用户名尽量用英文形态。各个分馆的用于 SIP 的 dp2library 用户名最好包含分馆的名字或者标识部分,以方便配置时识别。 对照表中,应该至少有一个用户名事项。如果一个也没有,则实际上这个实例的 SIP 服务无法访问。配置完成时程序会检查并警告这种情况。 一般是有多少个 dp2library 用户可以访问 SIP Service,就给这个对照表配置多少个事项。这样就限定了,配置了的用户才能访问 SIP Service。 还可以在对照表中增添一个名为 匿名账户如果配置了匿名账户,若 SIP Client 没有 Login() 就 ScStatus(),则 SIP Service 会用这个匿名账户去完成 ScStatus() 功能。(对应测试用例TC-SIP-05) |
SIP Client 发出带有转义字符串的账户名的 Login 请求包,应该是需要通过专门的 SIP Client 程序来验证。也就是说测试的时候也是要写代码的。这些测试代码形成的功能,最好正规管理和保留,以便可以反复测试。(对应测试用例TC-SIP-10) |
测试用例 TC-SIP-09测试目的验证 dp2Capo 中 SIP 服务功能 用户名和 SIP 参数对照表 的 用户名 与 编码方式 是否可以正确对应。 测试环境dp2Library服务器:dp2LibraryXE,版本号:3.0.6801.26543 SIP 服务器:dp2Capo,采用 ChordInstaller 安装部署,版本号:1.3.6802.39730 dp2Library账户账户1:账户名:gb2312 账户2:账户名:utf8 dp2Capo部署情况全局参数
实例数量:1 实例 instance1 详细情况dp2Library服务器
dp2MServer服务器未启用 Z39.50服务未启用 SIP服务
SIP服务参数dp2Library服务器属性页配置 SIP属性页配置
使用 SIP 客户端测试情况
总结用户名和 SIP 参数对照表 的 用户名 与 编码方式 可以正确匹配对应,并且发送和接收命令中中文不会出现乱码。 |
测试计划
|
测试计划2018-8-24 19:31:15谢老师留言:更新了 chordInstaller。 第一个,是配置 SIP 参数的时候,从启用 SIP 到不启用 SIP,原来是要删除相关元素,这个会导致后面再次启用的时候,原先 SIP 参数中的用户映射数据被删除丢失了,只好重新配置。新版本改了一下,这里启用也好不启用也好,不会删除这些配置信息,而是给有关元素加了一个 enable 属性。 另外,有个小改动,就是这个对话框原来在 SIP 没有启用的时候,tabcontrol 整个被 diabled 了,属性页翻页也不行。这样不是很利于用户看配置信息(是的,即便没有启用 SIP,也是可以看的哟,本来应该)。新版本改为单独 disabled 一个一个 tabpage,这样点 tabcontrol 的耳朵可以翻页。 第二个,是我看到截图,可能是刚进入 SIP 参数配置对话框的时候,对话框里面主要界面元素的 enabled 状态和“启用 SIP” 的 checkbox 之间的锁定关系不是太正确,可能会导致配置者在没有启用 SIP 的时候可以编辑账户映射配置(应该是不允许的,这时主要界面元素应该是 disabled 状态,目的是提醒配置者明白此时还没有启用),然后点“确定”关闭对话框重新进来,却发现刚配置的账户映射信息丢失了。新版本改掉了这个 bug,需要测试一下看看是不是真改掉了 (以上对应测试用例TC-SIP-01) 那么 dp2capo 本身的功能,每个 SIP 实例是否启用了还是没有启用,需要用 SIP Client 简单测试一下。 |
测试用例 TC-SIP-01一、测试目的该用例主要是测试配置信息是否保存正确,未涉及SIP服务是否能被前端访问。 1)测试SIP全局参数的配置。启用的话,config配置文件中的sipServer节点的port属性有值;禁用的话,port属性值为空。 二、测试环境ChordInstaller 升级到最新版本,同时带动dp2capo升级到最新版本 三、测试步骤先测全局参数 1)先打开dp2capo全局配置文件,可以通过chordinstaller先打开某capo实例的数据目录,再向上一层目录到dp2capo数据目录,打开config.xml配置文件,未启动全局配置时,sipServer节点的port属性为空,如下配置:
2)在chordInstaller里,通过菜单 dp2capo/配置实例,打开 配置dp2capo的实例 对话框。点右上侧的 全局参数 按钮,打开 全局参数 对话框,点开 SIP服务 属性页,勾中启用SIP服务Checkbox,同时端口默认为8100。关闭对话框,回到 dp2capo实例管理 界面。 3)查看config.xml配置文件,发现sipServer节点的port属性有值了,为8100。
4)再次打开全局参数对话框,不勾选 启用SIP服务,关闭对话框,回到 dp2capo实例管理 界面。 测试单独实例的 启用SIP服务 checkbox 6)一个capo实例,从来没有配置过SIP服务时,打开其数据目录,其中的capo.xml配置文件中应该没有sipServer节点。 7)双击此capo实例,进入 一个实例 配置界面,点SIP服务最右边...按钮,开SIP服务对话框,最下方的 启用本实例的SIP服务应该是未勾中状态,分别点 dp2Library服务器属性页 与 SIP 属性页 耳朵,都能点开,里面的控制应是发灰disabled状态。 8)再次双击打开此capo实例的配置界面,在SIP服务对话框中,勾中 启用本实例的SIP服务。 9)再关闭 一个实例 对话框,回到 配置dp2capo的实例 的界面。
10)再次双击打开此capo实例的配置界面,在SIP服务对话框中,不勾选 启用本实例的SIP服务。 11)再关闭 一个实例 对话框,回到 配置dp2capo的实例 的界面。
测试单独实例的 匿名帐户配置,其间必须配置匿名帐户对应的SIP参数 12)再次双击打开此capo实例的配置界面,在 SIP服务参数 对话框中,勾中 启用本实例的SIP服务。然后在dp2library服务器 属性页,在匿名账户区域,输入用户名zizhu和密码,点 确定 ,弹出提示 匿名帐户名***在'SIP'属性页的用户名列表中尚未定义,此时点 确定 不能关闭 SIP服务 对话框。点 取消 关闭 SIP服务参数对话框,回到 一个实例 配置界面,在SIP服务信息框中依然是 然后点 确定 关闭 一个实例 对话框,查看capo.xml配置文件,dp2library节点的anonymousUserName属性应为空。 再打开此capo实例的 SIP服务参数 对话框,看到 启用本实例的SIP服务 是勾中状态,dp2Library匿名用户信息是空的。 13)在匿名账户区域,输入用户名和密码,然后再在 SIP 属性页,点 新增 出现 创建新用户事项 小对话框,不输入任何内容,点 确定,弹出提示:用户名不能为空。 然后随便输入一个用户名,只要与匿名不同就行,例如a,右边出现一些具体事项的默认配置,点确定关闭小对话框。再在SIP服务参数界面上点 确定 按钮,弹出提示 匿名帐户名***在'SIP'属性页的用户名列表中尚未定义,此时点 确定 不能关闭 SIP服务 对话框。(注:点 取消 不会保存本次的任何修改,这里就不重复步骤了,个人测试时可以试一下) 输入用户名zizhu,右边出现一些具体事项的配置,通道自动清理秒数设为10,其它按默认值就行。 然后点 确定 按钮,关闭 SIP服务参数 对话框,回到 一个实例 配置界面,看到 SIP服务 信息框中的信息显示为 14)再关闭 一个实例 对话框,回到 配置dp2capo的实例 的界面。
15)再打开此capo实例的 SIP服务参数 对话框,删除匿名用户名,回到 一个实例 界面,SIP服务 信息框里应显示为 capo.xml配置文件中匿名用户名为空,其中信息不变。 16)再打开此capo实例的 SIP服务参数 对话框,匿名用户名应为空,定义的用户名与SIP参数对照表信息不变。 测试单独实例的启用或不启用SIP服务,对SIP其它参数不要影响 17)打开此capo实例的 SIP服务参数 对话框,不勾选 启用本实例SIP服务,界面里各个属性页可以点开,但里面的控件变成发灰不可用状态,但信息不应丢失,关闭对话框,直到回到 配置dp2capo实例 界面。打开capo.xml配置文件,sipServer节点的enable属性应为false,其它信息不丢失。 18)再次打开此capo实例的 SIP服务参数 对话框,查看 启用本实例SIP服务 应是不勾选状态,点开两个属性页,信息在,控件发灰。勾中 启用本实例SIP服务,信息在,控件变成可用状态,修改zizhu帐户的通道自动清理秒数为15。点 确定 配置dp2capo实例 界面。打开capo.xml配置文件,sipServer节点的enable属性应为true,zizhu帐户参数有修改,如下图。
测试全局SIP参数 与 单独实例的SIP参数关系 四、测试结果20180826-ryh:测试结果与期望一致
光光 2018/8/26 22:02:05 为了避免操作者出现疑问,可以考虑在每个实例的配置 SIP 参数的画面,比如确定的时候,警告一下全局里面并没有启用 SIP。或者在实例里面配置 SIP 参数的画面出现一个固定的 comment 或者 tips 文字表示提醒 而如果改为全局不启用,单独实例这里 SIP 参数配置界面就禁用(disabled) 的话,就不那么灵活了 |
测试用例 TC-SIP-02一、测试目的该用例主要检查全局参数的SIP服务启用与禁用,和单独实例的SIP服务启用与禁用,是否真正发挥作用。 二、测试环境1)ChordInstaller 升级到最新版本,带动dp2capo升级到最新版本 三、测试步骤:说明:因为在TC-SIP-01中详细写了dp2capo的SIP服务配置操作,这里关于步骤操作就简写了。 全局参数启用或禁用,前端是否能连通。 检查在全局SIP服务禁用的情况下,单独SIP 实例参数启用和禁用,前端应不能连通。 2)dp2Capo实例A,启用SIP服务,配置用户zizhu 4)dp2Capo实例A,禁用SIP服务。 四、测试结果20180827-ryh:测试结果与预期一致 |
测试用例TC-SIP-03一、测试目的测试为一个dp2capo实例配置SIP服务,并增/删/改 用户名是否立即生效。 三、测试步骤前提:配置全局参数 启用SIP服务。 注:如果该实例是dp2capo宿主里的第1个实例,前端登录帐号可能不带前缀。 四、测试结果20180827-ryh:测试结果与预期一致 |
测试用例TC-SIP-04(todo)dp2Capo 安装多实例,多实例中有的实例启用 SIP 服务,有的不启用,进行测试。 |
测试用例TC-SIP-05(todo)如果配置了匿名账户,若 SIP Client 没有 Login() 就 ScStatus(),则 SIP Service 会用这个匿名账户去完成 ScStatus() 功能。 |
测试用例TC-SIP-06(todo)一个 dp2library 中多个分馆的场景,一个实例的 SIP 参数,是一个对照表,由若干 dp2library 用户名各对应一组 SIP 参数。 dp2library帐户名 英文形态,包含分馆的名字或者标识部分。 一般是有多少个 dp2library 用户可以访问 SIP Service,就给这个对照表配置多少个事项。这样就限定了,配置了的用户才能访问 SIP Service。 |
测试用例TC-SIP-07(todo)还可以在对照表中增添一个名为 * 的用户名事项。表示任意匹配用户名。当配置了这一事项以后,SIP Client 访问 SIP Service 的时候,会首先尝试匹配请求中包含的用户名,如果匹配上了则用匹配上的那个事项参数;如果没有匹配上,则采用 * 这个事项的 SIP 参数。 |
测试用例TC-SIP-08(todo)dp2Capo 中的 SIP Server 功能,因为要实现多租户模式,所以 SIP Client 在 ScStatus 以前,必须通过 Login 先告知 SIP Server 自己关注的是那个实例(登录的用户名字符串中包含了实例名),然后 ScStatus 才能根据实例里面配置的 dp2library 服务器信息,加上 Login 请求传递来的 用户名,去登录 dp2library 获得 dp2library 的活跃信息。所以这种时候 dp2Capo 强烈在意 Login 和 ScStatus 的先后顺序。当然 SIP 2 协议的规定本身是满足多租户的这种场景要求的。 |
测试用例TC-SIP-11(todo)登录,多租户应用 包含 '@' 符号的用户名,对指定的实例起作用。当实例不存在的时候要明确报错。 |
测试用例TC-SIP-12(todo)通道资源控制 短时间内(10秒钟) Connect 动作超过 1000 次,IP 自动被列入黑名单; IP 表内最多允许同时存在 10000 个事项。超过了则不允许更多前端进行 Connect。 |
测试用例TC-SIP-13(todo)TCP 通道休眠时自动清理特性。 TCP 通道在 Login() 或者其他请求之后,是否被自动清理,以及多少休眠时间以后才被自动清理,是由 (各个实例的)SIP Service 参数中的自动清理秒数参数决定的。休眠超过这个参数值以后会被自动从服务器端关闭和清理。为此 SIP Client 要有所准备,当通讯过程中发现 close by remote peer 时,要重新 Connect,(如果必要,)并且重新 Login()。对于不适应自动清理机制的 SIP Client,可以为它访问的实例的 SIP Service 参数里面定义这个自动清理秒数为 0 或空,这样就禁用了这个特性。但 TCP 通道 Login() 或其他请求之前的 10 秒休眠以后就自动清理的特性不允许禁用。 |
测试用例TC-SIP-14(todo)通讯包发送接收 多个请求一次性发出。那么响应会是和请求包的顺序对应的。目的是测试验证服务器可以处理此种 Pipeline 请求,通讯包分界机制正确。 请求包尺寸大于 4096 bytes,会引起默认配置情况下 TCP 通讯被服务器切断。这是服务器的一种保护措施,防范前端用巨大的通讯包进行攻击。(注意检查这个极限尺寸参数应该可以在 dp2Installer 中配置) 前端使用的通讯包结束符可以是 '\r' 或者 '\n'。服务器会自动按照前端请求时候所使用的结束符,来决定响应包的结束符。注意测试时候,可以同时启动多个通道进行请求,而且请求之间使用了不同的结束符,要求服务器可以自动针对性地使用响应结束符。同一个通道的不同请求之间其实也可以使用不同的结束符,服务器能适应。 |
测试用例TC-SIP-15(todo)SIP Server 自动清理休眠 TCP 连接的算法考虑 如果利用 TcpServer 的现有代码,统一对所有 TCP 连接进行一次检查和清理,并没有区分是哪些实例的 TCP 连接,可能还无法满足实际需求。因为实际场景中,可能会出现某个单位的 SIP Client 支持这种自动恢复 TCP 连接,另外一个单位的 SIP Client 不支持的情况。所以这个参数不应该是一个全局参数,而是应该每个实例单独配置,可以启用可以不启用。那还涉及到修改配置界面和参数体系。另外基础的清理扫描函数,可能从技术上来说要给增加一个回调函数参数,在回调函数里面具体判断哪些实例是需要清理,哪些不需要清理,然后区别动作。 |
需求和功能概述
dp2 中原有的 SIP Server 不能支持多租户情形。这次改造和迁移主要是解决这个问题,允许 SIP Server 多个实例并存。那么计划采用的方法实际上是只使用一个 SIP 监听端口,然后根据 SIP 请求中 Login 请求里面携带的用户名,析出用户名中 '@' 以后的部分,定位到具体的实例,解决多租户应用问题。
鉴于前不久刚在 dp2Capo 中实现了 Z39.50 服务器功能,顺便也抽出一个 TcpServer 类,重载以后实现 SIP 服务器功能,复用代码。好处很多,其中一个是可以享用为 Z39.50 服务器所开发的根据前端 IP 地址限定同一个 IP 能使用的最大通道数的功能。
The text was updated successfully, but these errors were encountered: