### 目的：
- 业务真实交互数据包含：BeginSession、SessionAck、register、getVar、setVar、request、requestAck、Info、broadcast、event、logEvent、LogWarn，使用某一业务进行验证难以全面。
- 以往经验发现，进行了部分改动后。在基础业务中表现无问题，但在其他不常用的页面使用时，容易出现验证不全面引发的问题。
- 所以设计的多接口自动化验证需要覆盖以上接口。
- 安全和非安全的websocket，输入、输出值有少量不同，需要进行验证到
- 在多次打开关闭websocket、register实体，需验证内部数据是否正确，是否已经正确释放。

### 实现：
- 正向场景1：
  - **BeginSession**连接Guiconsole
  - 检查**SessionAck**，关联SessionAck规范内容
  - **Register**实体Guiconsole，关联Register规范内容
  - **Request**功能OpenLogSender
  - 检查**RequestAck**， 关联RequestAck规范内容
  - 在业务端应能持续收到**broadcast**
  - **info**功能OpenSender
  - 在业务端应能收到**event**
  - 验证**SetVar**设置UIState的值
  - 验证**GetVar**获取UIState的值
  - 验证**LogEvent、LogWarn**，Guiconsole订阅chromium发出的事件，通过**broadcast**发送

- 错误场景1：
  - **BeginSession**连接实体Unknown
  - 检查**SessionAck**是否能够正确返回错误信息
- 错误场景2：
  - **BeginSession**连接实体Guiconsole
  - 验证**SetVar**设置TerminalStage的值（无权限）
  - 应返回错误信息
- 错误场景3：
  - **BeginSession**连接实体Guiconsole
  - **Request、Info**功能访问不存在的接口
  - 验证**RequestAck、Info**是否能够正确返回错误信息

- 长时间多ws client场景：
  - 多次打开关闭websocket
  - register多个实体，关闭websocket，查看是否被正确释放
  - 多个ws订阅同一个实体的广播，查看broadcast是否正常发送给每一个ws client


### 内部数据验证：
- ST、UAT上提供一个内部页面，能够实时检查chromium内部数据变量，防止数据未被正确释放
- 页面上需要展示的数据包含
  - websocket当前的连接信息
  - 实体-sessionId对照表（应随实体的启动和关闭，表现为>0和-1）
  - broadCast注册表（为一列表，指示websocket订阅了哪些broadcast）
  - register注册表（指示一个实体对应了几个不同的websocketId）

### 终端当前涉及对外http连接包含：
#### spshell
- upload log（上传互联网日志）
- get terminal cfg（获取终端配置）
- get VTM err msg List（获取终端错误映射列表）
- get Token（获取token）
- upload terminal cfg version（上传终端配置版本）
#### alarm
- send alarm（发送告警）
#### accessAuth
- GetmAccessAuthHost（获取会话密钥）
- UpdateWKTask（更新mk）
- access（准入）
- init mk（初始化mk）
#### guardian
- upload log（上传互联网日志）
#### CardIssuer
- RegistCardWhileCaptureCard（吞卡登记）
- SyncMaterialCount（同步物料计数）
- JudgeCardType（查询卡片类型）
#### HeartBeat
- hand shake（心跳握手）
#### ConunterConnector
- call route（呼叫）
#### IDCertificate
- img check（图片检测）
#### Record
- recordinfo list upload（上传记录信息列表）
#### Upgrade
- SendSM3Task（发送文件SM3列表）
- UpdateTaskStatus（更新任务状态）
- QueryCurrTask（查询当前任务）
- QueryNewPreTask（预查询新任务）
- QueryNewContinueTask（继续查询新任务）
- QueryTaskStatus（查询任务状态）
- DownLoad Package（下载包） **文件下载，不上传链路信息**
#### UpLoad
- queryTempFile（查询临时文件）
- updateState（登记文件流水状态）
- addUploadFail（登记失败文件流水）
- queryPlan（查询上传计划）
- upload file（上传文件） **文件上传，不上传链路信息**

### 按照类型，可分位3类
- 终端自行发起的http请求：自行生成第一跳，上传第一跳信息，并把下一跳信息传给服务端。
- 终端由业务端调用，发起的http请求：终端不生成第一跳，更新当前跳信息，传递给下一层
- 不需要上传链路信息：上传下载文件。

### 实现细节：
（1）改造http组件，如无任何链路输入，则把终端作为第一跳，并把链路信息上传；把第二跳信息传递给服务端。
（2）可输入链路信息，则更新当前跳信息，并把链路信息传递给下一层。
（3）改造规范参考：《分布式链路追踪技术规范》-http协议部分：
**TraceContext 采用 B3 染色方案，通过 Http Header 标识符传递TraceContext，所有的 B3 Header 都遵循 X-B3-${name}的头部格式**
添加TraceContext包含：
BusinessId、TraceId、SpanceId、ParentSpanId、Timestamp