package comm import "testing" // AppNamesHas 是产品下发的作用域闸门(DBProduct.Appnames)。两条底线: // - 前缀包含关系不能算命中——线上真实存在 EAIMAR 与 EAIMAR-TEST 两个应用名, // 任何形式的子串匹配都会让正式应用拿到测试应用的产品(再由客户端挑成绑定 pid); // - 空 CSV = 未绑定 = 不限应用,存量产品大多没填这一列,判严会让整批设备绑定/OTA 失效。 func TestAppNamesHas(t *testing.T) { cases := []struct { name string csv string app string want bool }{ {"未绑定任何应用即不限应用", "", "EAIMAR", true}, {"未声明部署身份时不收窄", "EAIMAR", "", true}, {"单个精确命中", "EAIMAR", "EAIMAR", true}, {"多个里命中一个", "deepGlass,EAIMAR", "EAIMAR", true}, {"带空格照样命中", " deepGlass , EAIMAR ", "EAIMAR", true}, {"不同应用不命中", "deepGlass", "EAIMAR", false}, {"前缀不算命中(正式不拿测试的产品)", "EAIMAR-TEST", "EAIMAR", false}, {"反向前缀也不算命中", "EAIMAR", "EAIMAR-TEST", false}, {"大小写敏感", "eaimar", "EAIMAR", false}, } for _, c := range cases { if got := AppNamesHas(c.csv, c.app); got != c.want { t.Errorf("%s: AppNamesHas(%q, %q) = %v, want %v", c.name, c.csv, c.app, got, c.want) } } }