@@ -13,6 +13,7 @@ import (
13
13
"github.com/coder/coder/v2/coderd/database"
14
14
"github.com/coder/coder/v2/coderd/database/dbfake"
15
15
"github.com/coder/coder/v2/coderd/database/dbtime"
16
+ "github.com/coder/coder/v2/coderd/rbac"
16
17
"github.com/coder/coder/v2/codersdk/agentsdk"
17
18
"github.com/coder/coder/v2/provisionersdk/proto"
18
19
"github.com/coder/coder/v2/testutil"
@@ -22,6 +23,30 @@ import (
22
23
func TestWorkspaceAgentReportStats (t * testing.T ) {
23
24
t .Parallel ()
24
25
26
+ for _ , tc := range []struct {
27
+ name string
28
+ apiKeyScope rbac.ScopeName
29
+ }{
30
+ {
31
+ name : "empty (backwards compat)" ,
32
+ apiKeyScope : "" ,
33
+ },
34
+ {
35
+ name : "all" ,
36
+ apiKeyScope : rbac .ScopeAll ,
37
+ },
38
+ {
39
+ name : "no_user_data" ,
40
+ apiKeyScope : rbac .ScopeNoUserData ,
41
+ },
42
+ {
43
+ name : "application_connect" ,
44
+ apiKeyScope : rbac .ScopeApplicationConnect ,
45
+ },
46
+ } {
47
+ t .Run (tc .name , func (t * testing.T ) {
48
+ t .Parallel ()
49
+
25
50
tickCh := make (chan time.Time )
26
51
flushCh := make (chan int , 1 )
27
52
client , db := coderdtest .NewWithDatabase (t , & coderdtest.Options {
@@ -32,78 +57,114 @@ func TestWorkspaceAgentReportStats(t *testing.T) {
32
57
r := dbfake .WorkspaceBuild (t , db , database.WorkspaceTable {
33
58
OrganizationID : user .OrganizationID ,
34
59
OwnerID : user .UserID ,
35
- }).WithAgent ().Do ()
60
+ }).WithAgent (func (agent []* proto.Agent ) []* proto.Agent {
61
+ for _ , a := range agent {
62
+ a .ApiKeyScope = string (tc .apiKeyScope )
63
+ }
36
64
37
- ac := agentsdk .New (client .URL )
38
- ac .SetSessionToken (r .AgentToken )
39
- conn , err := ac .ConnectRPC (context .Background ())
40
- require .NoError (t , err )
41
- defer func () {
42
- _ = conn .Close ()
43
- }()
44
- agentAPI := agentproto .NewDRPCAgentClient (conn )
65
+ return agent
66
+ },
67
+ ).Do ()
45
68
46
- _ , err = agentAPI .UpdateStats (context .Background (), & agentproto.UpdateStatsRequest {
47
- Stats : & agentproto.Stats {
48
- ConnectionsByProto : map [string ]int64 {"TCP" : 1 },
49
- ConnectionCount : 1 ,
50
- RxPackets : 1 ,
51
- RxBytes : 1 ,
52
- TxPackets : 1 ,
53
- TxBytes : 1 ,
54
- SessionCountVscode : 1 ,
55
- SessionCountJetbrains : 0 ,
56
- SessionCountReconnectingPty : 0 ,
57
- SessionCountSsh : 0 ,
58
- ConnectionMedianLatencyMs : 10 ,
59
- },
60
- })
61
- require .NoError (t , err )
69
+ ac := agentsdk .New (client .URL )
70
+ ac .SetSessionToken (r .AgentToken )
71
+ conn , err := ac .ConnectRPC (context .Background ())
72
+ require .NoError (t , err )
73
+ defer func () {
74
+ _ = conn .Close ()
75
+ }()
76
+ agentAPI := agentproto .NewDRPCAgentClient (conn )
62
77
63
- tickCh <- dbtime .Now ()
64
- count := <- flushCh
65
- require .Equal (t , 1 , count , "expected one flush with one id" )
78
+ _ , err = agentAPI .UpdateStats (context .Background (), & agentproto.UpdateStatsRequest {
79
+ Stats : & agentproto.Stats {
80
+ ConnectionsByProto : map [string ]int64 {"TCP" : 1 },
81
+ ConnectionCount : 1 ,
82
+ RxPackets : 1 ,
83
+ RxBytes : 1 ,
84
+ TxPackets : 1 ,
85
+ TxBytes : 1 ,
86
+ SessionCountVscode : 1 ,
87
+ SessionCountJetbrains : 0 ,
88
+ SessionCountReconnectingPty : 0 ,
89
+ SessionCountSsh : 0 ,
90
+ ConnectionMedianLatencyMs : 10 ,
91
+ },
92
+ })
93
+ require .NoError (t , err )
66
94
67
- newWorkspace , err := client .Workspace (context .Background (), r .Workspace .ID )
68
- require .NoError (t , err )
95
+ tickCh <- dbtime .Now ()
96
+ count := <- flushCh
97
+ require .Equal (t , 1 , count , "expected one flush with one id" )
69
98
70
- assert .True (t ,
71
- newWorkspace .LastUsedAt .After (r .Workspace .LastUsedAt ),
72
- "%s is not after %s" , newWorkspace .LastUsedAt , r .Workspace .LastUsedAt ,
73
- )
99
+ newWorkspace , err := client .Workspace (context .Background (), r .Workspace .ID )
100
+ require .NoError (t , err )
101
+
102
+ assert .True (t ,
103
+ newWorkspace .LastUsedAt .After (r .Workspace .LastUsedAt ),
104
+ "%s is not after %s" , newWorkspace .LastUsedAt , r .Workspace .LastUsedAt ,
105
+ )
106
+ })
107
+ }
74
108
}
75
109
76
110
func TestAgentAPI_LargeManifest (t * testing.T ) {
77
111
t .Parallel ()
78
- ctx := testutil .Context (t , testutil .WaitLong )
79
- client , store := coderdtest .NewWithDatabase (t , nil )
80
- adminUser := coderdtest .CreateFirstUser (t , client )
81
- n := 512000
82
- longScript := make ([]byte , n )
83
- for i := range longScript {
84
- longScript [i ] = 'q'
112
+
113
+ for _ , tc := range []struct {
114
+ name string
115
+ apiKeyScope rbac.ScopeName
116
+ }{
117
+ {
118
+ name : "empty (backwards compat)" ,
119
+ apiKeyScope : "" ,
120
+ },
121
+ {
122
+ name : "all" ,
123
+ apiKeyScope : rbac .ScopeAll ,
124
+ },
125
+ {
126
+ name : "no_user_data" ,
127
+ apiKeyScope : rbac .ScopeNoUserData ,
128
+ },
129
+ {
130
+ name : "application_connect" ,
131
+ apiKeyScope : rbac .ScopeApplicationConnect ,
132
+ },
133
+ } {
134
+ t .Run (tc .name , func (t * testing.T ) {
135
+ t .Parallel ()
136
+ ctx := testutil .Context (t , testutil .WaitLong )
137
+ client , store := coderdtest .NewWithDatabase (t , nil )
138
+ adminUser := coderdtest .CreateFirstUser (t , client )
139
+ n := 512000
140
+ longScript := make ([]byte , n )
141
+ for i := range longScript {
142
+ longScript [i ] = 'q'
143
+ }
144
+ r := dbfake .WorkspaceBuild (t , store , database.WorkspaceTable {
145
+ OrganizationID : adminUser .OrganizationID ,
146
+ OwnerID : adminUser .UserID ,
147
+ }).WithAgent (func (agents []* proto.Agent ) []* proto.Agent {
148
+ agents [0 ].Scripts = []* proto.Script {
149
+ {
150
+ Script : string (longScript ),
151
+ },
152
+ }
153
+ agents [0 ].ApiKeyScope = string (tc .apiKeyScope )
154
+ return agents
155
+ }).Do ()
156
+ ac := agentsdk .New (client .URL )
157
+ ac .SetSessionToken (r .AgentToken )
158
+ conn , err := ac .ConnectRPC (ctx )
159
+ defer func () {
160
+ _ = conn .Close ()
161
+ }()
162
+ require .NoError (t , err )
163
+ agentAPI := agentproto .NewDRPCAgentClient (conn )
164
+ manifest , err := agentAPI .GetManifest (ctx , & agentproto.GetManifestRequest {})
165
+ require .NoError (t , err )
166
+ require .Len (t , manifest .Scripts , 1 )
167
+ require .Len (t , manifest .Scripts [0 ].Script , n )
168
+ })
85
169
}
86
- r := dbfake .WorkspaceBuild (t , store , database.WorkspaceTable {
87
- OrganizationID : adminUser .OrganizationID ,
88
- OwnerID : adminUser .UserID ,
89
- }).WithAgent (func (agents []* proto.Agent ) []* proto.Agent {
90
- agents [0 ].Scripts = []* proto.Script {
91
- {
92
- Script : string (longScript ),
93
- },
94
- }
95
- return agents
96
- }).Do ()
97
- ac := agentsdk .New (client .URL )
98
- ac .SetSessionToken (r .AgentToken )
99
- conn , err := ac .ConnectRPC (ctx )
100
- defer func () {
101
- _ = conn .Close ()
102
- }()
103
- require .NoError (t , err )
104
- agentAPI := agentproto .NewDRPCAgentClient (conn )
105
- manifest , err := agentAPI .GetManifest (ctx , & agentproto.GetManifestRequest {})
106
- require .NoError (t , err )
107
- require .Len (t , manifest .Scripts , 1 )
108
- require .Len (t , manifest .Scripts [0 ].Script , n )
109
170
}
0 commit comments