github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_useragent_test.go (about) 1 // Unless explicitly stated otherwise all files in this repository are licensed 2 // under the MIT License. 3 // This product includes software developed at Guance Cloud (https://www.guance.com/). 4 // Copyright 2021-present Guance, Inc. 5 6 package funcs 7 8 import ( 9 "testing" 10 "time" 11 12 "github.com/GuanceCloud/cliutils/pipeline/ptinput" 13 "github.com/GuanceCloud/cliutils/point" 14 tu "github.com/GuanceCloud/cliutils/testutil" 15 ) 16 17 func TestUserAgent(t *testing.T) { 18 cases := []struct { 19 name string 20 pl, in string 21 expected map[string]interface{} 22 fail bool 23 }{ 24 { 25 name: "normal", 26 pl: `json(_, userAgent) 27 user_agent(userAgent)`, 28 in: ` 29 { 30 "userAgent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", 31 "second" : 2, 32 "third" : "abc", 33 "forth" : true 34 } 35 `, 36 expected: map[string]interface{}{ 37 "isMobile": false, 38 "isBot": false, 39 "os": "Windows 7", 40 "browser": "Chrome", 41 "browserVer": "36.0.1985.125", 42 "engine": "AppleWebKit", 43 "engineVer": "537.36", 44 "ua": "Windows", 45 }, 46 fail: false, 47 }, 48 { 49 name: "normal", 50 pl: `json(_, userAgent) 51 user_agent(userAgent)`, 52 in: ` 53 { 54 "userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" 55 } 56 `, 57 expected: map[string]interface{}{ 58 "isMobile": false, 59 "isBot": false, 60 "os": "Intel Mac OS X 10_15_7", 61 "browser": "Safari", 62 "browserVer": "15.1", 63 "engine": "AppleWebKit", 64 "engineVer": "605.1.15", 65 "ua": "Macintosh", 66 }, 67 fail: false, 68 }, 69 70 { 71 name: "normal", 72 pl: `json(_, userAgent) 73 user_agent(agent)`, 74 in: ` 75 { 76 "userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" 77 } 78 `, 79 expected: map[string]interface{}{}, 80 fail: false, 81 }, 82 83 { 84 name: "invalid arg type", 85 pl: `json(_, userAgent) 86 user_agent("userAgent")`, 87 in: ` 88 { 89 "userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" 90 } 91 `, 92 expected: map[string]interface{}{}, 93 fail: false, 94 }, 95 96 { 97 name: "too many args", 98 pl: `json(_, userAgent) 99 user_agent(userAgent, someArg)`, 100 in: ` 101 { 102 "userAgent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" 103 } 104 `, 105 fail: true, 106 }, 107 } 108 for idx, tc := range cases { 109 t.Run(tc.name, func(t *testing.T) { 110 runner, err := NewTestingRunner(tc.pl) 111 if err != nil { 112 if tc.fail { 113 t.Logf("[%d]expect error: %s", idx, err) 114 } else { 115 t.Errorf("[%d] failed: %s", idx, err) 116 } 117 return 118 } 119 120 pt := ptinput.NewPlPoint( 121 point.Logging, "test", nil, map[string]any{"message": tc.in}, time.Now()) 122 errR := runScript(runner, pt) 123 124 if errR != nil { 125 if tc.fail { 126 t.Logf("[%d]expect error: %s", idx, err) 127 } else { 128 t.Fatal(errR) 129 } 130 } else { 131 fieldsToCompare := make(map[string]interface{}) 132 for k := range tc.expected { 133 fieldsToCompare[k], _, _ = pt.Get(k) 134 } 135 tu.Equals(t, tc.expected, fieldsToCompare) 136 t.Logf("[%d] PASS", idx) 137 } 138 }) 139 } 140 }