AMBARI-21841. Green Version Bubbles Are Selected Multiple Times For Patched 
Services (alexantonenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/138caea7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/138caea7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/138caea7

Branch: refs/heads/feature-branch-AMBARI-21307
Commit: 138caea7bed0e35cb2ad1d83ef53d2b982210171
Parents: 4b04a32
Author: Alex Antonenko <aantone...@hortonworks.com>
Authored: Wed Aug 30 12:19:25 2017 +0300
Committer: Alex Antonenko <aantone...@hortonworks.com>
Committed: Wed Aug 30 12:19:25 2017 +0300

----------------------------------------------------------------------
 ambari-web/app/assets/test/tests.js             |   1 +
 .../models/stack_version/repository_version.js  |   7 +-
 .../upgrade_version_column_view.js              |  30 +++--
 .../upgrade_version_column_view_test.js         | 125 +++++++++++++++++++
 4 files changed, 150 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/138caea7/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js 
b/ambari-web/app/assets/test/tests.js
index 432479d..03b4657 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -280,6 +280,7 @@ var files = [
   'test/views/main/alerts/add_alert_definition/step3_view_test',
   
'test/views/main/alerts/manage_alert_groups/select_definitions_popup_body_view_test',
   'test/views/main/admin/stack_upgrade/upgrade_version_box_view_test',
+  'test/views/main/admin/stack_upgrade/upgrade_version_column_view_test',
   'test/views/main/admin/stack_upgrade/upgrade_group_view_test',
   'test/views/main/admin/stack_upgrade/upgrade_task_view_test',
   'test/views/main/admin/stack_upgrade/upgrade_wizard_view_test',

http://git-wip-us.apache.org/repos/asf/ambari/blob/138caea7/ambari-web/app/models/stack_version/repository_version.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/repository_version.js 
b/ambari-web/app/models/stack_version/repository_version.js
index 3cb22b0..b99bb6f 100644
--- a/ambari-web/app/models/stack_version/repository_version.js
+++ b/ambari-web/app/models/stack_version/repository_version.js
@@ -118,7 +118,12 @@ App.RepositoryVersion = DS.Model.extend({
   /**
    * @type {boolean}
    */
-  isVisible: true
+  isVisible: true,
+
+  /**
+   * @type {boolean}
+   */
+  isCurrent: Em.computed.equal('status', 'CURRENT')
 });
 
 App.RepositoryVersion.FIXTURES = [];

http://git-wip-us.apache.org/repos/asf/ambari/blob/138caea7/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js 
b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
index 0c4408d..11ac1cb 100644
--- 
a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
+++ 
b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
@@ -48,6 +48,7 @@ App.UpgradeVersionColumnView = 
App.UpgradeVersionBoxView.extend({
     var originalServices = this.get('content.stackServices');
     // sort the services in the order the same as service menu
     return App.Service.find().map(function (service) {
+
       var stackService = originalServices.findProperty('name', 
service.get('serviceName'));
       return Em.Object.create({
         displayName: service.get('displayName'),
@@ -102,19 +103,24 @@ App.UpgradeVersionColumnView = 
App.UpgradeVersionBoxView.extend({
    * @returns {boolean}
    */
   isStackServiceAvailable: function(stackService) {
-    var appliedPatchVersions = 
App.RepositoryVersion.find().filterProperty('isPatch').filterProperty('status', 
'CURRENT');
-    var appliedPatchServices = [];
-    appliedPatchVersions.forEach(function(version) {
-      var availableServices = 
version.get('stackServices').toArray().filterProperty('isAvailable').mapProperty('name');
-      appliedPatchServices = 
appliedPatchServices.concat(availableServices).uniq();
-    });
-    if (stackService) {
-      if (this.get('content.isStandard') && 
appliedPatchServices.contains(stackService.get('name'))) {
-        return false;
-      }
-      return stackService.get('isAvailable');
+    if (!stackService) {
+      return false;
+    }
+    if ( this.get('content.isCurrent') ){
+      // if version is current, check whether this service is available and 
the version itself is the newest version of all versions that contain the same 
service
+      var serviceWithHigherVersion =  
App.RepositoryVersion.find().filterProperty('isCurrent').find(function ( 
version ) {
+        var service = version.get('stackServices').toArray().find( function 
(service) {
+          return service.get('name') === stackService.get('name') && 
service.get('isAvailable')
+        });
+        return Boolean(service && 
stringUtils.compareVersions(version.get('repositoryVersion'), 
this.get('content.repositoryVersion')) === 1);
+      }, this);
+      return stackService.get('isAvailable') && !serviceWithHigherVersion;
     }
-    return false;
+    else{
+      return stackService.get('isAvailable')
+    }
+
+
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/138caea7/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_column_view_test.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_column_view_test.js
 
b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_column_view_test.js
new file mode 100644
index 0000000..a7cb395
--- /dev/null
+++ 
b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_column_view_test.js
@@ -0,0 +1,125 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+var App = require('app');
+require('views/main/admin/stack_upgrade/upgrade_version_column_view');
+
+describe('App.UpgradeVersionColumnView', function () {
+  var view =  App.UpgradeVersionColumnView.create({});
+  var versions = [
+    Em.Object.create({
+      status: "CURRENT",
+      repositoryVersion: "2.3.1.1",
+      stackVersionType: 'HDP',
+      hidden: false,
+      isCurrent: true,
+      stackServices:[
+        Em.Object.create({
+          name: 'zk',
+          isAvailable: true
+        }),
+        Em.Object.create({
+          name: 'storm',
+          isAvailable: false
+        }),
+        Em.Object.create({
+          name: 'hdfs',
+          isAvailable: true
+        })
+      ]
+    }),
+    Em.Object.create({
+      status: "CURRENT",
+      repositoryVersion: "2.2.0.1",
+      stackVersionType: 'HDP',
+      hidden: false,
+      isCurrent: true,
+      stackServices: [
+        Em.Object.create({
+          name: 'zk',
+          isAvailable: true
+        }),
+        Em.Object.create({
+          name: 'storm',
+          isAvailable: true
+        }),
+        Em.Object.create({
+          name: 'hdfs',
+          isAvailable: true
+        })
+      ]
+    }),
+    Em.Object.create({
+      status: "INSTALLED",
+      repositoryVersion: "2.0.2.1",
+      stackVersionType: 'HCP',
+      isCompatible: true,
+      hidden: false,
+      stackServices: [
+        Em.Object.create({
+          name: 'zk',
+          isAvailable: true
+        }),
+        Em.Object.create({
+          name: 'storm',
+          isAvailable: false
+        }),
+        Em.Object.create({
+          name: 'hdfs',
+          isAvailable: true
+        })
+      ]
+    })
+  ];
+
+
+  
+  describe("#isStackServiceAvailable", function () {
+    beforeEach(function() {
+      sinon.stub(App.RepositoryVersion, 'find').returns(versions);
+    });
+    afterEach(function() {
+      App.RepositoryVersion.find.restore();
+    });
+    it('Current upgrade with invalid service', function () {
+      view.set('content', versions[0]);
+      expect(view.isStackServiceAvailable()).to.be.false;
+    });
+    it('Current upgrade with new service', function () {
+      view.set('content', versions[0]);
+      
expect(view.isStackServiceAvailable(versions[0].get('stackServices')[0])).to.be.true;
+    });
+    it('Current upgrade with old service', function () {
+      view.set('content', versions[1]);
+      
expect(view.isStackServiceAvailable(versions[1].get('stackServices')[0])).to.be.false;
+    });
+    it('Install upgrade with available service', function () {
+      view.set('content', versions[2]);
+      
expect(view.isStackServiceAvailable(versions[2].get('stackServices')[0])).to.be.true;
+    });
+    it('Install upgrade with unavailable service', function () {
+      view.set('content', versions[2]);
+      
expect(view.isStackServiceAvailable(versions[2].get('stackServices')[1])).to.be.false;
+    });
+    it('Current upgrade with unavailable service', function () {
+      view.set('content', versions[1]);
+      
expect(view.isStackServiceAvailable(versions[1].get('stackServices')[1])).to.be.true;
+    });
+  });
+});
\ No newline at end of file

Reply via email to