)]}'
{"id":"openstack%2Fwatcher~663560","triplet_id":"openstack%2Fwatcher~master~I3305d9afe8ed79e1dc3affe02ba067ac06cece42","project":"openstack/watcher","branch":"master","hashtags":[],"change_id":"I3305d9afe8ed79e1dc3affe02ba067ac06cece42","subject":"Fix property access in test_global_preference* tests","status":"MERGED","created":"2019-06-06 09:29:16.000000000","updated":"2019-06-14 20:17:17.000000000","submitted":"2019-06-14 20:17:17.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":10,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"663560-1560543437851-b3e15709","meta_rev_id":"19733e151faa078d9506d52d50ba7681ade6a322","_number":663560,"virtual_id_number":663560,"owner":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},{"value":2,"date":"2019-06-14 20:17:17.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"date":"2019-06-13 01:01:19.000000000","_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"recommended":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"all":[{"value":0,"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},{"value":1,"date":"2019-06-12 16:17:19.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":2,"date":"2019-06-14 01:58:02.000000000","_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":1,"default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"all":[{"value":1,"date":"2019-06-14 19:42:54.000000000","_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"}],"values":{" 0":"Standard Change","+1":"Important Change","+2":"High Priority Change"},"default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2019-06-12 16:17:19.000000000","updated_by":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"reviewer":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"state":"REVIEWER"},{"updated":"2019-06-14 01:58:02.000000000","updated_by":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"reviewer":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"state":"REVIEWER"},{"updated":"2019-06-14 19:42:54.000000000","updated_by":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"reviewer":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"state":"REVIEWER"},{"updated":"2019-06-14 20:17:17.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"296a9b82136f7ecd44d8214ad963c8c4d0ec5009","author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"date":"2019-06-06 09:29:16.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"b5f6454962bc908c959443b10b5f48c32190e0f5","author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"date":"2019-06-06 09:33:46.000000000","message":"Uploaded patch set 2: Commit message was updated.","accounts_in_message":[],"_revision_number":2},{"id":"534a3890f8d2a1030bf71e083efae11fc312b175","author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"date":"2019-06-06 09:39:18.000000000","message":"Patch Set 2:\n\n@Dantali0n, Sorry for the previous error suggestion.","accounts_in_message":[],"_revision_number":2},{"id":"f937e4c7bdcd9514180e8160acbc08f22195197b","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-06 10:52:05.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-cover http://logs.openstack.org/60/663560/2/check/openstack-tox-cover/ce28096/cover/ : SUCCESS in 5m 49s\n- openstack-tox-lower-constraints http://logs.openstack.org/60/663560/2/check/openstack-tox-lower-constraints/0ee60b5/ : SUCCESS in 5m 39s\n- openstack-tox-pep8 http://logs.openstack.org/60/663560/2/check/openstack-tox-pep8/9c8b9b0/ : SUCCESS in 5m 13s\n- openstack-tox-py27 http://logs.openstack.org/60/663560/2/check/openstack-tox-py27/067b22c/ : SUCCESS in 4m 59s\n- openstack-tox-py36 http://logs.openstack.org/60/663560/2/check/openstack-tox-py36/72cbddd/ : SUCCESS in 5m 20s\n- openstack-tox-py37 http://logs.openstack.org/60/663560/2/check/openstack-tox-py37/afbff32/ : SUCCESS in 6m 03s\n- openstack-tox-docs http://logs.openstack.org/60/663560/2/check/openstack-tox-docs/2559fc2/html/ : SUCCESS in 5m 06s\n- watcher-tempest-functional http://logs.openstack.org/60/663560/2/check/watcher-tempest-functional/6c15722/ : SUCCESS in 29m 10s\n- watcher-tempest-dummy_optim http://logs.openstack.org/60/663560/2/check/watcher-tempest-dummy_optim/6322aac/ : SUCCESS in 46m 36s\n- watcher-tempest-actuator http://logs.openstack.org/60/663560/2/check/watcher-tempest-actuator/037b1bf/ : SUCCESS in 54m 48s\n- watcher-tempest-basic_optim http://logs.openstack.org/60/663560/2/check/watcher-tempest-basic_optim/1637355/ : SUCCESS in 49m 19s\n- watcher-tempest-vm_workload_consolidation http://logs.openstack.org/60/663560/2/check/watcher-tempest-vm_workload_consolidation/1d7826c/ : SUCCESS in 44m 58s\n- watcher-tempest-workload_balancing http://logs.openstack.org/60/663560/2/check/watcher-tempest-workload_balancing/cbb002c/ : SUCCESS in 44m 18s\n- watcherclient-tempest-functional http://logs.openstack.org/60/663560/2/check/watcherclient-tempest-functional/2580a41/ : SUCCESS in 30m 33s\n- watcher-tempest-zone_migration http://logs.openstack.org/60/663560/2/check/watcher-tempest-zone_migration/be7bb71/ : SUCCESS in 46m 54s\n- watcher-tempest-host_maintenance http://logs.openstack.org/60/663560/2/check/watcher-tempest-host_maintenance/5a29492/ : SUCCESS in 54m 35s\n- watcher-tempest-storage_balance http://logs.openstack.org/60/663560/2/check/watcher-tempest-storage_balance/00435a6/ : SUCCESS in 45m 42s\n- watcher-tls-test http://logs.openstack.org/60/663560/2/check/watcher-tls-test/6ce22ab/ : SUCCESS in 53m 08s","accounts_in_message":[],"_revision_number":2},{"id":"d98ddec35b6531bef32b30270b54dfef453ecd22","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-06 15:16:20.000000000","message":"Patch Set 2:\n\n(2 comments)","accounts_in_message":[],"_revision_number":2},{"id":"b133c1477d23bd3e02999e9c3009b77ee29fd913","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-06 15:27:27.000000000","message":"Patch Set 2: Code-Review-1\n\n(1 comment)\n\nI\u0027m good with the fix but I think we can make the tests more robust by injecting a NonCallableMock to make sure this doesn\u0027t happen again if these tests are copied or modified in the future. I\u0027m happy to make that change if you don\u0027t want to spend the time on it.","accounts_in_message":[],"_revision_number":2},{"id":"5e5f246deb857c011801d67db323760773cc1e32","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-06 15:29:19.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"e589e4ce8b31087c56d1484c85c7d56697132aca","author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"date":"2019-06-10 01:28:11.000000000","message":"Patch Set 2:\n\n(3 comments)","accounts_in_message":[],"_revision_number":2},{"id":"fbbdac49b5bf384fe8ad3780da3f20dd3f548ac4","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-12 16:07:04.000000000","message":"Patch Set 2:\n\n(3 comments)\n\nI\u0027m updating.","accounts_in_message":[],"_revision_number":2},{"id":"16187b94d158bec759e9cbee7875f8fafa4837b4","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-12 16:16:58.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"2b93f442f1a0561e187c772303b24673e13eac74","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-06-12 16:17:19.000000000","message":"Patch Set 3: Code-Review+1\n\nlgtm now","accounts_in_message":[],"_revision_number":3},{"id":"ccf20d6ae4addedb22625b80ff324c8a0c7c00d5","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-12 17:33:56.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-cover http://logs.openstack.org/60/663560/3/check/openstack-tox-cover/0e7042f/cover/ : SUCCESS in 7m 10s\n- openstack-tox-lower-constraints http://logs.openstack.org/60/663560/3/check/openstack-tox-lower-constraints/f3af87a/ : SUCCESS in 5m 58s\n- openstack-tox-pep8 http://logs.openstack.org/60/663560/3/check/openstack-tox-pep8/789ceb0/ : SUCCESS in 5m 15s\n- openstack-tox-py27 http://logs.openstack.org/60/663560/3/check/openstack-tox-py27/6244ffa/ : SUCCESS in 6m 04s\n- openstack-tox-py36 http://logs.openstack.org/60/663560/3/check/openstack-tox-py36/7ccf49b/ : SUCCESS in 6m 33s\n- openstack-tox-py37 http://logs.openstack.org/60/663560/3/check/openstack-tox-py37/734c603/ : SUCCESS in 6m 26s\n- openstack-tox-docs http://logs.openstack.org/60/663560/3/check/openstack-tox-docs/45d35c8/html/ : SUCCESS in 5m 19s\n- watcher-tempest-functional http://logs.openstack.org/60/663560/3/check/watcher-tempest-functional/5669454/ : SUCCESS in 34m 02s\n- watcher-tempest-dummy_optim http://logs.openstack.org/60/663560/3/check/watcher-tempest-dummy_optim/a438133/ : SUCCESS in 1h 04m 45s\n- watcher-tempest-actuator http://logs.openstack.org/60/663560/3/check/watcher-tempest-actuator/21462ee/ : SUCCESS in 50m 57s\n- watcher-tempest-basic_optim http://logs.openstack.org/60/663560/3/check/watcher-tempest-basic_optim/466b9b9/ : SUCCESS in 48m 51s\n- watcher-tempest-vm_workload_consolidation http://logs.openstack.org/60/663560/3/check/watcher-tempest-vm_workload_consolidation/e927eee/ : SUCCESS in 1h 00m 50s\n- watcher-tempest-workload_balancing http://logs.openstack.org/60/663560/3/check/watcher-tempest-workload_balancing/5b54f37/ : SUCCESS in 53m 39s\n- watcherclient-tempest-functional http://logs.openstack.org/60/663560/3/check/watcherclient-tempest-functional/7001a53/ : SUCCESS in 33m 10s\n- watcher-tempest-zone_migration http://logs.openstack.org/60/663560/3/check/watcher-tempest-zone_migration/c5b9d74/ : SUCCESS in 57m 34s\n- watcher-tempest-host_maintenance http://logs.openstack.org/60/663560/3/check/watcher-tempest-host_maintenance/72f1418/ : SUCCESS in 50m 57s\n- watcher-tempest-storage_balance http://logs.openstack.org/60/663560/3/check/watcher-tempest-storage_balance/634c972/ : SUCCESS in 50m 24s\n- watcher-tls-test http://logs.openstack.org/60/663560/3/check/watcher-tls-test/b4daba5/ : SUCCESS in 54m 00s","accounts_in_message":[],"_revision_number":3},{"id":"a304e25d1ed962adfbdc1c35eb374b958d127e6c","author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"date":"2019-06-13 01:01:19.000000000","message":"Patch Set 3:\n\n\u003e lgtm now\n\nNice!","accounts_in_message":[],"_revision_number":3},{"id":"f52a2cc899a90ecb0bcad507fb74861bd15389ba","author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"date":"2019-06-14 01:58:02.000000000","message":"Patch Set 3: Code-Review+2","accounts_in_message":[],"_revision_number":3},{"id":"476c0cf302f5f3940ff0eaee3c4a95dcb68a406e","author":{"_account_id":29911,"name":"Dantali0n","email":"info@dantalion.nl","username":"Dantali0n"},"date":"2019-06-14 19:42:54.000000000","message":"Patch Set 3: Workflow+1","accounts_in_message":[],"_revision_number":3},{"id":"63aa92f9d75a872654436ca57153f12c10af4073","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-14 19:43:07.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"20c5e15453bf6a82323de40549467f89a9196cc7","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-14 20:17:17.000000000","message":"Patch Set 3: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- openstack-tox-lower-constraints http://logs.openstack.org/60/663560/3/gate/openstack-tox-lower-constraints/d051328/ : SUCCESS in 5m 24s\n- openstack-tox-pep8 http://logs.openstack.org/60/663560/3/gate/openstack-tox-pep8/e29ae79/ : SUCCESS in 5m 12s\n- openstack-tox-py27 http://logs.openstack.org/60/663560/3/gate/openstack-tox-py27/c6e92fa/ : SUCCESS in 5m 56s\n- openstack-tox-py36 http://logs.openstack.org/60/663560/3/gate/openstack-tox-py36/3bc78d3/ : SUCCESS in 5m 37s\n- openstack-tox-py37 http://logs.openstack.org/60/663560/3/gate/openstack-tox-py37/aeee6d5/ : SUCCESS in 5m 32s\n- openstack-tox-docs http://logs.openstack.org/60/663560/3/gate/openstack-tox-docs/ee5c1cf/html/ : SUCCESS in 4m 46s\n- watcher-tempest-functional http://logs.openstack.org/60/663560/3/gate/watcher-tempest-functional/0d3112a/ : SUCCESS in 32m 32s","accounts_in_message":[],"_revision_number":3},{"id":"19733e151faa078d9506d52d50ba7681ade6a322","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-06-14 20:17:17.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"00f20ab1d481342b7297df14f5ff42a31c185469","revisions":{"abc0eda502deb71c2431381135dfd5f684d2b363":{"kind":"REWORK","_number":1,"created":"2019-06-06 09:29:16.000000000","uploader":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"ref":"refs/changes/60/663560/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher","ref":"refs/changes/60/663560/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher refs/changes/60/663560/1"}}},"commit":{"parents":[{"commit":"7f37f7b92a096405ce24485589ae450baa654e2d","subject":"Remove apidoc","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/7f37f7b92a096405ce24485589ae450baa654e2d"}]}],"author":{"name":"chenke","email":"chen.ke14@zte.com.cn","date":"2019-06-06 09:14:26.000000000","tz":480},"committer":{"name":"chenke","email":"chen.ke14@zte.com.cn","date":"2019-06-06 09:14:26.000000000","tz":480},"subject":"Restore the original meaning of the code","message":"Restore the original meaning of the code\n\nIn Python, when we use @property, the method will be\ndecorated by property.\n\nWhen we call method self.strategy.datasource_backend()[1],\nActually it did two things:\n1. call self.strategy.datasource_backend()\n2. accord the method\u0027s return value[2], call self._datasource_backend()\n\n[1]. https://github.com/openstack/watcher/blob/master/watcher/tests/decision_engine/strategy/strategies/test_base.py#L87\n[2]. https://github.com/openstack/watcher/blob/master/watcher/decision_engine/strategy/strategies/base.py#L370\n\nBut in this part, we just want it to perform the first step.\nSo we have to use self.strategy.datasource_backend instead of\nself.strategy.datasource_backend()\n\nThe reason why the unittest does not report an error is\nbecause the returned value is a mock object, and the second step\nis executed without error, for example:\n\npython -m unittest  watcher.tests.decision_engine.strategy.strategies.test_base\n\n(Pdb) x\u003dself.strategy.datasource_backend\n(Pdb) type(x)\n\u003cclass \u0027mock.mock.MagicMock\u0027\u003e\n(Pdb) x\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()\u0027 id\u003d\u0027139740418102608\u0027\u003e\n(Pdb) x()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n(Pdb) self.strategy.datasource_backend()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n\nChange-Id: I3305d9afe8ed79e1dc3affe02ba067ac06cece42\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/abc0eda502deb71c2431381135dfd5f684d2b363"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/abc0eda502deb71c2431381135dfd5f684d2b363"}]},"branch":"refs/heads/master"},"fdbfa333f63f204dc3d08b4b3c91a3cfbdbba5ce":{"kind":"NO_CODE_CHANGE","_number":2,"created":"2019-06-06 09:33:46.000000000","uploader":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"ref":"refs/changes/60/663560/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher","ref":"refs/changes/60/663560/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher refs/changes/60/663560/2"}}},"commit":{"parents":[{"commit":"7f37f7b92a096405ce24485589ae450baa654e2d","subject":"Remove apidoc","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/7f37f7b92a096405ce24485589ae450baa654e2d"}]}],"author":{"name":"chenke","email":"chen.ke14@zte.com.cn","date":"2019-06-06 09:14:26.000000000","tz":480},"committer":{"name":"chenke","email":"chen.ke14@zte.com.cn","date":"2019-06-06 09:30:41.000000000","tz":480},"subject":"Restore the original meaning of the code","message":"Restore the original meaning of the code\n\nIn Python, when we use @property, the method will be\ndecorated by property.\n\nWhen we call method self.strategy.datasource_backend()[1],\nActually it did two things:\n1. call self.strategy.datasource_backend()\n2. according to  the method\u0027s return value[2], call self._datasource_backend()\n\n[1]. https://github.com/openstack/watcher/blob/master/watcher/tests/decision_engine/strategy/strategies/test_base.py#L87\n[2]. https://github.com/openstack/watcher/blob/master/watcher/decision_engine/strategy/strategies/base.py#L370\n\nBut in this part, we just want it to perform the first step.\nSo we have to use self.strategy.datasource_backend instead of\nself.strategy.datasource_backend()\n\nThe reason why the unittest does not report an error is\nbecause the returned value is a mock object, and the second step\nis executed without error, for example:\n\npython -m unittest  watcher.tests.decision_engine.strategy.strategies.test_base\n(Pdb) x\u003dself.strategy.datasource_backend\n(Pdb) type(x)\n\u003cclass \u0027mock.mock.MagicMock\u0027\u003e\n(Pdb) x\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()\u0027 id\u003d\u0027139740418102608\u0027\u003e\n(Pdb) x()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n(Pdb) self.strategy.datasource_backend()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n\nChange-Id: I3305d9afe8ed79e1dc3affe02ba067ac06cece42\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/fdbfa333f63f204dc3d08b4b3c91a3cfbdbba5ce"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/fdbfa333f63f204dc3d08b4b3c91a3cfbdbba5ce"}]},"branch":"refs/heads/master"},"00f20ab1d481342b7297df14f5ff42a31c185469":{"kind":"REWORK","_number":3,"created":"2019-06-12 16:16:58.000000000","uploader":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"ref":"refs/changes/60/663560/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/watcher","ref":"refs/changes/60/663560/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/watcher refs/changes/60/663560/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/watcher refs/changes/60/663560/3"}}},"commit":{"parents":[{"commit":"7f37f7b92a096405ce24485589ae450baa654e2d","subject":"Remove apidoc","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/7f37f7b92a096405ce24485589ae450baa654e2d"}]}],"author":{"name":"chenke","email":"chen.ke14@zte.com.cn","date":"2019-06-06 09:14:26.000000000","tz":480},"committer":{"name":"Matt Riedemann","email":"mriedem.os@gmail.com","date":"2019-06-12 16:00:45.000000000","tz":-240},"subject":"Fix property access in test_global_preference* tests","message":"Fix property access in test_global_preference* tests\n\nIn Python, when we use @property, the method will be\ndecorated by property.\n\nWhen we call method self.strategy.datasource_backend()[1],\nActually it did two things:\n1. call self.strategy.datasource_backend()\n2. according to  the method\u0027s return value[2], call self._datasource_backend()\n\n[1]. https://github.com/openstack/watcher/blob/bd8636f3f/watcher/tests/decision_engine/strategy/strategies/test_base.py#L87\n[2]. https://github.com/openstack/watcher/blob/bd8636f3f/watcher/decision_engine/strategy/strategies/base.py#L368\n\nBut in this part, we just want it to perform the first step.\nSo we have to use self.strategy.datasource_backend instead of\nself.strategy.datasource_backend()\n\nThe reason why the unittest does not report an error is\nbecause the returned value is a mock object, and the second step\nis executed without error, for example:\n\npython -m unittest  watcher.tests.decision_engine.strategy.strategies.test_base\n(Pdb) x\u003dself.strategy.datasource_backend\n(Pdb) type(x)\n\u003cclass \u0027mock.mock.MagicMock\u0027\u003e\n(Pdb) x\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()\u0027 id\u003d\u0027139740418102608\u0027\u003e\n(Pdb) x()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n(Pdb) self.strategy.datasource_backend()\n\u003cMagicMock name\u003d\u0027DataSourceManager().get_backend()()\u0027 id\u003d\u0027139740410824976\u0027\u003e\n\nTo make the tests more robust, the underlying backend function\nis mocked to be not callable.\n\nCo-Authored-By: Matt Riedemann \u003cmriedem.os@gmail.com\u003e\n\nChange-Id: I3305d9afe8ed79e1dc3affe02ba067ac06cece42\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/00f20ab1d481342b7297df14f5ff42a31c185469"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/watcher/commit/00f20ab1d481342b7297df14f5ff42a31c185469"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
