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