Merge ~blake-rouse/maas:fix-1756985 into maas:master

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: 0f11c25e0a019ea2215683bbaf1214477b84b188
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:fix-1756985
Merge into: maas:master
Diff against target: 83 lines (+20/-11)
4 files modified
src/maasserver/rpc/regionservice.py (+2/-1)
src/maasserver/rpc/tests/test_regionservice.py (+15/-2)
src/maasserver/static/js/angular/directives/power_parameters.js (+2/-7)
src/maasserver/static/js/angular/directives/tests/test_power_parameters.js (+1/-1)
Reviewer Review Type Date Requested Status
Newell Jensen (community) Approve
MAAS Lander Needs Fixing
Andres Rodriguez (community) Approve
Review via email: mp+341836@code.launchpad.net

Commit message

Fixes LP: #1756985 - Fix websocket from setting the default for select power parameter types incorrectly. Return a deepcopy of the RPC cached result so the cache cannot be corrupted.

To post a comment you must log in.
Revision history for this message
Andres Rodriguez (andreserl) wrote :

lgtm!

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b fix-1756985 lp:~blake-rouse/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci-jenkins.internal:8080/job/maas/job/branch-tester/2011/console
COMMIT: 0f11c25e0a019ea2215683bbaf1214477b84b188

review: Needs Fixing
Revision history for this message
Newell Jensen (newell-jensen) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/rpc/regionservice.py b/src/maasserver/rpc/regionservice.py
2index d03ff32..3fbe51f 100644
3--- a/src/maasserver/rpc/regionservice.py
4+++ b/src/maasserver/rpc/regionservice.py
5@@ -9,6 +9,7 @@ __all__ = [
6 ]
7
8 from collections import defaultdict
9+import copy
10 from datetime import (
11 datetime,
12 timedelta,
13@@ -769,7 +770,7 @@ class RackClient(common.Client):
14 if cmd in call_cache:
15 # Call has already been made over this connection, just return
16 # the original result.
17- return succeed(call_cache[cmd])
18+ return succeed(copy.deepcopy(call_cache[cmd]))
19 else:
20 # First time this call has been made so cache the result so
21 # so the next call over this connection will just be returned
22diff --git a/src/maasserver/rpc/tests/test_regionservice.py b/src/maasserver/rpc/tests/test_regionservice.py
23index 246c58b..b235f90 100644
24--- a/src/maasserver/rpc/tests/test_regionservice.py
25+++ b/src/maasserver/rpc/tests/test_regionservice.py
26@@ -635,9 +635,22 @@ class TestRackClient(MAASTestCase):
27 conn = DummyConnection()
28 client = RackClient(conn, {})
29 call_cache = client._getCallCache()
30- call_cache[cluster.DescribePowerTypes] = sentinel.power_types
31+ power_types = {
32+ "power_types": [
33+ {
34+ 'name': 'ipmi',
35+ },
36+ {
37+ 'name': 'wedge',
38+ },
39+ ]
40+ }
41+ call_cache[cluster.DescribePowerTypes] = power_types
42 result = yield client(cluster.DescribePowerTypes)
43- self.assertIs(sentinel.power_types, result)
44+ # The result is a copy. It should equal the result but not be
45+ # the same object.
46+ self.assertEquals(power_types, result)
47+ self.assertIsNot(power_types, result)
48
49 @wait_for_reactor
50 @inlineCallbacks
51diff --git a/src/maasserver/static/js/angular/directives/power_parameters.js b/src/maasserver/static/js/angular/directives/power_parameters.js
52index a96fe5a..01fb2ee 100644
53--- a/src/maasserver/static/js/angular/directives/power_parameters.js
54+++ b/src/maasserver/static/js/angular/directives/power_parameters.js
55@@ -93,13 +93,8 @@ angular.module('MAAS').directive('maasPowerInput', ['$compile',
56
57 // Set the default choice on the model.
58 if(angular.isUndefined(scope.ngModel)) {
59- var i;
60- for(i = 0; i < scope.field.choices.length; i++) {
61- var choice = scope.field.choices[i];
62- if(scope.field["default"] === choice[0]) {
63- scope.ngModel = choice;
64- break;
65- }
66+ if(scope.field["default"]) {
67+ scope.ngModel = scope.field["default"];
68 }
69 }
70 } else {
71diff --git a/src/maasserver/static/js/angular/directives/tests/test_power_parameters.js b/src/maasserver/static/js/angular/directives/tests/test_power_parameters.js
72index a2f8a7f..82d3cda 100644
73--- a/src/maasserver/static/js/angular/directives/tests/test_power_parameters.js
74+++ b/src/maasserver/static/js/angular/directives/tests/test_power_parameters.js
75@@ -133,7 +133,7 @@ describe("maasPowerParameters", function() {
76 var directive = compileDirective("field", "value");
77 var select = directive.find("select");
78 expect(select.attr("name")).toBe("test");
79- expect($scope.value).toBe(choice2);
80+ expect($scope.value).toBe("name2");
81 });
82
83 it("creates input with ng-disabled", function() {

Subscribers

People subscribed via source and target branches