@@ -23,6 +23,8 @@ import (
23
23
"testing"
24
24
"time"
25
25
26
+ "github.com/coder/coder/v2/codersdk"
27
+ "github.com/coder/coder/v2/codersdk/agentsdk"
26
28
"github.com/coder/envbuilder"
27
29
"github.com/coder/envbuilder/devcontainer/features"
28
30
"github.com/coder/envbuilder/internal/magicdir"
@@ -58,6 +60,71 @@ const (
58
60
testImageUbuntu = "localhost:5000/envbuilder-test-ubuntu:latest"
59
61
)
60
62
63
+ func TestLogs (t * testing.T ) {
64
+ t .Parallel ()
65
+
66
+ token := uuid .NewString ()
67
+ logsDone := make (chan struct {})
68
+
69
+ logHandler := func (w http.ResponseWriter , r * http.Request ) {
70
+ switch r .URL .Path {
71
+ case "/api/v2/buildinfo" :
72
+ w .Header ().Set ("Content-Type" , "application/json" )
73
+ _ , _ = w .Write ([]byte (`{"version": "v2.8.9"}` ))
74
+ return
75
+ case "/api/v2/workspaceagents/me/logs" :
76
+ w .WriteHeader (http .StatusOK )
77
+ tokHdr := r .Header .Get (codersdk .SessionTokenHeader )
78
+ assert .Equal (t , token , tokHdr )
79
+ var req agentsdk.PatchLogs
80
+ err := json .NewDecoder (r .Body ).Decode (& req )
81
+ if err != nil {
82
+ http .Error (w , err .Error (), http .StatusBadRequest )
83
+ return
84
+ }
85
+ for _ , log := range req .Logs {
86
+ t .Logf ("got log: %+v" , log )
87
+ if strings .Contains (log .Output , "Closing logs" ) {
88
+ close (logsDone )
89
+ return
90
+ }
91
+ }
92
+ return
93
+ default :
94
+ t .Errorf ("unexpected request to %s" , r .URL .Path )
95
+ w .WriteHeader (http .StatusNotFound )
96
+ return
97
+ }
98
+ }
99
+ logSrv := httptest .NewServer (http .HandlerFunc (logHandler ))
100
+ defer logSrv .Close ()
101
+
102
+ // Ensures that a Git repository with a devcontainer.json is cloned and built.
103
+ srv := gittest .CreateGitServer (t , gittest.Options {
104
+ Files : map [string ]string {
105
+ "devcontainer.json" : `{
106
+ "build": {
107
+ "dockerfile": "Dockerfile"
108
+ },
109
+ }` ,
110
+ "Dockerfile" : fmt .Sprintf (`FROM %s` , testImageUbuntu ),
111
+ },
112
+ })
113
+ _ , err := runEnvbuilder (t , runOpts {env : []string {
114
+ envbuilderEnv ("GIT_URL" , srv .URL ),
115
+ "CODER_AGENT_URL=" + logSrv .URL ,
116
+ "CODER_AGENT_TOKEN=" + token ,
117
+ }})
118
+ require .NoError (t , err )
119
+ ctx , cancel := context .WithTimeout (context .Background (), time .Minute )
120
+ defer cancel ()
121
+ select {
122
+ case <- ctx .Done ():
123
+ t .Fatal ("timed out waiting for logs" )
124
+ case <- logsDone :
125
+ }
126
+ }
127
+
61
128
func TestInitScriptInitCommand (t * testing.T ) {
62
129
t .Parallel ()
63
130
0 commit comments