(t *testing.T)
| 81 | } |
| 82 | |
| 83 | func TestScriptMatch(t *testing.T) { |
| 84 | client := &livekit.ClientInfo{ |
| 85 | Protocol: 6, |
| 86 | Browser: "chrome", |
| 87 | Sdk: 3, // android |
| 88 | DeviceModel: "12345", |
| 89 | BrowserVersion: "13.2", |
| 90 | Version: "2.17.1", |
| 91 | } |
| 92 | |
| 93 | type testcase struct { |
| 94 | name string |
| 95 | expr string |
| 96 | result bool |
| 97 | err bool |
| 98 | } |
| 99 | |
| 100 | cases := []testcase{ |
| 101 | {name: "simple match", expr: `c.protocol > 5`, result: true}, |
| 102 | {name: "invalid expr", expr: `cc.protocol > 5`, err: true}, |
| 103 | {name: "unexist field", expr: `c.protocols > 5`, err: true}, |
| 104 | {name: "combined condition", expr: `c.protocol > 5 && (c.sdk=="android" || c.sdk=="ios")`, result: true}, |
| 105 | {name: "combined condition2", expr: `(c.device_model == "xiaomi 2201117ti" && c.os == "android") || ((c.browser == "firefox" || c.browser == "firefox mobile") && (c.os == "linux" || c.os == "android"))`, result: false}, |
| 106 | {name: "string lesser", expr: `c.browser_version < "11.3"`, result: false}, |
| 107 | {name: "string lesser eq", expr: `c.browser_version <= "13.2"`, result: true}, |
| 108 | {name: "string greater", expr: `c.browser_version > "11.3"`, result: true}, |
| 109 | {name: "string greater eq", expr: `c.browser_version >= "13.2"`, result: true}, |
| 110 | {name: "semantic lesser", expr: `c.version < "2.16.10"`, result: false}, |
| 111 | {name: "semantic lesser eq", expr: `c.version <= "2.17.1"`, result: true}, |
| 112 | {name: "semantic greater", expr: `c.version > "2.16.10"`, result: true}, |
| 113 | {name: "semantic greater eq", expr: `c.version >= "2.17.1"`, result: true}, |
| 114 | } |
| 115 | |
| 116 | for _, c := range cases { |
| 117 | t.Run(c.name, func(t *testing.T) { |
| 118 | match, err := NewScriptMatch(c.expr) |
| 119 | if err != nil { |
| 120 | if !c.err { |
| 121 | require.NoError(t, err) |
| 122 | } |
| 123 | return |
| 124 | } |
| 125 | m, err := match.Match(client) |
| 126 | if c.err { |
| 127 | require.Error(t, err) |
| 128 | } else { |
| 129 | require.Equal(t, c.result, m) |
| 130 | } |
| 131 | }) |
| 132 | |
| 133 | } |
| 134 | } |
nothing calls this directly
no test coverage detected