-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathuser_agent_test.go
85 lines (70 loc) · 1.89 KB
/
user_agent_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package client
import (
"context"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/code-payments/code-server/pkg/grpc/headers"
)
func TestGetUserAgent_HappyPath(t *testing.T) {
for _, headerValue := range []string{
"Code/iOS/11.22.33",
"Code/Android/11.22.33",
"Mozilla/5.0 Code/iOS/11.22.33 Mobile Safari/533.1",
} {
ctx := context.Background()
ctx, err := headers.ContextWithHeaders(ctx)
require.NoError(t, err)
require.NoError(t, headers.SetASCIIHeader(ctx, UserAgentHeaderName, headerValue))
userAgent, err := GetUserAgent(ctx)
require.NoError(t, err)
if strings.Contains(headerValue, DeviceTypeIOS.String()) {
assert.Equal(t, DeviceTypeIOS, userAgent.DeviceType)
} else {
assert.Equal(t, DeviceTypeAndroid, userAgent.DeviceType)
}
assert.Equal(t, 11, userAgent.Version.Major)
assert.Equal(t, 22, userAgent.Version.Minor)
assert.Equal(t, 33, userAgent.Version.Patch)
}
}
func TestGetUserAgent_ParseError(t *testing.T) {
for _, headerValue := range []string{
// No Code value
"Mozilla/5.0 Mobile Safari/533.1",
// Unsupported device type
"Code/Windows/1.2.3",
// Version components missing
"Code/iOS/1",
"Code/iOS/1.",
"Code/iOS/.2.3",
"Code/iOS/..3",
"Code/iOS/..",
// Non-digit values in version
"Code/iOS/a.2.3",
"Code/iOS/1.a.3",
"Code/iOS/2.a.3",
// Negative values in version
"Code/iOS/-1.2.3",
"Code/iOS/1.-2.3",
} {
ctx := context.Background()
ctx, err := headers.ContextWithHeaders(ctx)
require.NoError(t, err)
require.NoError(t, headers.SetASCIIHeader(ctx, UserAgentHeaderName, headerValue))
_, err = GetUserAgent(ctx)
assert.Error(t, err)
}
}
func TestUserAgent_StringValue(t *testing.T) {
ua := UserAgent{
DeviceType: DeviceTypeIOS,
Version: Version{
Major: 1,
Minor: 2,
Patch: 3,
},
}
assert.Equal(t, "Code/iOS/1.2.3", ua.String())
}