X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/386e1eefaac2021805f73732b10e9f543c221593..1f29f3766ec760168695c8f5bc64aa5ca0c497f1:/services/keep-web/handler_test.go diff --git a/services/keep-web/handler_test.go b/services/keep-web/handler_test.go index 04859595e6..21e47c8dc7 100644 --- a/services/keep-web/handler_test.go +++ b/services/keep-web/handler_test.go @@ -5,12 +5,14 @@ package main import ( + "bytes" "fmt" "html" "io/ioutil" "net/http" "net/http/httptest" "net/url" + "path/filepath" "regexp" "strings" @@ -43,12 +45,12 @@ func (s *UnitSuite) TestCORSPreflight(c *check.C) { c.Check(resp.Code, check.Equals, http.StatusOK) c.Check(resp.Body.String(), check.Equals, "") c.Check(resp.Header().Get("Access-Control-Allow-Origin"), check.Equals, "*") - c.Check(resp.Header().Get("Access-Control-Allow-Methods"), check.Equals, "GET, POST") - c.Check(resp.Header().Get("Access-Control-Allow-Headers"), check.Equals, "Range") + c.Check(resp.Header().Get("Access-Control-Allow-Methods"), check.Equals, "COPY, DELETE, GET, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PUT, RMCOL") + c.Check(resp.Header().Get("Access-Control-Allow-Headers"), check.Equals, "Authorization, Content-Type, Range") // Check preflight for a disallowed request resp = httptest.NewRecorder() - req.Header.Set("Access-Control-Request-Method", "DELETE") + req.Header.Set("Access-Control-Request-Method", "MAKE-COFFEE") h.ServeHTTP(resp, req) c.Check(resp.Body.String(), check.Equals, "") c.Check(resp.Code, check.Equals, http.StatusMethodNotAllowed) @@ -526,6 +528,18 @@ func (s *IntegrationSuite) TestDirectoryListing(c *check.C) { expect: []string{"dir1/foo", "dir1/bar"}, cutDirs: 2, }, + { + uri: "collections.example.com/c=" + arvadostest.FooAndBarFilesInDirUUID + "/t=" + arvadostest.ActiveToken, + header: nil, + expect: []string{"dir1/foo", "dir1/bar"}, + cutDirs: 2, + }, + { + uri: "download.example.com/c=" + arvadostest.FooAndBarFilesInDirUUID, + header: authHeader, + expect: []string{"dir1/foo", "dir1/bar"}, + cutDirs: 1, + }, { uri: "download.example.com/c=" + arvadostest.FooAndBarFilesInDirUUID + "/dir1/", header: authHeader, @@ -550,7 +564,7 @@ func (s *IntegrationSuite) TestDirectoryListing(c *check.C) { expect: nil, }, } { - c.Logf("%q => %q", trial.uri, trial.expect) + c.Logf("HTML: %q => %q", trial.uri, trial.expect) resp := httptest.NewRecorder() u := mustParseURL("//" + trial.uri) req := &http.Request{ @@ -569,7 +583,7 @@ func (s *IntegrationSuite) TestDirectoryListing(c *check.C) { Host: u.Host, URL: u, RequestURI: u.RequestURI(), - Header: http.Header{}, + Header: trial.header, } cookies = append(cookies, (&http.Response{Header: resp.Header()}).Cookies()...) for _, c := range cookies { @@ -587,6 +601,42 @@ func (s *IntegrationSuite) TestDirectoryListing(c *check.C) { } c.Check(resp.Body.String(), check.Matches, `(?ms).*--cut-dirs=`+fmt.Sprintf("%d", trial.cutDirs)+` .*`) } + + c.Logf("WebDAV: %q => %q", trial.uri, trial.expect) + req = &http.Request{ + Method: "OPTIONS", + Host: u.Host, + URL: u, + RequestURI: u.RequestURI(), + Header: trial.header, + Body: ioutil.NopCloser(&bytes.Buffer{}), + } + resp = httptest.NewRecorder() + s.testServer.Handler.ServeHTTP(resp, req) + if trial.expect == nil { + c.Check(resp.Code, check.Equals, http.StatusNotFound) + } else { + c.Check(resp.Code, check.Equals, http.StatusOK) + } + + req = &http.Request{ + Method: "PROPFIND", + Host: u.Host, + URL: u, + RequestURI: u.RequestURI(), + Header: trial.header, + Body: ioutil.NopCloser(&bytes.Buffer{}), + } + resp = httptest.NewRecorder() + s.testServer.Handler.ServeHTTP(resp, req) + if trial.expect == nil { + c.Check(resp.Code, check.Equals, http.StatusNotFound) + } else { + c.Check(resp.Code, check.Equals, http.StatusMultiStatus) + for _, e := range trial.expect { + c.Check(resp.Body.String(), check.Matches, `(?ms).*`+filepath.Join(u.Path, e)+`.*`) + } + } } }