alibaba / higress

🤖 AI Gateway | AI Native API Gateway

Home Page:https://higress.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

WASM插件开发框架proxy-wasm-go-sdk的单元测试框架适配

TJKkking opened this issue · comments

描述

Higress使用基于proxy-wasm-go-sdk项目fork了自己的WASM插件开发SDK,在此基础之上还用一层wrapper屏蔽了插件开发中很多重复性工作,使开发者可以将精力集中于功能开发。但是,wrapper层的加入使proxy-wasm-go-sdk原生的单元测试框架变得不可用,在对使用了wrapper的插件进行单测时会报错。

分析

  • 测试框架调用了被wrapper封装的函数,比如OnPluginStart,如下图所示。因此插件里用了wrapper会导致测试时没法读取配置报错以及类似的其他问题。
    image
  • 因此需要对wrapper作出改动,使之支持除默认从envoy.yaml读取配置外还可以从测试代码传入插件配置。
    • wrapper默认从配置文件读取配置
      image
    • 可以尝试在CommonVmCtx中增加一个字段testConfig(或者其他名字),当这个字段不为空且合法,则视为测试环境,将之用于解析配置,不再从envoy.yaml文件中读取。(不保证正确,除了配置读取外还可能存在别的问题。)
  • 结论:Wrapper和测试框架不兼容,需要对wrapper做出改进使之适配proxy-wasm-go-sdk的测试框架。

看了一下感觉可以把test部分也封装进wrapper里面,在插件部分提供config和测试用例给wrapper去跑单测,不知这样是否可行

Image_1720177529799.png

大致看了一下,可以把matcher拆成接口,然后在wrapper里面定义一个NewEmulator封装一下proxytest顺便把test matcher穿透到这个地方。传递配置文件可以用proxytest的WithPluginConfiguration,然后OnPluginStart那里应该就可以拿到配置了

认领一下这个,thanks