You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

31 lines
1.3 KiB

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)
}
}
}