pkg/client: make Describe use a POST request to the server

Otherwise it can't send Describe Rules.

Also in this commit: a bunch of new tests from when I thought I was going crazy
and trying to debug the search system, before I realized the problem was that the
client was doing a GET request and dropping most of my DescribeRequest.

Change-Id: I4ea9bed80f0d7d6b86814527b63acc3586ac1d06
This commit is contained in:
Brad Fitzpatrick 2014-10-19 17:36:22 +02:00
parent bfb325c96f
commit a16c015f32
3 changed files with 41 additions and 2 deletions

View File

@ -475,8 +475,12 @@ func (c *Client) Describe(req *search.DescribeRequest) (*search.DescribeResponse
if err != nil { if err != nil {
return nil, err return nil, err
} }
url := sr + req.URLSuffix() url := sr + req.URLSuffixPost()
hreq := c.newRequest("GET", url) body, err := json.MarshalIndent(req, "", "\t")
if err != nil {
return nil, err
}
hreq := c.newRequest("POST", url, bytes.NewReader(body))
hres, err := c.expect2XX(hreq) hres, err := c.expect2XX(hreq)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -249,6 +249,13 @@ func (m MetaMap) Get(br blob.Ref) *DescribedBlob {
return m[br.String()] return m[br.String()]
} }
// URLSuffixPost returns the URL suffix for POST requests.
func (r *DescribeRequest) URLSuffixPost() string {
return "camli/search/describe"
}
// URLSuffix returns the URL suffix for GET requests.
// This is deprecated.
func (r *DescribeRequest) URLSuffix() string { func (r *DescribeRequest) URLSuffix() string {
var buf bytes.Buffer var buf bytes.Buffer
fmt.Fprintf(&buf, "camli/search/describe?depth=%d&maxdirchildren=%d", fmt.Fprintf(&buf, "camli/search/describe?depth=%d&maxdirchildren=%d",

View File

@ -74,6 +74,12 @@ func searchDescribeSetup(fi *test.FakeIndex) index.Interface {
addPermanode(fi, "somevenuepic-0", addPermanode(fi, "somevenuepic-0",
"foo", "bar", "foo", "bar",
) )
addPermanode(fi, "venuepic-2",
"camliContent", "somevenuepic-2",
)
addPermanode(fi, "somevenuepic-2",
"foo", "baz",
)
addPermanode(fi, "homedir-0", addPermanode(fi, "homedir-0",
"camliPath:subdir.1", "homedir-1", "camliPath:subdir.1", "homedir-1",
@ -85,6 +91,11 @@ func searchDescribeSetup(fi *test.FakeIndex) index.Interface {
"foo", "bar", "foo", "bar",
) )
addPermanode(fi, "set-0",
"camliMember", "venuepic-1",
"camliMember", "venuepic-2",
)
return fi return fi
} }
@ -206,6 +217,23 @@ var searchDescribeTests = []handlerTest{
}), }),
wantDescribed: []string{"homedir-0", "homedir-1", "homedir-2"}, wantDescribed: []string{"homedir-0", "homedir-1", "homedir-2"},
}, },
{
name: "find members",
postBody: marshalJSON(&search.DescribeRequest{
BlobRef: blob.MustParse("set-0"),
Rules: []*search.DescribeRule{
{
IfResultRoot: true,
Attrs: []string{"camliMember"},
Rules: []*search.DescribeRule{
{Attrs: []string{"camliContent"}},
},
},
},
}),
wantDescribed: []string{"set-0", "venuepic-1", "venuepic-2", "somevenuepic-0", "somevenuepic-2"},
},
} }
func init() { func init() {