Code coverage report for app/utils/configs/move_hive_component_config_initializer_class.js

Statements: 100% (15 / 15)      Branches: 100% (2 / 2)      Functions: 100% (4 / 4)      Lines: 100% (15 / 15)      Ignored: none     

All files » app/utils/configs/ » move_hive_component_config_initializer_class.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87    1                                     1 1               1                                         3 3 7 7 3 3   7   3 3         1                       3                
'use strict';
 
;require.register("utils/configs/move_hive_component_config_initializer_class", function (exports, require, module) {
  /**
   * 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('utils/configs/move_component_config_initializer_class');
 
  /**
   * Common class for Initializers which are used when some HIVE's component is moved from one host to another
   *
   * @type {MoveComponentConfigInitializerClass}
   * @augments {MoveComponentConfigInitializerClass}
   */
  App.MoveHiveComponentConfigInitializerClass = App.MoveComponentConfigInitializerClass.extend({
 
    initializerTypes: [{ name: 'hive_hosts_with_components', method: '_initAsHostsWithComponentsConsideringMovedComponent' }],
 
    /**
     * Initializer for configs with value equal to the list of hosts where some components exist
     * This list is affected by component's moving.
     * Example: movedComponent is <code>'Component1'</code>, list of needed components is <code>['Component1', 'Component2']</code>
     * So, when hosts for each needed component will be mapped, host where 'Component1' was before moving ('host1') will be skipped
     * and host where 'Component1' is moved will be added ('host2')
     * But, if 'Component2' exists of the 'host1', 'host1' will be added to the hosts list
     *
     * @param {configProperty} configProperty
     * @param {extendedTopologyLocalDB} localDB
     * @param {reassignComponentDependencies} dependencies
     * @param {object} initializer
     * @returns {object}
     * @private
     * @method _initAsHostsWithComponentsConsideringMovedComponent
     */
    _initAsHostsWithComponentsConsideringMovedComponent: function _initAsHostsWithComponentsConsideringMovedComponent(configProperty, localDB, dependencies, initializer) {
      var allHosts = [];
      initializer.components.forEach(function (component) {
        var hosts = localDB.masterComponentHosts.filterProperty('component', component).mapProperty('hostName');
        if (component === initializer.movedComponent) {
          hosts = hosts.without(dependencies.sourceHostName);
          hosts.pushObject(dependencies.targetHostName);
        }
        allHosts = allHosts.concat(hosts);
      });
      Em.set(configProperty, 'value', allHosts.uniq().sort().join(','));
      return configProperty;
    }
 
  });
 
  App.MoveHiveComponentConfigInitializerClass.reopenClass({
 
    /**
     * Settings for <code>hive_hosts_with_components</code>-initializer
     * Used for configs with value equal to the hosts list where needed components exist.
     * This list is affected by component's moving
     *
     * @param {string|string[]} neededComponents
     * @param {string} movedComponent
     * @returns {{type: string, components: string[], movedComponent: string}}
     */
    getHostsWithComponentsConfig: function getHostsWithComponentsConfig(neededComponents, movedComponent) {
      return {
        type: 'hive_hosts_with_components',
        components: Em.makeArray(neededComponents),
        movedComponent: movedComponent
      };
    }
 
  });
});