)]}'
{"ceilometer/gabbi/gabbits/clean-samples.yaml":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"0a3dbbdd86e4b51e0e4f086d99b858365c1e56f7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"  response_headers:"},{"line_number":31,"context_line":"      content-type: application/json; charset\u003dUTF-8"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# TODO(chdent): No location header in the response!!!!"},{"line_number":34,"context_line":"# - name: get sample"},{"line_number":35,"context_line":"#   desc: get the sample we just posted"},{"line_number":36,"context_line":"#   url: $LOCATION"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a961159_da0e363d","line":33,"updated":"2015-01-20 11:54:32.000000000","message":"Yeah, interesting point ... I wonder if POST\u0027ing a sample to /v2/meters/ is not treated as creating a new REST resource (such that the status code would be 201 Created and the response headers include a location) because the \"target collection\" in this case is meters as opposed to samples?\n\ni.e. the resulting independently addressable resource may be retrieved individually via:\n\n  GET /v2/samples/$UUID\n\nwhereas when retrieving via the original \"collection\" POST\u0027d to, it would be more like a group-style retrieval such as:\n\n  GET /v2/meters/$METER_NAME?$QUERY\n\nwhere $QUERY is sufficiently constrained (in terms of timestamp, resource_id, message_id or whatever) to just yield a single sample.\n\nSo I\u0027m just thinking aloud ... that the lack of exact specificity on a /v2/meters-based URL to select the sample just POST\u0027d was the reasoning behind not returning the expected 201/Location header?\n\nDoes the api-wg for example have anything to say about the form of the location URI returned, specifically is there an expectation of similarity in form between the URL POST\u0027d to and the new resource\u0027s location?","commit_id":"a02c0b26da2726f823144a690c8bd13e0c8ea8b9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a8092792bf8ee9ddd714a3f2c6ea3db00f267b90","unresolved":false,"context_lines":[{"line_number":30,"context_line":"  response_headers:"},{"line_number":31,"context_line":"      content-type: application/json; charset\u003dUTF-8"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# TODO(chdent): No location header in the response!!!!"},{"line_number":34,"context_line":"# - name: get sample"},{"line_number":35,"context_line":"#   desc: get the sample we just posted"},{"line_number":36,"context_line":"#   url: $LOCATION"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a961159_fce92a80","line":33,"in_reply_to":"3a961159_da0e363d","updated":"2015-01-20 14:17:07.000000000","message":"In the religion I come from, when creating or updating a resource (whether one or several) the response\u0027s Location header should _always_ have the identity (the URL) of the created resource.\n\nWhether that resource is in a same path hierarchy or on a different server is irrelevant. You made something, Location should have that thing at its canonical uri.\n\nIn this specific case I would expect the location header to be /v2/samples/$UUID as that\u0027s (from what I can tell) the canonical uri of the created sample.\n\nI don\u0027t know if the api-wg has addressed this topic at all yet. I haven\u0027t seen it, but things move in mysterious ways over there, so I\u0027ll have to check and see.","commit_id":"a02c0b26da2726f823144a690c8bd13e0c8ea8b9"}],"ceilometer/tests/gabbi/fixtures.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5bc0641d606b271f9647e528de706df1b6ae3ec5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                              source\u003dself.source,"},{"line_number":105,"context_line":"                              )"},{"line_number":106,"context_line":"            data \u003d utils.meter_message_from_counter("},{"line_number":107,"context_line":"                c, conf.publisher.metering_secret)"},{"line_number":108,"context_line":"            self.conn.record_metering_data(data)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def stop_fixture(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_610e3a36","line":107,"updated":"2015-02-03 12:02:06.000000000","message":"This is now changed to telemetry_secret.","commit_id":"34530968cd9a5266d4477e039e4c47852fa1f430"}],"ceilometer/tests/gabbi/gabbits/capabilities.yaml":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"daebecf960aebaffd840ed150830cb0668ed5798","unresolved":false,"context_lines":[{"line_number":13,"context_line":"      $.alarm_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":14,"context_line":"      $.event_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":15,"context_line":"      $.storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":16,"context_line":"      $.api.[\u0027meters:pagination\u0027]: false"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"fa81d914_3fbb7473","line":16,"updated":"2015-01-29 16:28:04.000000000","message":"This is a fairly small subset of the capabilities fields, would it make to expand this out a bit?","commit_id":"33ae4d5dd11ee68fa7dda02ae596bfc4d2247bc7"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"60ee50fa1bbc1f3a6842fcd4904ce7aa48be7fa7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"      $.alarm_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":14,"context_line":"      $.event_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":15,"context_line":"      $.storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":16,"context_line":"      $.api.[\u0027meters:pagination\u0027]: false"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"fa81d914_5fc0257c","line":16,"in_reply_to":"fa81d914_3fbb7473","updated":"2015-01-29 17:10:34.000000000","message":"One thing I don\u0027t think these tests should be doing is full validation of the data that could be described as being produced outside the controller(s). We\u0027re not trying to validate (with this test) the capabilities of a mongo store used with ceilometer. We\u0027re trying to validate that there is a capabilities \"endpoint\" and it responds with some json.\n\nThere\u0027s at least two reasons for that. One is hopefully captured in the above  statements about what we\u0027re trying to validate.\n\nThe other is that we\u0027ll lose a lot of readability if we\u0027re constantly trying to list vast swaths of JSON or JSON paths per individual HTTP request.\n\nI don\u0027t think we should, but if we decide that we really want to validate the capabilities output in the gabbi tests, then the right thing to would be to make a request per expected json path.\n\nWhere we want to validate the entire structure of some serialized output that ought to be done in something more akin to a unit test that tests the serializer. In large part because we then can have access to both sides of the data without having to write it out \"long hand\" in YAML.\n\nAnd finally: This is just here to provide a starting point. If there\u0027s more than needs to be done with capabilities that can be added down the line.","commit_id":"33ae4d5dd11ee68fa7dda02ae596bfc4d2247bc7"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c8e55fb4c99493f6c4fc9bd555effadab715e28c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"      $.alarm_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":14,"context_line":"      $.event_storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":15,"context_line":"      $.storage.[\u0027storage:production_ready\u0027]: true"},{"line_number":16,"context_line":"      $.api.[\u0027meters:pagination\u0027]: false"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"fa81d914_88da45e6","line":16,"in_reply_to":"fa81d914_5fc0257c","updated":"2015-01-30 10:15:04.000000000","message":"OK, that\u0027s a fair enough stance to take.","commit_id":"33ae4d5dd11ee68fa7dda02ae596bfc4d2247bc7"}]}
