X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/42c0668947436ae07fa0fa249414d3952758af26..b9276721177e8aa6710ed7203f1142f9062af81c:/services/keep-web/handler_test.go diff --git a/services/keep-web/handler_test.go b/services/keep-web/handler_test.go index 04859595e6..6bd34d7113 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,8 +45,8 @@ 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, "GET, POST, OPTIONS, PROPFIND") + c.Check(resp.Header().Get("Access-Control-Allow-Headers"), check.Equals, "Authorization, Content-Type, Range") // Check preflight for a disallowed request resp = httptest.NewRecorder() @@ -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)+`.*`) + } + } } }