bugfix: Fixed testing issues
This commit is contained in:
parent
55e3c2c314
commit
992e593e6e
|
@ -1,11 +1,17 @@
|
|||
name: CI
|
||||
|
||||
on: [ push, pull_request ]
|
||||
on:
|
||||
push:
|
||||
branches: [ v4 ]
|
||||
pull_request:
|
||||
branches: [ v4 ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
black-box-test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
max-parallel: 1
|
||||
matrix:
|
||||
redis-version: [ "2.8", "3.0", "4.0", "5.0", "6.0", "7.0" ]
|
||||
fail-fast: false
|
||||
|
|
|
@ -17,12 +17,9 @@ func NewScanClusterReader(opts *ScanReaderOptions) Reader {
|
|||
|
||||
rd := &scanClusterReader{}
|
||||
for _, address := range addresses {
|
||||
rd.readers = append(rd.readers, NewScanStandaloneReader(&ScanReaderOptions{
|
||||
Address: address,
|
||||
Username: opts.Username,
|
||||
Password: opts.Password,
|
||||
Tls: opts.Tls,
|
||||
}))
|
||||
theOpts := *opts
|
||||
theOpts.Address = address
|
||||
rd.readers = append(rd.readers, NewScanStandaloneReader(&theOpts))
|
||||
}
|
||||
return rd
|
||||
}
|
||||
|
|
|
@ -21,12 +21,9 @@ func NewSyncClusterReader(opts *SyncReaderOptions) Reader {
|
|||
}
|
||||
rd := &syncClusterReader{}
|
||||
for _, address := range addresses {
|
||||
rd.readers = append(rd.readers, NewSyncStandaloneReader(&SyncReaderOptions{
|
||||
Address: address,
|
||||
Username: opts.Username,
|
||||
Password: opts.Password,
|
||||
Tls: opts.Tls,
|
||||
}))
|
||||
theOpts := *opts
|
||||
theOpts.Address = address
|
||||
rd.readers = append(rd.readers, NewSyncStandaloneReader(&theOpts))
|
||||
}
|
||||
return rd
|
||||
}
|
||||
|
|
2
test.sh
2
test.sh
|
@ -6,4 +6,4 @@ go test ./... -v
|
|||
|
||||
# black box test
|
||||
cd tests/
|
||||
pybbt cases
|
||||
pybbt cases --verbose --flags modules
|
|
@ -0,0 +1,13 @@
|
|||
本项目使用 pybbt 工具进行黑盒测试。pybbt 是一个基于 Python 的工具,简化了软件的黑盒测试过程。要运行测试用例,请执行以下命令:
|
||||
|
||||
```bash
|
||||
pybbt cases --verbose --flags modules
|
||||
```
|
||||
该命令将以详细日志记录的方式运行 cases 目录中的测试用例,并向测试用例传递 modules 标志。
|
||||
|
||||
如果本地没有安装 modules,可以不起用 modules 标志,这样就会跳过需要 modules 的测试用例:
|
||||
```bash
|
||||
pybbt cases --verbose
|
||||
```
|
||||
|
||||
更多关于 pybbt 的信息、安装说明和用法示例,请参阅完整的文档: https://pypi.org/project/pybbt/
|
|
@ -1,8 +1,8 @@
|
|||
import pybbt
|
||||
|
||||
from helpers.commands.checker import Checker
|
||||
from helpers.constant import REDIS_SERVER_MODULES_ENABLED
|
||||
from helpers.redis import Redis
|
||||
from helpers.constant import REDIS_SERVER_VERSION
|
||||
|
||||
|
||||
class TairHashChecker(Checker):
|
||||
|
@ -12,8 +12,9 @@ class TairHashChecker(Checker):
|
|||
self.cnt = 0
|
||||
|
||||
def add_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
p = r.pipeline()
|
||||
# different parameters type
|
||||
p.execute_command("EXHSET", f"{self.PREFIX}_{self.cnt}", "field", "value")
|
||||
|
@ -35,8 +36,9 @@ class TairHashChecker(Checker):
|
|||
self.cnt += 1
|
||||
|
||||
def check_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
for i in range(self.cnt):
|
||||
p = r.pipeline()
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import pybbt
|
||||
|
||||
from helpers.commands.checker import Checker
|
||||
from helpers.constant import REDIS_SERVER_MODULES_ENABLED
|
||||
from helpers.redis import Redis
|
||||
from helpers.constant import REDIS_SERVER_VERSION
|
||||
|
||||
|
||||
class TairStringChecker(Checker):
|
||||
|
@ -12,8 +12,9 @@ class TairStringChecker(Checker):
|
|||
self.cnt = 0
|
||||
|
||||
def add_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
p = r.pipeline()
|
||||
# different parameters type
|
||||
p.execute_command("EXSET", f"{self.PREFIX}_{self.cnt}_ABS", "abs_value", "VER", 2)
|
||||
|
@ -28,8 +29,9 @@ class TairStringChecker(Checker):
|
|||
self.cnt += 1
|
||||
|
||||
def check_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
for i in range(self.cnt):
|
||||
p = r.pipeline()
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import pybbt
|
||||
|
||||
from helpers.commands.checker import Checker
|
||||
from helpers.constant import REDIS_SERVER_MODULES_ENABLED
|
||||
from helpers.redis import Redis
|
||||
from helpers.constant import REDIS_SERVER_VERSION
|
||||
|
||||
|
||||
class TairZsetChecker(Checker):
|
||||
|
@ -12,8 +12,9 @@ class TairZsetChecker(Checker):
|
|||
self.cnt = 0
|
||||
|
||||
def add_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
p = r.pipeline()
|
||||
|
||||
# different key
|
||||
|
@ -28,8 +29,9 @@ class TairZsetChecker(Checker):
|
|||
self.cnt += 1
|
||||
|
||||
def check_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
if REDIS_SERVER_VERSION < 5.0:
|
||||
if not REDIS_SERVER_MODULES_ENABLED:
|
||||
return
|
||||
|
||||
for i in range(self.cnt):
|
||||
p = r.pipeline()
|
||||
p.execute_command("EXZSCORE", f"{self.PREFIX}_{i}_key01", "mem01")
|
||||
|
|
|
@ -2,14 +2,20 @@ import shutil
|
|||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
BASE_PATH = f"{Path(__file__).parent.parent.parent.absolute()}" # project path
|
||||
import pybbt
|
||||
|
||||
BASE_PATH = f"{Path(__file__).parent.parent.parent.absolute()}" # project path
|
||||
PATH_REDIS_SHAKE = f"{BASE_PATH}/bin/redis-shake"
|
||||
PATH_REDIS_SERVER = shutil.which('redis-server')
|
||||
|
||||
# REDIS_SERVER_VERSION
|
||||
output = subprocess.check_output(f"{PATH_REDIS_SERVER} --version", shell=True)
|
||||
output_str = output.decode("utf-8")
|
||||
REDIS_SERVER_VERSION = float(output_str.split("=")[1].split(" ")[0][:3])
|
||||
|
||||
# REDIS_SERVER_MODULES_ENABLED
|
||||
REDIS_SERVER_MODULES_ENABLED = REDIS_SERVER_VERSION >= 5.0 and "modules" in pybbt.get_global_flags()
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(BASE_PATH)
|
||||
print(PATH_REDIS_SHAKE)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from helpers.commands import SelectChecker, StringChecker, TairStringChecker, TairHashChecker, TairZsetChecker
|
||||
from helpers.commands import SelectChecker, StringChecker, TairHashChecker, TairStringChecker, TairZsetChecker
|
||||
from helpers.redis import Redis
|
||||
from helpers.constant import PATH_REDIS_SERVER, REDIS_SERVER_VERSION
|
||||
|
||||
|
||||
class DataInserter:
|
||||
|
@ -13,7 +12,6 @@ class DataInserter:
|
|||
TairZsetChecker(),
|
||||
]
|
||||
|
||||
|
||||
def add_data(self, r: Redis, cross_slots_cmd: bool):
|
||||
for checker in self.checkers:
|
||||
checker.add_data(r, cross_slots_cmd)
|
||||
|
|
|
@ -3,7 +3,7 @@ import time
|
|||
import pybbt
|
||||
import redis
|
||||
|
||||
from helpers.constant import PATH_REDIS_SERVER, REDIS_SERVER_VERSION
|
||||
from helpers.constant import PATH_REDIS_SERVER, REDIS_SERVER_MODULES_ENABLED, REDIS_SERVER_VERSION
|
||||
from helpers.utils.network import get_free_port
|
||||
from helpers.utils.timer import Timer
|
||||
|
||||
|
@ -18,13 +18,11 @@ class Redis:
|
|||
self.dir = f"{self.case_ctx.dir}/redis_{self.port}"
|
||||
args.extend(["--port", str(self.port)])
|
||||
|
||||
if REDIS_SERVER_VERSION > 4.0:
|
||||
if REDIS_SERVER_MODULES_ENABLED:
|
||||
args.extend(["--loadmodule", "tairstring_module.so"])
|
||||
args.extend(["--loadmodule", "tairhash_module.so"])
|
||||
args.extend(["--loadmodule", "tairzset_module.so"])
|
||||
self.server = pybbt.Launcher(args=[PATH_REDIS_SERVER] + args, work_dir=self.dir)
|
||||
else:
|
||||
self.server = pybbt.Launcher(args=[PATH_REDIS_SERVER] + args, work_dir=self.dir)
|
||||
|
||||
self._wait_start()
|
||||
self.client = redis.Redis(host=self.host, port=self.port)
|
||||
|
|
Loading…
Reference in New Issue