mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
将 webServiceCache 扩展为通用 serviceCache,所有指纹识别结果 统一缓存,插件匹配时端口不命中则回退到服务名称匹配。 删除多余的 service_cache.go,复用已有的 ServiceInfo 体系。 补充 nil 防御、Explicit 标记、大量单元/集成/回归测试。
83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package core
|
|
|
|
import (
|
|
"flag"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/shadow1ng/fscan/common"
|
|
)
|
|
|
|
func TestCLIExplicitDefaultTuningFlagsSurviveTuneConfig(t *testing.T) {
|
|
oldArgs := os.Args
|
|
oldFlagSet := flag.CommandLine
|
|
oldFlagVars := *common.GetFlagVars()
|
|
defer func() {
|
|
os.Args = oldArgs
|
|
flag.CommandLine = oldFlagSet
|
|
*common.GetFlagVars() = oldFlagVars
|
|
}()
|
|
|
|
*common.GetFlagVars() = common.FlagVars{}
|
|
flag.CommandLine = flag.NewFlagSet("fscan-test", flag.ContinueOnError)
|
|
os.Args = []string{
|
|
"fscan-test",
|
|
"-silent",
|
|
"-h", "127.0.0.1",
|
|
"-time", "3",
|
|
"-mt", "20",
|
|
"-retry", "3",
|
|
"-icmp-rate", "0.1",
|
|
"-num", "20",
|
|
}
|
|
|
|
info := &common.HostInfo{}
|
|
if err := common.Flag(info); err != nil {
|
|
t.Fatalf("Flag error = %v", err)
|
|
}
|
|
|
|
cfg, _, err := common.BuildConfig(common.GetFlagVars(), info)
|
|
if err != nil {
|
|
t.Fatalf("BuildConfig error = %v", err)
|
|
}
|
|
if !cfg.TimeoutExplicit || !cfg.ModuleThreadNumExplicit ||
|
|
!cfg.MaxRetriesExplicit || !cfg.Network.ICMPRateExplicit ||
|
|
!cfg.POC.NumExplicit {
|
|
t.Fatalf("explicit flags not propagated: timeout=%v mt=%v retry=%v icmp=%v num=%v",
|
|
cfg.TimeoutExplicit,
|
|
cfg.ModuleThreadNumExplicit,
|
|
cfg.MaxRetriesExplicit,
|
|
cfg.Network.ICMPRateExplicit,
|
|
cfg.POC.NumExplicit)
|
|
}
|
|
|
|
ep := &EnvironmentProfile{
|
|
Net: NetworkProfile{
|
|
Env: EnvLAN,
|
|
RTTMedian: time.Millisecond,
|
|
RTTStddev: 200 * time.Microsecond,
|
|
LossRate: 0,
|
|
Samples: 30,
|
|
},
|
|
System: SystemProfile{FDLimit: 65536, NumCPU: 8},
|
|
}
|
|
ep.TuneConfig(cfg, makeTestSession(cfg))
|
|
|
|
if cfg.Timeout != 3*time.Second {
|
|
t.Fatalf("Timeout = %v, want explicit default 3s", cfg.Timeout)
|
|
}
|
|
if cfg.ModuleThreadNum != 20 {
|
|
t.Fatalf("ModuleThreadNum = %d, want explicit default 20", cfg.ModuleThreadNum)
|
|
}
|
|
if cfg.MaxRetries != 3 {
|
|
t.Fatalf("MaxRetries = %d, want explicit default 3", cfg.MaxRetries)
|
|
}
|
|
if cfg.Network.ICMPRate != 0.1 {
|
|
t.Fatalf("ICMPRate = %.2f, want explicit default 0.10", cfg.Network.ICMPRate)
|
|
}
|
|
if cfg.POC.Num != 20 {
|
|
t.Fatalf("POC.Num = %d, want explicit default 20", cfg.POC.Num)
|
|
}
|
|
}
|