44 "fmt"
55 "log"
66 "net/http"
7+ "net/http/cookiejar"
78 "net/url"
89 "path/filepath"
910 "strings"
@@ -21,12 +22,20 @@ var _ = Describe("Testing samples", Label("samples"), Ordered, func() {
2122 var builderImg string
2223 var client docker.APIClient
2324 var err error
25+ var httpClient http.Client
2426
2527 BeforeAll (func (ctx SpecContext ) {
2628 builderImg = strings .ToLower (fmt .Sprintf ("test-builder-image-%s" , getULID ()))
2729 Expect (buildBuilder (ctx , filepath .Join (builderLoc , "builder.toml" ), builderImg )).To (Succeed ())
2830 client , err = docker .NewClientWithOpts (docker .FromEnv , docker .WithAPIVersionNegotiation ())
2931 Expect (err ).ToNot (HaveOccurred ())
32+ httpClient = * http .DefaultClient
33+ })
34+
35+ BeforeEach (func () {
36+ jar , err := cookiejar .New (& cookiejar.Options {})
37+ Expect (err ).ToNot (HaveOccurred ())
38+ httpClient .Jar = jar
3039 })
3140
3241 AfterAll (func (ctx SpecContext ) {
@@ -47,7 +56,7 @@ var _ = Describe("Testing samples", Label("samples"), Ordered, func() {
4756 })
4857
4958 DescribeTableSubtree (
50- "samples " ,
59+ "jupyterlab " ,
5160 func (source string ) {
5261 var image string
5362 var container string
@@ -89,7 +98,7 @@ var _ = Describe("Testing samples", Label("samples"), Ordered, func() {
8998 req , err := http .NewRequestWithContext (ctx , "GET" , baseURL .String (), nil )
9099 Expect (err ).ToNot (HaveOccurred ())
91100 Eventually (func (g Gomega ) int {
92- res , err := http . DefaultClient .Do (req )
101+ res , err := httpClient .Do (req )
93102 g .Expect (err ).ToNot (HaveOccurred ())
94103 return res .StatusCode
95104 }).WithTimeout (time .Minute * 1 ).WithOffset (1 ).Should (Equal (200 ))
@@ -106,4 +115,61 @@ var _ = Describe("Testing samples", Label("samples"), Ordered, func() {
106115 Entry ("using conda" , "../../samples/conda" ),
107116 Entry ("using poetry" , "../../samples/poetry" ),
108117 )
118+
119+ DescribeTableSubtree (
120+ "rstudio" ,
121+ func (source string ) {
122+ var image string
123+ var container string
124+ var port int
125+ var baseURL url.URL
126+ BeforeAll (func (ctx SpecContext ) {
127+ image = strings .ToLower (fmt .Sprintf ("test-image-%s" , getULID ()))
128+ Expect (buildImage (ctx , builderImg , source , image , map [string ]string {"BP_RENKU_FRONTENDS" : "rstudio" })).To (Succeed ())
129+ port = getFreePortOrDie ()
130+ envVars := []string {fmt .Sprintf ("RENKU_SESSION_PORT=%d" , port )}
131+ ports := map [int ]int {port : port }
132+ container , err = runImage (ctx , client , image , envVars , ports )
133+ Expect (err ).ToNot (HaveOccurred ())
134+ baseURL = url.URL {
135+ Host : fmt .Sprintf ("127.0.0.1:%d" , port ),
136+ Scheme : "http" ,
137+ }
138+ })
139+
140+ AfterAll (func (ctx SpecContext ) {
141+ if container != "" && client != nil {
142+ log .Println ("Cleaning up container" )
143+ err = removeContainer (ctx , client , container )
144+ if err != nil {
145+ log .Println (err )
146+ }
147+ }
148+ if image != "" && client != nil {
149+ log .Println ("Cleaning up image" )
150+ err = removeImage (ctx , client , image )
151+ if err != nil {
152+ log .Println (err )
153+ }
154+ }
155+ })
156+
157+ Context ("when the container is running" , func () {
158+ It ("rstudio should respond with 200 on the base url" , func (ctx SpecContext ) {
159+ req , err := http .NewRequestWithContext (ctx , "GET" , baseURL .String (), nil )
160+ Expect (err ).ToNot (HaveOccurred ())
161+ Eventually (func (g Gomega ) int {
162+ res , err := httpClient .Do (req )
163+ g .Expect (err ).ToNot (HaveOccurred ())
164+ return res .StatusCode
165+ }).WithTimeout (time .Minute * 1 ).WithOffset (1 ).Should (Equal (200 ))
166+ })
167+ It ("Users should be install packages in the container" , func (ctx SpecContext ) {
168+ _ , err := execInContainer (ctx , client , container , []string {"launcher" , "bash" , "-c" , "R -e 'install.packages(\" dplyr\" )'" })
169+ Expect (err ).ToNot (HaveOccurred ())
170+ })
171+ })
172+ },
173+ Entry ("using random sample" , "../../samples/pip" ),
174+ )
109175})
0 commit comments