@@ -30,6 +30,7 @@ import (
30
30
"github.com/coder/coder/v2/codersdk/agentsdk"
31
31
"github.com/coder/coder/v2/testutil"
32
32
"github.com/coder/quartz"
33
+ "google.golang.org/protobuf/types/known/timestamppb"
33
34
)
34
35
35
36
func TestReplicaSetEvents (t * testing.T ) {
@@ -41,13 +42,14 @@ func TestReplicaSetEvents(t *testing.T) {
41
42
agentURL , err := url .Parse (api .server .URL )
42
43
require .NoError (t , err )
43
44
namespace := "test-namespace"
45
+ sourceUUID := agentsdk .ExternalLogSourceID
44
46
client := fake .NewSimpleClientset ()
45
47
46
48
cMock := quartz .NewMock (t )
47
49
reporter , err := newPodEventLogger (ctx , podEventLoggerOptions {
48
50
client : client ,
49
51
coderURL : agentURL ,
50
- namespace : namespace ,
52
+ namespaces : namespace ,
51
53
logger : slogtest .Make (t , nil ).Leveled (slog .LevelDebug ),
52
54
logDebounce : 5 * time .Second ,
53
55
clock : cMock ,
@@ -89,7 +91,7 @@ func TestReplicaSetEvents(t *testing.T) {
89
91
90
92
logs := testutil .RequireRecvCtx (ctx , t , api .logs )
91
93
require .Len (t , logs , 1 )
92
- require .Contains (t , logs [0 ].Output , "Queued pod from ReplicaSet " )
94
+ require .Contains (t , logs [0 ].Output , "Created replicaset " )
93
95
94
96
event := & corev1.Event {
95
97
ObjectMeta : v1.ObjectMeta {
@@ -117,7 +119,7 @@ func TestReplicaSetEvents(t *testing.T) {
117
119
118
120
logs = testutil .RequireRecvCtx (ctx , t , api .logs )
119
121
require .Len (t , logs , 1 )
120
- require .Contains (t , logs [0 ].Output , "Deleted ReplicaSet " )
122
+ require .Contains (t , logs [0 ].Output , "Deleted replicaset " )
121
123
122
124
require .Eventually (t , func () bool {
123
125
return reporter .tc .isEmpty ()
@@ -138,13 +140,14 @@ func TestPodEvents(t *testing.T) {
138
140
agentURL , err := url .Parse (api .server .URL )
139
141
require .NoError (t , err )
140
142
namespace := "test-namespace"
143
+ sourceUUID := agentsdk .ExternalLogSourceID
141
144
client := fake .NewSimpleClientset ()
142
145
143
146
cMock := quartz .NewMock (t )
144
147
reporter , err := newPodEventLogger (ctx , podEventLoggerOptions {
145
148
client : client ,
146
149
coderURL : agentURL ,
147
- namespace : namespace ,
150
+ namespaces : namespace ,
148
151
logger : slogtest .Make (t , nil ).Leveled (slog .LevelDebug ),
149
152
logDebounce : 5 * time .Second ,
150
153
clock : cMock ,
@@ -305,9 +308,9 @@ func Test_logQueuer(t *testing.T) {
305
308
go lq .work (ctx )
306
309
307
310
ch <- agentLog {
308
- op : opLog ,
309
- resourceName : "mypod " ,
310
- agentToken : "0b42fa72-7f1a-4b59-800d-69d67f56ed8b" ,
311
+ name : "mypod" ,
312
+ token : "0b42fa72-7f1a-4b59-800d-69d67f56ed8b " ,
313
+ delete : false ,
311
314
log : agentsdk.Log {
312
315
CreatedAt : time .Now (),
313
316
Output : "This is a log." ,
@@ -321,9 +324,9 @@ func Test_logQueuer(t *testing.T) {
321
324
require .Len (t , logs , 1 )
322
325
323
326
ch <- agentLog {
324
- op : opLog ,
325
- resourceName : "mypod " ,
326
- agentToken : "0b42fa72-7f1a-4b59-800d-69d67f56ed8b" ,
327
+ name : "mypod" ,
328
+ token : "0b42fa72-7f1a-4b59-800d-69d67f56ed8b " ,
329
+ delete : false ,
327
330
log : agentsdk.Log {
328
331
CreatedAt : time .Now (),
329
332
Output : "This is a log too." ,
@@ -361,6 +364,10 @@ func newFakeAgentAPI(t *testing.T) *fakeAgentAPI {
361
364
fakeAPI .PostLogSource (w , r )
362
365
})
363
366
367
+ rtr .Patch ("/api/v2/workspaceagents/me/logs" , func (w http.ResponseWriter , r * http.Request ) {
368
+ fakeAPI .PatchLogs (w , r )
369
+ })
370
+
364
371
rtr .Get ("/api/v2/workspaceagents/me/rpc" , func (w http.ResponseWriter , r * http.Request ) {
365
372
defer func () {
366
373
fakeAPI .disconnect <- struct {}{}
@@ -460,6 +467,29 @@ func (f *fakeAgentAPI) PostLogSource(w http.ResponseWriter, r *http.Request) {
460
467
}
461
468
}
462
469
470
+ func (f * fakeAgentAPI ) PatchLogs (w http.ResponseWriter , r * http.Request ) {
471
+ var req agentsdk.PatchLogs
472
+ err := json .NewDecoder (r .Body ).Decode (& req )
473
+ if err != nil {
474
+ fmt .Println ("failed to decode patch logs:" , err .Error ())
475
+ w .WriteHeader (http .StatusBadRequest )
476
+ return
477
+ }
478
+
479
+ // Convert agentsdk.Log to proto.Log for the channel
480
+ protoLogs := make ([]* proto.Log , len (req .Logs ))
481
+ for i , log := range req .Logs {
482
+ protoLogs [i ] = & proto.Log {
483
+ CreatedAt : timestamppb .New (log .CreatedAt ),
484
+ Output : log .Output ,
485
+ Level : proto .Log_Level (proto .Log_Level_value [string (log .Level )]),
486
+ }
487
+ }
488
+
489
+ f .logs <- protoLogs
490
+ w .WriteHeader (http .StatusOK )
491
+ }
492
+
463
493
func TestParseNamespaces (t * testing.T ) {
464
494
tests := []struct {
465
495
name string
0 commit comments