)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"2eba00c04b8dd06843b3fc183db4367599bd5be2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add write_tests docs for using client managers and credentials"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds documentation on howto interact with clients, client"},{"line_number":10,"context_line":"managers, and credentials objects. These are critical pieces of"},{"line_number":11,"context_line":"information for anyone writing tempest tests, so making sure the guide"},{"line_number":12,"context_line":"includes this information is equally important."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7ffa3b31_3300d067","line":9,"range":{"start_line":9,"start_character":34,"end_line":9,"end_character":39},"updated":"2017-04-17 09:25:35.000000000","message":"s/howto/how to","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"}],"doc/source/write_tests.rst":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a9a47b93cb3f9f132d68dc4236bc2aad1e116967","unresolved":false,"context_lines":[{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials`_ section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_36b8be74","line":260,"range":{"start_line":260,"start_character":25,"end_line":260,"end_character":45},"updated":"2017-04-17 10:36:50.000000000","message":"it should be \":ref:`credentials`\" . it will unblock the gate and links to above created reference.","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials`_ section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_8a564129","line":260,"range":{"start_line":260,"start_character":25,"end_line":260,"end_character":45},"in_reply_to":"7ffa3b31_36b8be74","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"99f569ac6ac2de0a6123bf17b93101a737e68a2a","unresolved":false,"context_lines":[{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials`_ section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"api requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_33b690fc","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":54},"updated":"2017-04-17 09:21:43.000000000","message":"it should be \"API\"","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials`_ section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"api requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_4a36f905","line":262,"range":{"start_line":262,"start_character":50,"end_line":262,"end_character":54},"in_reply_to":"7ffa3b31_33b690fc","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"99f569ac6ac2de0a6123bf17b93101a737e68a2a","unresolved":false,"context_lines":[{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"api requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"},{"line_number":266,"context_line":"call to create a server in Nova::"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_d3cc0c8b","line":264,"range":{"start_line":264,"start_character":1,"end_line":264,"end_character":3},"updated":"2017-04-17 09:21:43.000000000","message":"It should be \"API\"","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the api requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"api requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"},{"line_number":266,"context_line":"call to create a server in Nova::"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_2a3badeb","line":264,"range":{"start_line":264,"start_character":1,"end_line":264,"end_character":3},"in_reply_to":"7ffa3b31_d3cc0c8b","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"99f569ac6ac2de0a6123bf17b93101a737e68a2a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    def test_example_create_server(self):"},{"line_number":273,"context_line":"      self.os.servers_client.create_server(...)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"is all you need to do. As decribed previously, in the above example the self.os"},{"line_number":276,"context_line":"is created automatically because the base test class sets the ``credentials``"},{"line_number":277,"context_line":"attribute to allocate a primary credential set and initializes the client"},{"line_number":278,"context_line":"manager as ``self.os``. This same access pattern can be used for all of the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_13b034f4","line":275,"range":{"start_line":275,"start_character":26,"end_line":275,"end_character":34},"updated":"2017-04-17 09:21:43.000000000","message":"It should be \"described\".","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"7275768eb7f8a282a411d4f8492b76d318de488b","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    def test_example_create_server(self):"},{"line_number":273,"context_line":"      self.os.servers_client.create_server(...)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"is all you need to do. As decribed previously, in the above example the self.os"},{"line_number":276,"context_line":"is created automatically because the base test class sets the ``credentials``"},{"line_number":277,"context_line":"attribute to allocate a primary credential set and initializes the client"},{"line_number":278,"context_line":"manager as ``self.os``. This same access pattern can be used for all of the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bff0334d_9795b689","line":275,"updated":"2017-04-11 14:52:23.000000000","message":"``self.os``","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    def test_example_create_server(self):"},{"line_number":273,"context_line":"      self.os.servers_client.create_server(...)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"is all you need to do. As decribed previously, in the above example the self.os"},{"line_number":276,"context_line":"is created automatically because the base test class sets the ``credentials``"},{"line_number":277,"context_line":"attribute to allocate a primary credential set and initializes the client"},{"line_number":278,"context_line":"manager as ``self.os``. This same access pattern can be used for all of the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_ca21e9b6","line":275,"range":{"start_line":275,"start_character":26,"end_line":275,"end_character":34},"in_reply_to":"7ffa3b31_13b034f4","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"7275768eb7f8a282a411d4f8492b76d318de488b","unresolved":false,"context_lines":[{"line_number":286,"context_line":"body) If you\u0027re in a situation where you need to access this you\u0027ll need to"},{"line_number":287,"context_line":"access the ``credentials`` object which is allocated from the configured"},{"line_number":288,"context_line":"credential provider in the base test class. This is accessible from the manager"},{"line_number":289,"context_line":"object via the manager\u0027s credentials attribute. For example::"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"  from tempest import test"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bff0334d_f7f1a202","line":289,"updated":"2017-04-11 14:52:23.000000000","message":"``credentials``","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":286,"context_line":"body) If you\u0027re in a situation where you need to access this you\u0027ll need to"},{"line_number":287,"context_line":"access the ``credentials`` object which is allocated from the configured"},{"line_number":288,"context_line":"credential provider in the base test class. This is accessible from the manager"},{"line_number":289,"context_line":"object via the manager\u0027s credentials attribute. For example::"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"  from tempest import test"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_2a14cd4d","line":289,"in_reply_to":"bff0334d_f7f1a202","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"99f569ac6ac2de0a6123bf17b93101a737e68a2a","unresolved":false,"context_lines":[{"line_number":296,"context_line":"      credentials \u003d self.os.credentials"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"The credentials object provides access to all of the credential information you"},{"line_number":299,"context_line":"would need to make api requests. For example, building off the previous"},{"line_number":300,"context_line":"example::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_13895422","line":299,"range":{"start_line":299,"start_character":19,"end_line":299,"end_character":22},"updated":"2017-04-17 09:21:43.000000000","message":"it should be \"API\".","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1393a5407bb80340c298b647a5683f391db57d6b","unresolved":false,"context_lines":[{"line_number":296,"context_line":"      credentials \u003d self.os.credentials"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"The credentials object provides access to all of the credential information you"},{"line_number":299,"context_line":"would need to make api requests. For example, building off the previous"},{"line_number":300,"context_line":"example::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7ffa3b31_ea0dc53e","line":299,"range":{"start_line":299,"start_character":19,"end_line":299,"end_character":22},"in_reply_to":"7ffa3b31_13895422","updated":"2017-04-17 14:08:48.000000000","message":"Done","commit_id":"c60d4fdf0d6551e8f9fa7ac4c3682776fbde1983"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3a5412c5c2af2958da3428218bc5336d3c5ab8d1","unresolved":false,"context_lines":[{"line_number":251,"context_line":"cover how credentials and clients are used inside of Tempest tests."},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Manager Objects"},{"line_number":255,"context_line":"---------------"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_cff626d8","line":254,"range":{"start_line":254,"start_character":0,"end_line":254,"end_character":7},"updated":"2017-04-20 15:45:11.000000000","message":"Client Manager","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3a5412c5c2af2958da3428218bc5336d3c5ab8d1","unresolved":false,"context_lines":[{"line_number":255,"context_line":"---------------"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_ef220252","line":258,"range":{"start_line":258,"start_character":18,"end_line":258,"end_character":40},"updated":"2017-04-20 15:45:11.000000000","message":"I think we should refer to the class here.","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3393d3f05896bc8ec1e0d341ea8e18b76b2d82a6","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_85fb7645","line":260,"range":{"start_line":259,"start_character":64,"end_line":260,"end_character":52},"updated":"2017-04-20 03:31:43.000000000","message":"(for more\ndetails see the previous :ref:`credentials` section).\n\nto put the dot at the end?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ecc30a5292d590e4f4c91370e72d412911bfb105","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_5964364a","line":260,"range":{"start_line":259,"start_character":64,"end_line":260,"end_character":52},"in_reply_to":"7ffa3b31_85fb7645","updated":"2017-04-20 08:58:34.000000000","message":"Yeah you\u0027re right it\u0027s missing a dot. But at that point of the review process (already 3 +2), it\u0027s not worth submitting another patchset (PS). Another PS will need yet another round of reviews and take some time. Not worth it for a single dot.\n\nI suggest once this is merged, we put another patch to fix those typos.","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3393d3f05896bc8ec1e0d341ea8e18b76b2d82a6","unresolved":false,"context_lines":[{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"API requests you just access the client\u0027s method for making that call and the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_30d4e247","line":261,"range":{"start_line":260,"start_character":53,"end_line":261,"end_character":37},"updated":"2017-04-20 03:31:43.000000000","message":"This looks a bit misleading. In fact one manager object should only have one credential","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ecc30a5292d590e4f4c91370e72d412911bfb105","unresolved":false,"context_lines":[{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"API requests you just access the client\u0027s method for making that call and the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_99907eef","line":261,"range":{"start_line":260,"start_character":53,"end_line":261,"end_character":37},"in_reply_to":"7ffa3b31_30d4e247","updated":"2017-04-20 08:58:34.000000000","message":"Yeah, I guess credentialS refers to login AND password.","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3a5412c5c2af2958da3428218bc5336d3c5ab8d1","unresolved":false,"context_lines":[{"line_number":257,"context_line":"The primary interface with which you interact with both credentials and"},{"line_number":258,"context_line":"API clients is the client manager object. These objects are created"},{"line_number":259,"context_line":"automatically by the base test class as part of credential setup. (for more"},{"line_number":260,"context_line":"details see the previous :ref:`credentials` section) Each manager object is"},{"line_number":261,"context_line":"initialized with a set of credentials and has each client object already setup"},{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"API requests you just access the client\u0027s method for making that call and the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_bcc2fa32","line":261,"range":{"start_line":260,"start_character":53,"end_line":261,"end_character":37},"in_reply_to":"7ffa3b31_99907eef","updated":"2017-04-20 15:45:11.000000000","message":"one set of credentials held in one instance of a  Credentials subclass... I think one set of credentials is clear enough?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3393d3f05896bc8ec1e0d341ea8e18b76b2d82a6","unresolved":false,"context_lines":[{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"API requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"},{"line_number":266,"context_line":"call to create a server in Nova::"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_25c5c2f1","line":265,"range":{"start_line":265,"start_character":58,"end_line":265,"end_character":64},"updated":"2017-04-20 03:31:43.000000000","message":"want?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ecc30a5292d590e4f4c91370e72d412911bfb105","unresolved":false,"context_lines":[{"line_number":262,"context_line":"to use that set of credentials for making all the API requests. Each client is"},{"line_number":263,"context_line":"accessible as a top level attribute on the manager object. So to start making"},{"line_number":264,"context_line":"API requests you just access the client\u0027s method for making that call and the"},{"line_number":265,"context_line":"credentials are already setup for you. For example if you wanted to make an API"},{"line_number":266,"context_line":"call to create a server in Nova::"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_f96f82f9","line":265,"range":{"start_line":265,"start_character":58,"end_line":265,"end_character":64},"in_reply_to":"7ffa3b31_25c5c2f1","updated":"2017-04-20 08:58:34.000000000","message":"Wanted is fine here. It\u0027s in a \u0027if\u0027 sentence, which means it\u0027s hypothetic, so the past tense is fine. \n\nBut yeah, I\u0027ll suggest we change that to \"want\" in a future PS, there\u0027s no strong reason to not keep it simple.","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"091a2afcb98656ad64a9d5ce936b56405d9ca33d","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"  class TestExampleCase(test.BaseTestCase):"},{"line_number":272,"context_line":"    def test_example_create_server(self):"},{"line_number":273,"context_line":"      self.os.servers_client.create_server(...)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"is all you need to do. As described previously, in the above example the ``self.os``"},{"line_number":276,"context_line":"is created automatically because the base test class sets the ``credentials``"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_825f2f71","line":273,"updated":"2017-04-18 09:17:03.000000000","message":"In a future patch, we should change self.os into self.os_primary. self.os is an alias and, imo, we should encourage people to use the \"real\"/more descriptive variable name.","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3393d3f05896bc8ec1e0d341ea8e18b76b2d82a6","unresolved":false,"context_lines":[{"line_number":281,"context_line":"Credentials Objects"},{"line_number":282,"context_line":"-------------------"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"In certain cases you need direct access to the credentials. (the most common"},{"line_number":285,"context_line":"use case would be an API request that takes a user or project id in the request"},{"line_number":286,"context_line":"body) If you\u0027re in a situation where you need to access this you\u0027ll need to"},{"line_number":287,"context_line":"access the ``credentials`` object which is allocated from the configured"},{"line_number":288,"context_line":"credential provider in the base test class. This is accessible from the manager"},{"line_number":289,"context_line":"object via the manager\u0027s ``credentials`` attribute. For example::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_65298a99","line":286,"range":{"start_line":284,"start_character":58,"end_line":286,"end_character":5},"updated":"2017-04-20 03:31:43.000000000","message":"(the most common\nuse case would be an API request that takes a user or project id in the request\nbody).\n\nto put the dot at the end?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"3393d3f05896bc8ec1e0d341ea8e18b76b2d82a6","unresolved":false,"context_lines":[{"line_number":296,"context_line":"      credentials \u003d self.os.credentials"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"The credentials object provides access to all of the credential information you"},{"line_number":299,"context_line":"would need to make API requests. For example, building off the previous"},{"line_number":300,"context_line":"example::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_d0249eb1","line":299,"range":{"start_line":299,"start_character":46,"end_line":299,"end_character":58},"updated":"2017-04-20 03:31:43.000000000","message":"I am not very clear what does this mean?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ecc30a5292d590e4f4c91370e72d412911bfb105","unresolved":false,"context_lines":[{"line_number":296,"context_line":"      credentials \u003d self.os.credentials"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"The credentials object provides access to all of the credential information you"},{"line_number":299,"context_line":"would need to make API requests. For example, building off the previous"},{"line_number":300,"context_line":"example::"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"  from tempest import test"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_d97846c5","line":299,"range":{"start_line":299,"start_character":46,"end_line":299,"end_character":58},"in_reply_to":"7ffa3b31_d0249eb1","updated":"2017-04-20 08:58:34.000000000","message":"it means \"continuing\".","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3a5412c5c2af2958da3428218bc5336d3c5ab8d1","unresolved":false,"context_lines":[{"line_number":308,"context_line":"      username \u003d credentials.username"},{"line_number":309,"context_line":"      user_id \u003d credentials.user_id"},{"line_number":310,"context_line":"      password \u003d credentials.password"},{"line_number":311,"context_line":"      tenant_id \u003d credentials.tenant_id"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7ffa3b31_cface6ee","line":311,"range":{"start_line":311,"start_character":6,"end_line":311,"end_character":39},"updated":"2017-04-20 15:45:11.000000000","message":"perhaps tenant_id is not the best example, with all the work to switch to project and everyhing?","commit_id":"19b7ba42296a0fb01380d0dc67e41fa23bf89bcc"}]}
