@@ -23,6 +23,8 @@ import (
2323 "testing"
2424 "time"
2525
26+ "github.com/coder/coder/v2/codersdk"
27+ "github.com/coder/coder/v2/codersdk/agentsdk"
2628 "github.com/coder/envbuilder"
2729 "github.com/coder/envbuilder/devcontainer/features"
2830 "github.com/coder/envbuilder/internal/magicdir"
@@ -58,6 +60,71 @@ const (
5860 testImageUbuntu = "localhost:5000/envbuilder-test-ubuntu:latest"
5961)
6062
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+
61128func TestInitScriptInitCommand (t * testing.T ) {
62129 t .Parallel ()
63130
0 commit comments